Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Modul Flash Kategorie: Programmierung (von André H. - 20.07.2004 10:26)
Als Antwort auf Modul Flash von M.Seidel - 17.07.2004 9:43
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Mathias,

Zuerst: Bitte formatiere Quellcode immer mit dem code-Tag. Dann lässt sich dieser im Forum
           leichter lesen.

Warum bei Dir False zurückgegeben wird, kann ich Dir nicht sagen.
Deine Routinen sind, wenn man von ein wenig umständlichen Code absieht, in Ordnung.
Vielleich hat der Flash Deiner Unit eine Macke.
Versuche deshalb einmal ein anderes Segment. (z.B. Segment 2)

Ich habe die Flash-Routinen sicherheitshalber nochmal gestestet:
thread main
{byte buf[256],i;
 for i=0 ... 255
 {// Array mit Dummywerten beschreiben
  buf[i]=i*7;
 }
 lcdext.init();
 lcdext.print("Del Flash...");
 flash.DelSeg(1);
 lcdext.print("Done");
 lcdext.line(2);
 lcdext.print("Write Data...");
 lcdext.line(3);
 lcdext.zahl(flash.writeByteArray(1,0,buf,256));
 lcdext.goto(2,13);
 lcdext.print("Done");
 sleep 500;
 quit 2;
}


Ich habe jedesmal True(-1) zurückbekommen.(Auch beim �ndern der Werte des Arrays.)
Teste einmal diese Routine.

Hier noch ein paar Hinweise zu Deinem Code:
 for i=0...255                                         // lese Speicher aus
    {
    sicherung[i]=pcf8583.readbyte(i);
    }

Warum benutzt Du nicht pcf8583.readarray() ?
Absehen davon, da� es dann nur ein Einzeiler wäre, ist es auch schneller.
AuÃ?erdem, warum willst du die ersten 18Byte mit abspeichern ?
Hier befinden sich die Register für Zeit/Datum, Alarmwerte, Timer.
Zurückschreiben darfst Du diese auf jeden Fall nicht alle. Denn sonst kann evtl.
einmal der WD auslösen. (Falls Du diese Funktion des PCF8583 nutzt.)

Auch dies hier kannst Du einfacher lösen:
   fehl=flash.writeByteArray(1,0,sicherung,256); // schreibe Sicherung in Speicher
   if fehl==0                      // Fehlermeldung
    {
    pcflcd.clear();
    pcflcd.goto(4,0);
    pcflcd.print("FEHLER");
    pcflcd.clear();
    return;
    }
   if fehl==-1
    {
    pcflcd.clear();
    pcflcd.goto(4,0);
    pcflcd.print("SICHERUNG OK");
    pcflcd.clear();
    return;
    }
   }


So sollte es etwas einfacher sein:

 pcflcd.line(4);
 if flash.writeByteArray(1,0,sicherung,256) // schreibe Sicherung in Speicher
   pcflcd.print("SICHERUNG OK");
  else
   pcflcd.print("FEHLER");
 sleep 1000; // Ene Pause sollte schon rein. Sonst sieht man den Text kaum. ;-)
 pcflcd.clear();
 return;



MfG André H.



> Hallo,
> ich brauche wieder einmal Hilfe. Ich benutze den Speicher im PCF8583 als ausfallsicheren Variablen-
> Speicher. Jetzt möchte ich eine Sicherungskopie im Flash der Unit ablegen um diese gegebenfalls
> Rückzusichern. Laut Beschreibung erhalte ich bei Schreibfehlern eine Rückgabe FALSE (0). Leider
> bekomme ich eine Fehlermeldung beim schreiben flash.writeByteArray()
>
> Vielen Dank
>
> function sicherung()
> {
> int t,i,fehl;
> byte sicherung[256];
>  pcflcd.clear();
>  loop
>   {
>   t=heizb.Taste();                                    // Tastaturabfrage
>   pcflcd.goto(1,0);
>   pcflcd.print("SPEICHER SICHERN");
>   pcflcd.print("JA-->8 / NEIN-->0");
>   if t==8                                                 // wenn Taste 8
>    {
>    pcflcd.clear();
>    pcflcd.goto(1,0);
>    pcflcd.print("SICHERUNG START");
>    flash.DelSeg(1);                                   // lösche Segment 1
>    sleep 1000;
>    pcflcd.goto(2,0);
>    pcflcd.print("FLASH GELOESCHT");
>    for i=0...255                                         // lese Speicher aus
>     {
>     sicherung[i]=pcf8583.readbyte(i);
>     }
>    pcflcd.goto(3,0);
>    pcflcd.print("DATEN VORBEREITET");
>    sleep 1000;
>    fehl=flash.writeByteArray(1,0,sicherung,256); // schreibe Sicherung in Speicher
>    if fehl==0                      // Fehlermeldung
>     {
>     pcflcd.clear();
>     pcflcd.goto(4,0);
>     pcflcd.print("FEHLER");
>     pcflcd.clear();
>     return;
>     }
>    if fehl==-1
>     {
>     pcflcd.clear();
>     pcflcd.goto(4,0);
>     pcflcd.print("SICHERUNG OK");
>     pcflcd.clear();
>     return;
>     }
>    }
>   if t==0                          // wenn Taste 0
>    {
>    pcflcd.clear();
>    return;
>    }
>   }
> }


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Modul Flash (von M.Seidel - 20.07.2004 12:05)