Hallo Leute,
ich Programmiere auf einem ARM CortexM3 und compiliere mit arm-none-eabi
von Codesourcery.
1 | volatile bool wakeupFromTimer0 = false;
|
In der ISR setze ich immer ein Steuerbit.
1 | void TIMER0_IRQHandler(void)
|
2 | {
|
3 | /* Clear flag for TIMER0 COMPARE0 interrupt */
|
4 | TIMER_IntClear(TIMER0, TIMER_IFC_CC0);
|
5 |
|
6 | /* disable further TIMER0 CC0-Interrupts */
|
7 | TIMER_IntDisable(TIMER0,TIMER_IEN_CC0);
|
8 |
|
9 | /* Set TIMER indication flag*/
|
10 | wakeupFromTimer0 = true;
|
11 | }
|
in meiner msleep() dann folgendes:
1 | /* sleep while waiting */
|
2 | while (!wakeupFromTimer0)
|
3 | EMU_EnterEM2(true);
|
4 | wakeupFromTimer0 = false;
|
1) Brauch ich für das Setzen von wakeupFromTimer0 einen atomaren
Zugriff?
2) Kann das sein, dass der Compiler automatisch mehrere Bool in ein
Register packt? (Also wenn Bitfield NICHT explizit verwendet wird.)