最近在做一些关于一些驱动向TI板子的移植集成的事情,涉及操作系统为RTOS实时操作系统,在这里简单的记录一下。本文主要叙述如何进行多任务的编程,以及我在编程中遇到的一些不解。
- Task组成部分:任务函数,任务参数(属性),任务堆栈.
实际上Task是sys/bios提供的一种并发编程手段,也是实时操作系统必备要素之一,
和我们常见到的线程是一个道理,换了个说法。
- Task类型:硬中断HWI,软中断SWI,任务Task,空闲任务IDLE.
- 优先级排列:硬中断HWI>软中断SWI>任务Task>空闲任务IDLE.
举个例子:
同时存在四种任务,优先处理硬中断;
如果只存在一种类型任务,优先处理该类型中优先级高的任务;
如果只存在一种类型任务,且优先级相同,任务调度取决于系统调度程序;
(特殊情况除外)
- 四种类型任务释义:
硬中断:实时环境中,它是响应外部触发的异步事件(中断)-----优先级不由sys/bios管理,由cpu的特性决定。
虽然优先级最高,当然也可以被中断。
软中断:软件中断服务例程 ------优先级可以达到 32 级,默认只有 16 级。
SWI 可以被更高优先级的 SWI 和 HWI 抢占,但是 SWI 是不会阻塞的。
任务:用户任务,运行过程中,可以被阻塞直到必要的资源可用;
TASK 要求每个任务要有自己独立的栈空间。
SYS/BIOS 提供了一些机制用于 TASK 间的同步和通信,它们有信号量(Semphore),事件(Events),队列(Queue)和邮箱(Mailboxes)。
优先级也可以达到 32 级,默认是 16 级。
Task 优先级数值越大,其优先级就越高,0 是优先级最低的。Task_setPri 函数动态的更改。新的优先级必须在 1 到 TnumPriorities – 1 之间。当新优先级数低于当前优先级时,可能会发生任务的切换。
空闲任务:优先级最低的任务。
当 SYS/BIOS 没有比空闲任务更高的任务运行时,SYS/BIOS 就会执行空闲任务,并且是连续执行,直到有更高的任务进入就绪状态。
其运行在Task任务 0 优先级上。
- 创建一个task过程:
#include <app.h>
#include <utils/console_io/include/app_log.h>
#include <xdc/runtime/Error.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>
#include <app_ipc_rsctable.h>
static Void appMain(UArg arg0