第二章 μCOS Ⅱ中的任务
2.1 任务的基本概念
2.1.1 任务的状态
睡眠状态 | 任务只是以代码的形式驻留在程序空间(ROM或RAM),还没有交给操作系统管理的情况 |
就绪状态 | 如果系统为任务配置了任务控制块且在任务就绪表中做了就绪登记,则任务就具备了运行的充分条件 |
运行状态 | 处于就绪状态的任务如果获得了CPU的使用权,就进入了运行状态 |
等待状态 | 正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给其他任务而使任务进入等待状态 |
中断服务状态 | 一个正在运行的任务一旦响应中断申请就会中断执行而去执行中断服务程序 |
2.1.2 用户任务代码的一般结构
1.用户任务代码的一般结构
任务的执行代码通常是一个无限循环结构,并且在这个循环中可以响应中断,这种结构也叫超循环结构
例:void MyTask(void *pdata)
{
for( ; ; )
{
可以被中断的用户代码;
OS_ENTER_CRITICAL(); // 进入临界段,关中断;
不可以被中断的用户代码;
OS_EXIT_CRITICAL(); //退出临界段,开中断;
可以被中断的用户代码;
}
}
2.用户应用程序的一般结构
Void MyTask1(void *pdata)
{
for(;;)
{
……
}
}
Void MyTask2(void *pdata)
{
for(;;)
{
……
}
}
Void main()
{
……
OSInit(); // 初始化μCOS Ⅱ
……
OSTaskCreate(MyTask1,……);//创建用户任务1
OSTaskCreate(MyTask2,……);//创建用户任务2
……
OSStart();//启动任务
……
}
2.1.3 系统任务 分为空闲任务和统计任务
1.空闲任务
系统某个时间内无用户任务可运行而处于所谓的空闲状态。
空闲任务的代码如下:
Void OSTaskIdle(void *pdata)
{
#if OS_CRITCAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
Pdata = pdata; //防止某些编译器报销
for(;;)
{
OS_ENTER_CRITICAL();//关闭中断
OsdleCtr++; // 计数
OS_EXIT_CRITICAL(); //开放中断
}
}
μCOS Ⅱ规定,一个用户应用程序必须使用这个空闲任务,而且这个任务是不能用软件来删除的。
2.统计任务
用户应用程序是否使用统计任务,用户可以根据应用程序的实际需要来进行选择。
2.1.4 任务的优先权及优先级别
μCOS Ⅱ把任务的优先权分为64个优先级别,每一个级别都用一个数字来表示。数字0表示任务的优先级别最高;数字越大则表示任务的优先级别越低。