1 /* 2 * Copyright (c) 2023 Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>. 3 * Copyright (c) 2026 Martin Javier Klöckner <mklockner@fi.uba.ar> 4 * 5 * See file `LICENSE` for full details 6 */ 7 8 #include "main.h" 9 10 #include "logger.h" 11 #include "dwt.h" 12 13 #include "board.h" 14 #include "app.h" 15 #include "task_system_attribute.h" 16 17 #define EVENT_UNDEFINED (255) 18 #define MAX_EVENTS (16) 19 20 struct 21 { 22 uint32_t head; 23 uint32_t tail; 24 uint32_t count; 25 task_system_ev_t queue[MAX_EVENTS]; 26 } queue_task_a; 27 28 void init_queue_event_task_system(void) 29 { 30 uint32_t i; 31 32 queue_task_a.head = 0; 33 queue_task_a.tail = 0; 34 queue_task_a.count = 0; 35 36 for (i = 0; i < MAX_EVENTS; i++) 37 queue_task_a.queue[i] = EVENT_UNDEFINED; 38 } 39 40 void put_event_task_system(task_system_ev_t event) 41 { 42 queue_task_a.count++; 43 queue_task_a.queue[queue_task_a.head++] = event; 44 45 if (MAX_EVENTS == queue_task_a.head) 46 queue_task_a.head = 0; 47 } 48 49 task_system_ev_t get_event_task_system(void) 50 { 51 task_system_ev_t event; 52 53 queue_task_a.count--; 54 event = queue_task_a.queue[queue_task_a.tail]; 55 queue_task_a.queue[queue_task_a.tail++] = EVENT_UNDEFINED; 56 57 if (MAX_EVENTS == queue_task_a.tail) 58 queue_task_a.tail = 0; 59 60 return event; 61 } 62 63 bool any_event_task_system(void) 64 { 65 return (queue_task_a.head != queue_task_a.tail); 66 }
