Mehr "volatile" geht wohl kaum und trotzdem "KLAUT" mir der Compiler meinen Code. Wo muss das "volatile" denn hin, damit der compiler meinen Code NICHT rausschmeisst ?????
Die Funktion "ShiftOut() " welche ich vom Hauptprogramm aufrufe, wird rausgeschmissen, (wegoptimiert)
wie kann das denn sein ?????
Wichtig: ANSI-C tauglich
Compiler: IAR Embedded Workbench 5.4Code:typedef volatile union { struct { int data : 16; int reserved0 : 16; } bits; U32 value; } SSP1DR_TypeDef; #define LPC_SSP1DR (* (SSP1DR_TypeDef *)(0x40030008)) typedef volatile union { volatile struct { volatile int TFE : 1; volatile int TFN : 1; volatile int RNE : 1; volatile int RFF : 1; volatile int BSY : 1; volatile int reserved0 : 27; } bits; volatile U32 value; } SSP1SR_TypeDef; #define LPC_SSP1SR (* (volatile SSP1SR_TypeDef *)(0x4003000C)) unsigned char data; void ShiftOut() { while (LPC_SSP1SR.bits.BSY) ; /* wait until BSY becomes zero */ LPC_SSP1DR.value = data; /* shift out the data byte */ } int main(void) { while (1) { data = 0xAA; ShiftOut(); } }
fassungslos...
Siro







Zitieren

Lesezeichen