下载此文档

任务切换过程.ppt


文档分类:IT计算机 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
该【任务切换过程 】是由【小落意心冢】上传分享,文档一共【8】页,该文档可以免费在线阅读,需要了解更多关于【任务切换过程 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。任务切换过程
适用于教师试讲、学校演讲、教学课件、说课大赛
1. 
任务切换宏
OS_TASK_SW()
任务切换就是中止正在运行的任务(当前任务),转而去运行另外一个任务的操作,当然这个任务应该是就绪任务中优先级别最高的那个任务
先保护被中止任务的断点数据
后恢复待运行任务的断点数据
不要企图用PUSH和POP指令来使程序计数器PC压栈和出栈,因为没有这样的指令。
只好变通一下了。
中断动作和过程调用指令可以使PC压栈;
中断返回指令可以使PC出栈。
因此任务切换OSCtxSw()必定是一个中断服务程序。
需要由宏OS_TASK_SW()来引发一次中断或者一次调用来使 OSCtxSw()
执行任务切换工作
调度时机
很容易想到的调度时机就
是定时调度。
对于实时系统来说,应该尽
可能地实现即时调度。
用函数OSTaskCreate()
创建任务
应用程序通过调用OSTaskCreate()函数来创建一个任务,OSTaskCreate()函数的原型如下:
 
INT8UOSTaskCreate(
void(*task)(void*pd),//指向任务的指针
void*pdata, //传递给任务的参数
OS_STK*ptos, //指向任务堆栈栈顶的指针
INT8Uprio //任务的优先级
)
创建任务
的一般方法
一般来说,任务可以在调用函数OSStart()启动任务调度之前来创建,也可以在任务中来创建。但是,μC/OS-II有一个规定:在调用启动任务函数OSStart()之前,必须已经创建了至少一个任务。因此,人们****惯上在调用函数OSStart()之前先创建一个任务,并赋予它最高的优先级别,从而使它成为起始任务。然后在这个起始任务中,再创建其他各任务。
如果要使用系统提供的统计任务,则统计任务的初始化函数也必须在这个起始任务中来调用
voidmain(void)
{ ……
OSInit(); //对μC/OS-II进行初始化
……
OSTaskCreate(TaskStart,……);//创建任务TaskStart
OSStart(); //开始多任务调度

voidTaskStart(void*pdata)
{
……//在这个位置安装并启动μC/OS-II的时钟
OSStatInit(); //初始化统计任务
……//在这个位置创建其他任务
for(;;)
{
起始任务TaskStart的代码
}
}
μC/OS-II的
初始化
在使用μC/OS-II的所有服务之前,必须要调用μC/OS-II的初始化函数OSInit()对μC/OS-II自身的运行环境进行初始化。
函数OSInit()将对μC/OS-II的所有的全局变量和数据结构进行初始化,同时创建空闲任务OSTaskIdle,并赋之以最低的优先级别和永远的就绪状态。如果用户应用程序还要使用统计任务的话(常数OS_TASK_STAT_EN=1),则OSInit()还要以优先级别为OS_LOWEST_PRIO-1来创建统计任务
初始化函数OSInit()对数据结构进行初始化时,主要要创建包括空任务控制块链表在内的5个空数据缓冲区。同时,为了可以快速地查询任务控制块链表中的各个元素,初始化函数OSInit()还要创建一个数组OSTCBPrioTbl[OS_LOWEST_PRIO+1],在这个数组中,按任务的优先级别的顺序把任务控制块的指针存放在了对应的元素中
μC/OS-II的启动
μC/OS-II进行任务的管理是从调用启动函数OSStart()开始的,当然其前提条件是在调用该函数之前至少创建了一个用户任务
感谢您的关注

任务切换过程 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小落意心冢
  • 文件大小1.22 MB
  • 时间2023-02-04
最近更新