...
Alternatively, the task can delete itself upon completion as shown in Listing 3.3. Note that the task code is not actually deleted; µC/OS-II simply doesn’t know about the task anymore, so the task code will not run. Also, if the task calls OSTaskDel()
, the task never returns.
µC/OS-II can manage up to 64 tasks; however, the current version of µC/OS-II uses two tasks for system use. I recommend that you don’t use priorities 0, 1, 2, 3, OS_LOWEST_PRIO-3
, OS_LOWEST_PRIO-2
, OS_LOWEST_PRIO-1
, and OS_LOWEST_PRIO
because I may use them in future versions µC/OS-II. However, if you need to keep your application as tight as possible then go ahead and use whatever priorities you need as long as you don’t use OS_LOWEST_PRIO
. OS_LOWEST_PRIO
is a #define constant defined in the file OS_CFG.H
. Therefore, you can have up to 63 of your own application tasks unless you decide to not use the top and bottom four priorities as I recommend. In this case, you would have up to 56 of your own tasks.
...
An OS_TCB
is initialized by the function OS_TCBInit()
(see Listing 3.6) when a task is created. OS_TCBInit()
is called by either OSTaskCreate()
or OSTaskCreateExt()
(see Chapter 4, Task Management). OS_TCBInit()
receives seven arguments:
| is the task priority, |
| is a pointer to the top of stack once the stack frame has been built by |
| is a pointer to the stack bottom and is stored in the |
| is the task identifier and is saved in the |
| is the total size of the stack and is saved in the |
| is the value to place in the |
| is the |
Ready List
Each task is assigned a unique priority level between 0 and OS_LOWEST_PRIO
, inclusive (see OS_CFG.H
). Task priority OS_LOWEST_PRIO
is always assigned to the idle task when µC/OS-II is initialized. Note that OS_MAX_TASKS
and OS_LOWEST_PRIO
are unrelated. You can have only 10 tasks in an application while still having 32 priority levels (if you set OS_LOWEST_PRIO
to 31).
...
Table 3.1 Contents of OSMapTbl[]
.
Index | Bit Mask (Binary) |
---|---|
0 | 00000001 |
1 | 00000010 |
2 | 00000100 |
3 | 00001000 |
4 | 00010000 |
5 | 00100000 |
6 | 01000000 |
7 | 10000000 |
A task is removed from the ready list by reversing the process using the code in Listing 3.8.
...