closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

F16_Blockwrite aus EEPROM



pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1031
Registered: 02 / 2009
Homepage Private message
Subject: F16_Blockwrite aus EEPROM  -  Posted: 21.06.2019 - 11:33   -  
Hallo Leute,

ich bin gerade dabei die Daten aus dem EEPROM direkt auf die SDCard zu schreiben.
Nur aus irgendeinen Grund will das ganze nicht so wie ich will.
Er legt die Datei a,. schreibt aber keine Daten. Muss ich beim EEPROM irgendwas zusätzlich beachten?

Oder muss ich hier evtl. den Process sperren?

Code
//---------------------------------------------------------------
// Speichern Config
procedure Save_Cfg( inFileName : string[8]);
var
 wResBlockWrite : Word;
 dosTime, dosDate : word;
 CfgBytesWritten : longword;
 CfgPointer      : pointer;

begin

  sdAktive();   // Timer für SD Anzeige

    // erzeuge Datum und Zeit für Datei
    dosTime := F16_StrToTime( RTCZeitBlock.strzeit);
     dosDate := F16_StrToDate( RTCZeitBlock.strdatum );

    // Dateiname erzeugen
    //DateiNameCfg := inFileName+'.cfg';
    DateiNameCfg := 'boot.cfg';
    // Pfad setzen
     CfgDir := 'para';

      F16_FileAssign(Cfg_Datei, CfgDir, DateiNameCfg);// Handle mit FileNamen verknüpfen
      if F16_FileExist(CfgDir, DateiNameCfg,faAnyFile) then
        F16_FileAppend(Cfg_Datei);               // vorhandene Datei öffnen
        SD_Error := 201; DebugOut('201');
      else // File Exist
        //Create_New_File(DosTime, DosDate);
         if not F16_FileCreate(CfgDir, DateiNameCfg, [faArchive], DosTime, DosDate,0) then
          SD_Error := 207; DebugOut('207');
         endif;

        SD_Error := 202; DebugOut('202');
      endif; // File Exist
       // Schreibe CFG
       
         CfgPointer:= @Cfg1; // ziehe Pointer für Start vom EEPROM
          F16_BlockWrite (Cfg_Datei,  EEPromPtr(CfgPointer), 4032 ,wResBlockWrite );
     //    F16_BlockWrite (Cfg_Datei,  @WebBuf, 512 ,wResBlockWrite );

      CfgBytesWritten:= F16_FileSizeH(Cfg_Datei); //Anzahl der Datenrecords im File
          DebugOut('Bytes im .CFG: ' +LongToStr(CfgBytesWritten)+ ' Res:'+IntToStr(wResBlockWrite));


      if not F16_FileClose(Cfg_Datei) then                         // File schließen
        SD_Error := 204; DebugOut('204');
      endif; // CloseFile
      if not F16_FileSetDate(CfgDir, DateiNameCfg, DosTime, DosDate) then // TimeStamp
        SD_Error := 205; DebugOut('205');
      endif; // FileSetDate
      if not F16_FileSetAttr(CfgDir, DateiNameCfg, [faArchive]) then
        SD_Error := 206; DebugOut('206');
      endif; // FileSetAttr
end Save_Cfg;


Ich würde mir gerne das umkopieren der Daten ins RAM sparen.

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1031
Registered: 02 / 2009
Homepage Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 21.06.2019 - 13:55   -  
OK,

ich glaube ich habe da einen Denkfehler im Ablauf:

Wenn die Datei nicht vorhanden ist lege ich diese ja mit folgenden Code an:
Code
F16_FileCreate(CfgDir, DateiNameCfg, [faArchive], DosTime, DosDate,0)


Aber dann ist Datei ja noch nicht offen, also muss ich diese erst mit F16_FileRewrite oder F16_FileAppend öffnen, bevor ich diese speichere.

Das FileCreate bringt doch eigentlich nur ein Geschwindigkeitsvorteil bei großen Dateien oder?

