Hallo, also ich bekomm es einfach nicht hin ... wahrscheinlich bin ich schlichtweg zu blöd dafür. Ich will im Flash ein Bereich für Konstanten reservieren, der an einer ganz bestimmten Stelle steht. Habs nun in erster Linie mit den Memory Settings im AVR-Studio versucht, aber meine Angaben werden ganz munter ignoriert. ... nachschauen tue ich mit dem Debugger AVR-Studio 4.13 Build 528. Ich versteh die Welt nicht mehr ... MfG
1 | ; Flash-Segment: |
2 | .cseg |
3 | |
4 | ; Start-Adresse des Blocks: |
5 | .org 0x123 |
6 | |
7 | ; Datenbytes: |
8 | .db 1, 2, 3, 4, 5 |
9 | ; Worte: |
10 | .dw 123, 456, 789 |
Dummy wrote: > Habs nun in erster Linie mit den Memory > Settings im AVR-Studio versucht, aber meine Angaben werden ganz munter > ignoriert. ... nachschauen tue ich mit dem Debugger AVR-Studio 4.13 > Build 528. Was genau bedeutet denn "ignoriert"? Bei 4.14 werden aus den Angaben unter "Memory Settings" jedenfalls korrekte Linker-Options erzeugt. Man muss nur beachten, dass bei "Memory Type" Flash Wort-Adressen einzutragen sind.
Oh, entschuldigung ... ich versuch das Problem in C zu lösen. das ganze müsste dann über _attribute_ ((section (".MySection"))) funktionieren. Nur wie gesagt, ich kann unter den Memory Settings MySection definieren wie ich will, die Ignoranz seitens des Compilers bleibt. MfG
Nochmal, was genau bedeutet "ignoriert"? Poste doch mal die ausgeführte Linker-Kommandozeile.
In dem Debugger des AVR-Studios kann man sich doch den Inhalt des Programmspeichers, des RAMs, usw. anzeigen lassen. Dort lässt sich die Variable, die in meine Section lege aber nicht finden. Was meinst Du mit Linker-Kommandozeile? Wo finde ich die? Meinst Du das Map-File?
Dummy wrote: > In dem Debugger des AVR-Studios kann man sich doch den Inhalt des > Programmspeichers, des RAMs, usw. anzeigen lassen. Dort lässt sich die > Variable, die in meine Section lege aber nicht finden. Das kann aber mehrere Ursachen haben, z.B. auch ein simpler Schreibfehler bei dem, was du unter "Memory Settings" eingetragen hast. > Was meinst Du mit Linker-Kommandozeile? Wo finde ich die? Meinst Du das > Map-File? Im Build-Window gibt es mehrere Zeilen, die mit "avr-gcc.exe" beginnen. Poste die letzte von diesen.
die letzte zeile heisst avr-gcc.exe -mmcu=attiny2313 -Wl,-section-start=TestSec=0x200 main.o -o tiny2313.elf Word-Adresse hab ich 0x0100 ... folglich ist die ByteAdresse 0x200. Das sitmmt also. Das programm schaut so aus
1 | #include <avr/io.h> |
2 | #include <avr/boot.h> |
3 | #include <avr/pgmspace.h> |
4 | |
5 | |
6 | |
7 | |
8 | const char PROGMEM str0[4] = "1234"; |
9 | const char __attribute__ ((section (".TestSec"))) str1[4] = "5678"; |
10 | |
11 | |
12 | int main(void) |
13 | {
|
14 | DDRB = 0xFF; |
15 | unsigned char cnt; |
16 | |
17 | |
18 | while(1) |
19 | {
|
20 | cnt = 10; |
21 | PORTB = pgm_read_byte(&str0[3]); |
22 | |
23 | while(cnt != 0) |
24 | cnt--; |
25 | |
26 | |
27 | cnt = 10; |
28 | PORTB = pgm_read_byte(&str1[3]); |
29 | |
30 | while(cnt != 0) |
31 | cnt--; |
32 | }
|
33 | }
|
Ich hab es jetzt mal durchlaufen lassen, und er gibt über PortB die richtigen Wert aus. Nur sehe ich nicht ob es an der richtigen Adresse steht.
ahhh, die str1 steht unmittelbar hinter dem Programmcode an Word-Adresse 0x6A
> ... -Wl,-section-start=TestSec=0x200 ...
Siehst du, deine Einträge werden nicht ignoriert. ;-)
Aber laut Sourcecode heißt die Section ".TestSec", dann musst du sie
auch so bei den "Memory Settings" eintragen.
Muff, der Punkt war das Problem ... ich dacht, das gehört zu irgendeinem KeyWord oder soetwas. Wer denkt denn daran ... muff. Hab vielen dank, jetzt klappt es. MfG
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.