Servus.
Ich habe vor Werte in einem Feld zuspeichernm welche dann in mehreren Units genutzt werden.
Definiert werden sie wie folgt:
rgbled.h:
Zugriff in rgbled.c:Code:static volatile uint8_t led1pwm[4]; //[On/Off/Blink, r, g, b] static volatile uint8_t led2pwm[4]; extern void dummy(void);
Laut Disassembler liegt das Feld led1pwm ab 0x0071 im RAM.Code:#include "rgbled.h" void dummy(void) { led1pwm[0] = 1; led1pwm[1] = 64; led1pwm[2] = 64; led1pwm[3] = 64; led2pwm[0] = 1; led2pwm[1] = 0; led2pwm[2] = 0; led2pwm[3] = 255; }
Wenn ich auf die selben Felder aus einer anderen unit zugreife, wird aber auf die Adressen ab 0x0065 geschrieben!?Code:19: led1pwm[0] = 1; +00000196: E091 LDI R25,0x01 Load immediate +00000197: 93900071 STS 0x0071,R25 Store direct to data space
controller.c:
Code:#include "rgbled.h" void main(void) { led1pwm[0] = 1; led1pwm[1] = 64; led1pwm[2] = 64; led1pwm[3] = 64; }Hat jemand eine Idee?Code:133: led1pwm[0] = 1; +000000B6: E081 LDI R24,0x01 Load immediate +000000B7: 93800065 STS 0x0065,R24 Store direct to data space
/edit gelöst...
Das Static war in der Definition war zuviel...
//
Lesezeichen