Sprich bei den 4K vom EEProm kann man doch direkt mit F16_FileRewrite() rangehen.
Er soll eine vorhandene Datei sowieso einfach nur ersetzen und wenn nicht, diese neu anlegen.

Was jetzt bei mir nur noch eine Frage offen ist, sollte die diese Funktion mit "lock(self)" und "unlock(self)" sichern?

In einem anderen Process könnte ja ein Eintrag in die LOGs gemacht werden oder brauche ich mir hier keine Gedanken zu machen? Wird der laufende Process mit der Funktion
Code
F16_BlockWrite (Cfg_Datei,  EEPromPtr(CfgPointer), 4032 ,wResBlockWrite );

überhaupt unterbrochen oder ist diese Funktion bereits im Treiber geschützt?

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
miparo offline
Schreiberling
Avatar
Gender: male
Location: GERMANY  Germany
Age: 53
Posts: 682
Registered: 09 / 2007
Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 21.06.2019 - 14:49   -  
Hi Thorsten,
ein EEPromPtr(CfgPointer) kann nicht funktionieren, da die Funktionen darunter nichts mehr von dem Cast weiß.
Das EEprom wird ja durch IN/OUT Opcodes angesprochen
Nur die neuen Tinys können direkt per LDS/STS das EEprom ansprechen.
Schau dir mein dein generiertes ASM an.
Entweder müsste der Compiler hier einen Fehler ausgeben oder Compiler Magic = selbst umkopieren.

Ohne umkopieren geht das nicht.

miparo
Kein Support per PN! | No support via PM!
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1031
Registered: 02 / 2009
Homepage Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 23.06.2019 - 21:55   -  
Hallo miparo,

kann es sein, das es auch mit dem CopyBlock so Probleme gibt?

Code

         CfgPointer:= @Cfg1; // ziehe Pointer für Start vom EEPROM
          for wXCopy:= 0 to 63 do
            CfgPointerWork:= CfgPointer+(wXCopy * 64);

            CopyBlock( EEPromPtr(CfgPointerWork), @SDBuf64, 64 );
             BFileSaveOK:= F16_BlockWrite (Cfg_Datei,  @SDBuf64, 64 ,wResBlockWrite );
              if not BFileSaveOK then Break; endif;
          endfor;


Ich meine beim CopyBlock ist es doch eigentlich ebenso wie bei dem:
Code
         CfgPointer:= @Cfg1; // ziehe Pointer für Start vom EEPROM
          F16_BlockWrite (Cfg_Datei,  EEPromPtr(CfgPointer), 4032 ,wResBlockWrite );


Müsste das hier nicht identisch funktionieren?

Thorsten

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
This post has been edited 2-times. Last edit: 24.06.2019 - 08:55 by pvs-deck.
go down go up
miparo offline
Schreiberling
Avatar
Gender: male
Location: GERMANY  Germany
Age: 53
Posts: 682
Registered: 09 / 2007
Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 24.06.2019 - 12:31   -  
Moin,
das sind zwei verschiedene Sachen:
Beim CopyBlock( EEPromPtr(CfgPointerWork), @SDBuf64, 64 ); sieht der Compiler, da System Funktion und ruft das richtige Copy auf = CALL SYSTEM.BlockCopyER

Das kann beim F16_BlockWrite nicht funktionieren.

miparo
Kein Support per PN! | No support via PM!
This post has been edited 1-times. Last edit: 24.06.2019 - 12:33 by miparo.
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1031
Registered: 02 / 2009
Homepage Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 24.06.2019 - 12:53   -  
Quote by miparo

Moin,
das sind zwei verschiedene Sachen:
Beim CopyBlock( EEPromPtr(CfgPointerWork), @SDBuf64, 64 ); sieht der Compiler, da System Funktion und ruft das richtige Copy auf = CALL SYSTEM.BlockCopyER

