Skip to content

Commit 7198154

Browse files
committed
implemented systick_counter, finished
1 parent dd542b3 commit 7198154

File tree

1 file changed

+20
-50
lines changed
  • labs/lab2/trafikljus/Core/Src

1 file changed

+20
-50
lines changed

labs/lab2/trafikljus/Core/Src/main.c

Lines changed: 20 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ enum state
7373
s_cars_ready
7474
};
7575

76+
uint32_t ticks_left_in_state = 0;
77+
7678
enum event evq[ EVQ_SIZE ];
7779

7880
int evq_count = 0;
@@ -85,26 +87,32 @@ void evq_push_back(enum event e);
8587
enum event evq_pop_front();
8688
void my_systick_handler();
8789
void 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;
10198
void 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

Comments
 (0)