shark_task.c 892 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "shark_task.h"
  2. #include "shark_bsp.h"
  3. static u64 shark_mseconds;
  4. void SysTick_Handler(void)
  5. {
  6. shark_mseconds++;
  7. }
  8. u64 shark_get_mseconds(void)
  9. {
  10. return shark_mseconds;
  11. }
  12. static u32 shark_task_timer(void)
  13. {
  14. return 1000;
  15. }
  16. static shark_task_t shark_task_head = {
  17. .next = &shark_task_head,
  18. .handler = shark_task_timer
  19. };
  20. void shark_task_add(shark_task_t *task)
  21. {
  22. task->next = shark_task_head.next;
  23. shark_task_head.next = task;
  24. }
  25. void shark_task_run(void)
  26. {
  27. shark_task_t *head = &shark_task_head;
  28. /* setup systick timer for 1000Hz interrupts */
  29. SysTick_Config(SystemCoreClock / 1000);
  30. /* configure the systick handler priority */
  31. NVIC_SetPriority(SysTick_IRQn, 0x00U);
  32. while (1) {
  33. shark_task_t *next = head->next;
  34. u64 time = shark_mseconds;
  35. if (head->time <= time) {
  36. head->time = time + head->handler();
  37. }
  38. head = next;
  39. fwdgt_counter_reload();
  40. }
  41. }