Hallo zusammen,
ich möchte auf dem STM32 folgendes machen:
Die Hauptschleife soll 1x pro ms ausgeführt werden. Nach Abarbeitung
aller Prozesse soll die CPU bis zur nächsten ms schlafen gehen.
Dazu bringt Timer2 jede 1ms einen Interrupt, der die CPU aufwecken soll.
Ich hab es so implementiert (vereinfacht dargestellt):
1 | volatile uint8_t aufwachen_u8;
|
2 | main()
|
3 | {
|
4 | InitTimer();
|
5 | NVIC_SystemLPConfig(NVIC_LP_SEVONPEND, DISABLE);
|
6 | while (1)
|
7 | {
|
8 | while (aufwachen_u8 == 0)
|
9 | {
|
10 | __WFE();
|
11 | }
|
12 | aufwachen_u8 = 0;
|
13 | Do_All_Work();
|
14 | }
|
15 | }
|
16 |
|
17 | void TIM2_IRQHandler()
|
18 | {
|
19 | TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
|
20 | __SEV();
|
21 | aufwachen_u8 = 1;
|
22 | }
|
Scheint alles zu funktionieren, aber hab ich vielleicht etwas übersehen,
bzw. gibt es noch eine Race-Condition o.ä., die man behandeln müßte?