Hallo, ich habe eine Funktion, die Flash löschen und schreiben kann. Das Problem ist, dass das Flashblock, wo die Funktion gespeichert ist, nicht gelöscht oder geschrieben werden kann. Dann habe ich eine Idee. Nach Startup kopiere ich die Funktion in RAM. Aber meine Frage ist, wie die Funktion aufgeruft werden kann. Da die Funktion eigentlich nach Download auch in Flash gespeicert ist, wird die Funktion aber nicht von Flash aufgeruft sondern von RAM. Gruß, Chris
Wenn dein ???Compiler und dein ???Linker und dein ???Prozessor positionsunabhängigen Code beherrschen, dann einfach den Code in den RAM kopieren und dort in die Funktion springen.
Aber wie? Ich habe so implementiert:
void MyFunk()
{
Flash erease;
Flash write;
}
in Flash gespeichert.
unsigned char MyFunk_RAM [512];
Die Code soll in Array MyFunk_RAM kopiert werden. Kann ich so einfach
aufrufen: MyFunk_RAM( );
Gruss.
Wie viele andere solltest du dir für den Fall einen Bootloader bzw. Ein eigenes Programn schreiben, dass zusätzlich im Flash(an einer Stelle die nicht gelöscht wird) liegt.
Das ist nur ein kleines Versuch zum Löschen und Schreieb. Aber das Flashblock mit der Funktion kann nicht schreiben.
Chris schrieb: > Ich habe so implementiert: Nein, hast du nicht! > unsigned char MyFunk_RAM [512]; > Kann ich so einfach aufrufen: MyFunk_RAM( ); Ein C-Buch wäre der erste Schritt, denn du weisst nicht, was du tust... Chris schrieb: > void MyFunk() > { > Flash erease; > Flash write; > } Was soll das sein? Gehe direkt ins C-Gefängnis, gehe nicht über Los und ziehe keine 4000DM ein. Nach durcharbeiten eines C-Buches kommst du aus dem Gefängnis frei. Außerdem Fehlen da eventuell noch ein paar Infos wie z.B.: Welcher Controller? Welcher Compiler/Tool-Chain/Build-Umgebung?
Kaj schrieb: > Ein C-Buch wäre der erste Schritt, denn du weisst nicht, was du tust... ...und ein Grammatikbuch!
Also beim 8051 ist das ganz einfach. Man schreibt die Funktion so, daß sie nur AJMP und ACALL verwendet (im Compiler Model Tiny einstellen). Damit ist sie in jeden 2kB Block verschiebbar.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.