Das kann beim F16_BlockWrite nicht funktionieren.

miparo


Hallo miprao,

danke für die Info. Ich hätte zu der Funktion "F16_FileRewrite()" noch eine Frage.
Ich speichere die aktuelle Config (EEPROM 0-4031) in einer Datei auf der SDCard. Dies ist die BOOT.cfg.
Ich übergebe bei der Funktion das aktuelle Datum und Uhrzeit dosTime und dosDate als WORD. Das speichere ich im unteren Bereich des EEPROMs. Beim booten prüfe ich ob diese Datei vorhanden ist, sollte diese vom Datum / Zeit abweichen wird der Benutzer gefragt ob die Boot.cfg von der SD-Card übernommen werden soll.

Grundsätzlich funktioniert das alles. ABER... wenn ich eine bereits vorhandene Datei mit "F16_FileRewrite()" überschreibe, wird das "TSearchRecord.Dir.WrAccTime" und "TSearchRecord.Dir.WrAccDate" nicht aktuallisiert. Ich dachte hier werden die Schreib Zugriffe (Datum Uhrzeit) gespeichert. Liege ich da falsch?

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
miparo offline
Schreiberling
Avatar
Gender: male
Location: GERMANY  Germany
Age: 53
Posts: 682
Registered: 09 / 2007
Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 24.06.2019 - 13:13   -  
Ein F16_FileRewrite() schreibt aber nicht sofort auf die SD Karte, da evtl, mal ein F16_FlushBufSec gleich hinterher schieben ?
Kein Support per PN! | No support via PM!
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1031
Registered: 02 / 2009
Homepage Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 24.06.2019 - 13:59   -  
Quote by miparo

Ein F16_FileRewrite() schreibt aber nicht sofort auf die SD Karte, da evtl, mal ein F16_FlushBufSec gleich hinterher schieben ?


Hallo miparo,

OK, aber ein F16_FileClose() macht doch eigentlich das gleiche pder?

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
miparo offline
Schreiberling
Avatar
Gender: male
Location: GERMANY  Germany
Age: 53
Posts: 682
Registered: 09 / 2007
Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 24.06.2019 - 14:29   -  
Klaro.
Aber wenn du ein F16_FileRewrite() und danach gleich ein Search ... machst , das war meine Vermutung.
Kein Support per PN! | No support via PM!
go down go up
pvs-deck offline
PowerUser
Avatar
Gender: male
Location: GERMANY 
Age: 48
Posts: 1031
Registered: 02 / 2009
Homepage Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 25.06.2019 - 13:08   -  
Quote by miparo

Klaro.
Aber wenn du ein F16_FileRewrite() und danach gleich ein Search ... machst , das war meine Vermutung.


Hallo miparo,

habe meinen Fehler gefunden :-D (...vor lauter Bäumen... :-D )

So gehts nur, wenn Datum UND Uhrzeit unterschiedlich sind....
Code
    if (SR.Dir.WrAccTime <> wCfgTime ) AND (SR.Dir.WrAccDate <> wCfgDate ) then
        return(false);
    else
       return(true);
    endif;  // Unterschied


Tja und so gehts richtig...
Code
    if (SR.Dir.WrAccTime <> wCfgTime ) OR (SR.Dir.WrAccDate <> wCfgDate ) then
        return(false);
    else
       return(true);
    endif;  // Unterschied


Es gibt so Tage...

Danke Dir trotzdem :-D

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
miparo offline
Schreiberling
Avatar
Gender: male
Location: GERMANY  Germany
Age: 53
Posts: 682
Registered: 09 / 2007
Private message
Subject: Re: F16_Blockwrite aus EEPROM  -  Posted: 25.06.2019 - 13:24   -  
Mahlzeit,
programmieren ohne Fehler und debuggen, das wäre doch langweilig.

miparo
Kein Support per PN! | No support via PM!
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 18.09.2019 - 11:50