μCOS-II中的任务

µCOS-II中的任务
µC/OS-II操作系统主要做三件事:任务,内存、外设。其他要开发⼈员去实现。
µC/OS-II操作系统内核的主要⼯作就是对多任务进⾏管理和调度。因此掌握任务的结构和µC/OS-II对任务的管理⽅法极其重要。
µC/OS-II的任务就是⼀个函数。由三部分组成:
1、任务程序代码:就是C的函数;
2、任务堆栈:⽤来保存任务的⼯作环境;
3、任务控制块:关联任务代码的程序控制块。实际上就是程序控制块,记录任务的各个属性;
µC/OS-II任务有⼆种:⽤户任务和系统任务(⽬前系统任务有2个:空闲任务和统计任务)。µC/OS-II最多可以含有64个任务。
µC/OS-II任务的状态有:
睡眠状态:程序代码驻留在内存中没有交给操作系统的状态;
就绪状态;已经就绪登记,任务具备运⾏的条件,任务就进⼊就绪状态;
运⾏状态;获得cpu的使⽤权任务进⼊运⾏状态。任何时刻只有⼀个任务处于运⾏状态。就绪的任务只有所有优先级⾼于本任务的任务转⼊等待状态,才能进⼊运⾏状态;
等待状态:该任务把cpu的使⽤权让给其他任务就进⼊等待状态;
中断服务状态:执⾏中断服务程序,这时任务的状态就是中断服务状态;
竹炭颗粒⽤户任务代码的⼀般结构:
void MyTask(void * pdata)
{
for(;;)
{
可以被中断的⽤户代码;
OS_ENTER_CRITICAL();//关中断;是µC/OS-II 的宏
不可中断的⽤户代码;
OS_EXIT_CRITICAL();//开中断;是µC/OS-II 的宏
可以中断的⽤户代码;
}
}
⼀般把任务的参数定义成⼀个void类型的指针。
主程序和传统的基本没有区别:
void main()
{
OSInit();//初始化是µC/OS-II
OSTaskCreate(MyTask1,......);//⾃⼰定义的任务
.
.....
OSStart();//启动是µC/OS-II
......
}
既然任务,那么有⼀个任务的优先权和优先级别。因为只有⼀个cpu(⽬前多核是如何处理的?)所以需要⼀个规则:那就是按优先级抢占式的规则。µC/OS- II的编排时按0 1 2 3 4.。。。63编排。数字越⼩级别越⾼。µC/OS-II在配置⽂件中OS_CFG.H中定义了常数
OS_LOWEST+PRIO。最低级别应该是系统的空闲任务。
关于任务的堆栈:
堆栈的特点后进先出(LIFO)。在OS_CPU.H中专门定义了⼀个数据类型OS_STK:
真空自耗炉
typedef unsingned int OS_STK;
因此我们定义任务堆栈的栈区时只要如下即定义堆栈的长度和定义⼀个数组作为任务的堆栈。
#define TASK_STK_SIZE 512
OS_STK    TaskStk[TASK_STK];
那么创建任务函数的原型如下:
INT8U OSTaskCreate(
void (* task) (void * pd), //指向任务的指针
void * pdata,//传递给任务的参数
OS_STK * Pptos,//任务堆栈顶指针抑制的生活
INT8U prio //任务的优先级别
);石墨冷凝器
要注意的是堆栈因处理器不同⽽有增长的⽅向不同。因此要写⼆个版本or通过选择开关选择相应的代码段。.............
# if OS_STK_GROWTH == 1
OSTaskCreate(
mytask,//指向任务的指针
&myTaskAgu,//传递给任务的参数
&MyTaskStk[MyTaskStkN-1],//任务堆栈顶指针
20 //任务的优先级别
);
#else
OSTaskCreate(
mytask,//指向任务的指针
&myTaskAgu,//传递给任务的参数
&MyTaskStk[MyTaskStkN-1],//任务堆栈顶指针
炉温控制系统
20 //任务的优先级别
);
#endif
............
CPU在启动运⾏任务时,CPU的各个寄存器要预置初始数据即任务堆栈的初始化。其原型:OS_STK * OSTaskStkInit(
void (* task) (void *pd),
void * pdato,
OS_STK * ptos,
INT16U opt
);
这个函数由µC/OS-II的任务创建函数调⽤OSTaskCreate(),同时要注意处理器不同⽽不同。
>线圈耳机

本文发布于:2024-09-23 03:25:37,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/263231.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:任务   状态   堆栈   定义
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议