#include "shark_task.h" #include "shark_bsp.h" static u64 shark_mseconds; void SysTick_Handler(void) { shark_mseconds++; } u64 shark_get_mseconds(void) { return shark_mseconds; } static u32 shark_task_timer(void) { return 1000; } static shark_task_t shark_task_head = { .next = &shark_task_head, .handler = shark_task_timer }; void shark_task_add(shark_task_t *task) { task->next = shark_task_head.next; shark_task_head.next = task; } void shark_task_run(void) { shark_task_t *head = &shark_task_head; /* setup systick timer for 1000Hz interrupts */ SysTick_Config(SystemCoreClock / 1000); /* configure the systick handler priority */ NVIC_SetPriority(SysTick_IRQn, 0x00U); while (1) { shark_task_t *next = head->next; u64 time = shark_mseconds; if (head->time <= time) { head->time = time + head->handler(); } head = next; fwdgt_counter_reload(); } }