Hallo! Ich versuche eine Array als __attribute__((_progmem_)) und _attribute_ ((section (".bootloader"))) zu zeichnen aber es klappt nicht. Die Idee ist die Array in PROGMEM zu haben, aber in einer bestimmter Sektion... Beispiel: const uint16_t dk[] PROGMEM = {0xc564, 0x7a38}; // OK, aber nicht wo es sein soll const uint16_t dk[] BOOTLOADER_SECTION = {0xc564, 0x7a38}; // OK, aber lpm_read_word geht nicht const uint16_t dk[] PROGMEM BOOTLOADER_SECTION = {0xc564, 0x7a38}; // waere ideal, aber geht nicht Ist sowas in GCC/C ueberhaupt moeglich? (In GCC/asm geht's noch...) Danke, Richard
Versuch mal char Test __attribute__((_irgendwo_)); Dann im makefile (bei den Linkerflags) LDFLAGS += -Wl,--section-start=.irgendwo=0x0100 #Beispieladdresse!!! Dann müsste die Variable im Flash-Bereich liegen! (FLASH-Zugriffsfunktionen verwenden!! Direkter Zugriff nicht möglich!) Ob das allerdings "guter Stil" ist, weiß ich nicht!
Hallo Tobi, die Sektion ".bootloader" habe ich schon relokiert, wie Du es beschreibst. Das Problem ist, es geht nicht wenn ich versuche beide Attributes zu mischen. Also, wenn ich die Variable NUR als attribute ((irgendwo)) deklariere, dann geht lpm_read_word nicht, und wenn sie nur als attribute ((progmem)) deklariert ist, dann wird sie nicht mehr in Sektion ".bootloader" gesteckt (aber lpm_read_word geht). Im moment habe ich als "workaround", die ganze Sektion ".text" relokiert, und der Bootloader wurde zu einem selbstaendigen Projekt. Sogar schlimmer - der Bootloader hat zwei Stufen (erste Stufe laedt alles im XRAM, zweite Stufe liest XRAM und programmiert Flash). Die zwei Stufen sind noetig denn der Bootloader muss so viel wie moeglich "updateable" sein. So, ich brauche im Moment 3 Projekte, zwei fuer jede Bootloader Stufe, 1 fuer die eigentliche Applikation. Es ist gar nicht elegant...
Hallo Tobi, was ich nicht verstehe: Wieso möchtest Du den Bootloader im Projekt der Applikation behandeln? Dies sind doch eigentlich 2 unabhängige Programme. Ich würde es eher als unelegant sehen, den Bootloader und die Applikation zusammen in einem Projekt zu haben. Den Bootloader kann man schließlich auch für andere Applikationen verwenden. Volkmar
Hi Volkmar, Du hast recht. Der Bootloader soll unabhaengig sein. So werden durch C startup-code alle Static/Global Variablen Nulliert und der Stack Pointer reset, etc... Bei mit ist der Bootloader aber zwei-Teilig, und ich wollte bestimmen wo genau die PROGMEM Consts allokiert werden. Es ist vielleicht das einfachste die LPM Routinen umzuschreiben damit sie nicht mit PROGMEM sondern MYSECTION arbeiten... Danke, Richard
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.