Hallo. Was mache ich hier falsch? Ich deklariere in meinem .S-File zwei Variablen: .global var_a .global var_b var_a: .byte 4 var_b: .byte 1 In meinem .c-File mache ich dann das: extern unsigned char var_a[4]; extern unsigned char var_b; und in der main: var_a[0] = 1; var_a[1] = 2; ... var_b = 5; Freundlicherweise 'optimiert' der Linker das so schön, das im Moment var_a[1] und var_b die gleiche Adresse kriegen. Gibt es irgendeine Lösung, mit der das sicher funktioniert. Die Variablen will ich in Assembler deklarieren, damit sie im Speicher genau hintereinander stehen, zweckes Zeiger-Zugriffen, aber ich würde den Linker gerne verstehen und richtig bedienen wollen. Danke für Hilfe! Timo
Timo schrieb: > Freundlicherweise 'optimiert' der Linker das so schön, das im Moment > var_a[1] und var_b die gleiche Adresse kriegen. Nicht der Linker ist daran Schuld, sondern du. var_a ist genau ein Byte groß (und 4 ist der Inhalt dieses einen Bytes).
var_a ist nur 1 Byte groß. Einfach mal schauen, was avr-gcc daraus machen würde:
1 | .global var_a |
2 | .data |
3 | .type var_a, @object |
4 | .size var_a, 4 |
5 | var_a: |
6 | .byte 4 |
7 | .byte 0 |
8 | .byte 0 |
9 | .byte 0 |
10 | .global var_b |
11 | .type var_b, @object |
12 | .size var_b, 1 |
13 | var_b: |
14 | .byte 1 |
Das type-Zeug ist für den Debugger, brauchst du also nicht.
Und danke natürlich an die richtigen Antworten. Die helfen mit schon weiter! @Stefan: Hehe, dass das nicht unbedingt des Linkers Schuld war, dachte ich mir schon ;)
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.