AKOS  v1.0.0
Documentation
Loading...
Searching...
No Matches
priority.c
Go to the documentation of this file.
1/****************************************************************************/
12
13#include "priority.h"
14static uint32_t prio_curr;
15static uint8_t prio_tbl[OS_PRIO_TBL_SIZE];
16
21{
22 uint8_t i;
23 for (i = 0u; i < OS_PRIO_TBL_SIZE; i++)
24 {
25 prio_tbl[i] = 0u;
26 }
27 /* OS_CFG_PRIO_MAX-1 is the lowest priority level and that is idle task's prio */
29}
30
35void akos_priority_insert(uint32_t prio)
36{
37 uint8_t bit;
38 uint8_t row;
39
40 row = (uint32_t)(prio / (8u));
41 bit = (uint8_t)prio & ((8u) - 1u);
42 prio_tbl[row] |= (uint8_t)1u << (((8u) - 1u) - bit);
43}
44
49void akos_priority_remove(uint32_t prio)
50{
51 uint8_t bit;
52 uint8_t row;
53
54 row = (uint32_t)(prio / (8u));
55 bit = (uint8_t)prio & ((8u) - 1u);
56 prio_tbl[row] &= ~((uint8_t)1u << (((8u) - 1u) - bit));
57}
58
64{
65 uint8_t *p_tbl;
66 uint32_t prio;
67
68 prio = 0u;
69 p_tbl = &prio_tbl[0];
70 while (*p_tbl == 0u)
71 { /* Search the bitmap table for the highest priority */
72 prio += (8u); /* Compute the step of each CPU_DATA entry */
73 p_tbl++;
74 }
75
76 uint8_t bit = (uint8_t)prio & ((8u) - 1u);
77 while (!(*p_tbl & ((uint8_t)1u << (((8u) - 1u) - bit))))
78 {
79 prio++;
80 bit = (uint8_t)prio & ((8u) - 1u);
81 }
82 return (prio);
83}
84
90{
91 return prio_curr;
92}
#define OS_CFG_PRIO_MAX
Definition config.h:26
uint32_t akos_priority_get_current(void)
Get current scheduler priority tracker.
Definition priority.c:89
void akos_priority_init()
Initialize ready-priority bitmap table.
Definition priority.c:20
void akos_priority_insert(uint32_t prio)
Insert priority into ready bitmap.
Definition priority.c:35
void akos_priority_remove(uint32_t prio)
Remove priority from ready bitmap.
Definition priority.c:49
uint32_t akos_priority_get_highest(void)
Get highest ready priority.
Definition priority.c:63
Priority bitmap scheduler helpers.