@@ -73,6 +73,8 @@ enum state
7373 s_cars_ready
7474};
7575
76+ uint32_t ticks_left_in_state = 0 ;
77+
7678enum event evq [ EVQ_SIZE ];
7779
7880int evq_count = 0 ;
@@ -85,26 +87,32 @@ void evq_push_back(enum event e);
8587enum event evq_pop_front ();
8688void my_systick_handler ();
8789void evq_init ();
90+ void my_systick_handler ();
8891
8992/* USER CODE END PFP */
9093
9194/* Private user code ---------------------------------------------------------*/
9295/* USER CODE BEGIN 0 */
9396
94- void evq_init () {
95- for (int i = 0 ; i < EVQ_SIZE ; i ++ ) {
96- evq [i ] = ev_error ;
97- }
98- }
99-
100- int systick_count = 0 ;
97+ uint32_t systick_count = 0 ;
10198void my_systick_handler ()
10299{
103- systick_count ++ ;
104- if (systick_count == 1000 )
100+ // Kontrollera om det är dags att generera en ev_state_timeout
101+ if (ticks_left_in_state != 0 )
105102 {
106- HAL_GPIO_TogglePin (LD2_GPIO_Port , LD2_Pin );
107- systick_count = 0 ;
103+ ticks_left_in_state -= (HAL_GetTick ()- systick_count );
104+ if (ticks_left_in_state == 0 )
105+ {
106+ evq_push_back (ev_state_timeout );
107+ }
108+ }
109+
110+ systick_count ++ ;
111+ }
112+
113+ void evq_init () {
114+ for (int i = 0 ; i < EVQ_SIZE ; i ++ ) {
115+ evq [i ] = ev_error ;
108116 }
109117}
110118
@@ -264,30 +272,8 @@ int main(void)
264272 enum state current_state = s_init ;
265273 evq_init ();
266274
267- uint32_t ticks_left_in_state = 0 ;
268- uint32_t curr_tick = 0 ;
269- uint32_t last_tick = 0 ;
270-
271275 while (1 )
272276 {
273-
274- // Lys upp en diod vid knapptryckning
275- // Lampan kommer alltid lysa när vi trycker
276- // Knappen kommer enbart ha inverkan vid aktuella tillstånd
277- if (is_button_pressed ())
278- {
279- HAL_GPIO_WritePin (LD2_GPIO_Port , LD2_Pin , GPIO_PIN_SET );
280- }
281- else
282- {
283- HAL_GPIO_WritePin (LD2_GPIO_Port , LD2_Pin , GPIO_PIN_RESET );
284- }
285-
286- // Kontrollera om det är dags att generera en ev_state_timeout
287- if (ticks_left_in_state == 0 && current_state != s_init && current_state != s_cars_go ) {
288- evq_push_back (ev_state_timeout );
289- }
290-
291277 // Hantera nästa tillstånd baserat på nuvarande tillstånd och händelse
292278 switch (current_state ) {
293279 case s_init :
@@ -387,23 +373,7 @@ int main(void)
387373 break ;
388374 }
389375
390- // Uppdatera tick-värden
391- last_tick = curr_tick ;
392- curr_tick = HAL_GetTick ();
393- // Tickvärden är inte relevanta om vi inte räknar ner tiden
394- if (current_state != s_init && current_state != s_cars_go )
395- {
396-
397- if (ticks_left_in_state - (curr_tick - last_tick ) < 0 )
398- {
399- ticks_left_in_state = 0 ;
400- }
401- else
402- {
403- ticks_left_in_state -= (curr_tick - last_tick );
404- }
405- }
406-
376+ HAL_Delay (1 );
407377 /* USER CODE END WHILE */
408378
409379 /* USER CODE BEGIN 3 */
0 commit comments