嵌入式开发交流网论坛
标题: 嵌入式学习---uCOS-ii [打印本页]
作者: hjkkjh110 时间: 2018-11-28 01:53
标题: 嵌入式学习---uCOS-ii
关注“嵌入式软件开发学习圈”免费获取更多学习教程
[attach]18652[/attach]
UCOSII概述
UCOSII是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。为了提供最好的移植性能,UCOSII最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。
[attach]18653[/attach]
UCOSII基本功能
任务
将一个大任务分解为多个小任务,然后通过运行小任务达到解决大
任务的目的。这个小任务对应的程序实体就叫“任务”。
使操作系统并发的运行多个任务,从而提高处理器的利用率,加快程序
执行速度。
UCOS通过对小任务的运行进行管理和调度。
任务分两种:用户任务和系统任务。
用户任务:应用程序设计者编写的任务,解决应用问题。
系统任务:系统提供的任务,为应用程序提供服务或为系统本身服务。
[attach]18654[/attach]
一个完整的任务应该有如下三部分:
任务代码(程序)
任务的私有堆栈(用以保护运行环境)
任务控制块(关联任务代码的程序控制块)
[attach]18655[/attach]
并发:
由同一个处理器轮换地运行多个程序。或者说是由多个程序轮班地占用处理器这个资源。且在占用这个资源期间,并不一定能够把程序运行完毕。
[attach]18656[/attach]
UCOS是怎样实现多任务并发工作的呢?
外部中断相信大家都比较熟悉了。CPU在执行一段用户代码的时候,如果此时发生了外部中断,那么先进行现场保护,之后转向中断服务程序执行,执行完成后恢复现场,从中断处开始执行原来的用户代码。Ucos的原理本质上也是这样的,当一个任务A正在执行的时候,如果他释放了cpu控制权,先对任务A进行现场保护,然后从任务就绪表中查找其他就绪任务去执行,等到任务A的等待时间到了,它可能重新获得cpu控制权,这个时候恢复任务A的现场,从而继续执行任务A,这样看起来就好像两个任务同时执行了。实际上,任何时候,只有一个任务可以获得cpu控制权。这个过程很负责,场景也多样,这里只是举个简单的例子说明。
任务切换
中止当前正在运行任务,转而去运行另外一个任务就绪任务。任务无缝切换的关键是断点数据的保护。也就是必须任务在终止时把该任务的断点数据保存到堆栈,而在被重新运行时,则把堆栈中的这些断点数据重新恢复到CPU的各寄存器,实现程序的无缝切换。
uC/OS-II只是一个实时操作系统内核,它包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。
uC/OS-II的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。
UCOS任务的一般格式:
voidMyTask(void *pdata)
{
任务准备工作…
While(1)//死循环
{
任务MyTask实体代码;
OSTimeDlyHMSM(x,x,x,x);//调用任务延时函数,释放cpu控制权,
}
}
l所谓的任务,其实就是一个死循环函数,该函数实现一定的功能,一个工程可以有很多这样的任务(最多255个),UCOSII对这些任务进行调度管理,让这些任务可以并发工作(注意不是同时工作!!,并发只是各任务轮流占用CPU,而不是同时占用,任何时候还是只有1个任务能够占用CPU),这就是UCOSII最基本的功能。
任务优先级
这个概念比较好理解,ucos中,每个任务都有唯一的一个优先级。优先级是任务的唯一标识。在UCOSII中,使用CPU的时候,优先级高(数值小)的任务比优先级低的任务具有优先使用权,即任务就绪表中总是优先级最高的任务获得CPU使用权,只有高优先级的任务让出CPU使用权(比如延时)时,低优先级的任务才能获得CPU使用权。UCOSII不支持多个任务优先级相同,也就是每个任务的优先级必须不一样。
l在创建任务的时候可以赋予优先级,也可以更改。
INT8UOSTaskCreate(void(*task)(void *p_arg),void*p_arg,OS_STK*ptos,INT8U prio);
lINT8UOSTaskChangePrio(INT8U oldprio,INT8Unewprio);
这个函数之所以不需要指定修改哪个任务,是因为优先级是任务的唯一标识,优先级是多少就决定是了哪个任务。
[attach]18657[/attach]
直接在微信公众号留言回复“电子书20180916”即可,你们的关注是我坚持的最大的动力。
[attach]18658[/attach]
直接在微信公众号留言回复“电子书20180808”即可,你们的关注是我坚持的最大的动力。
分享一个C语言学习入门的电子书
[attach]18659[/attach]
[attach]18660[/attach]
[attach]18661[/attach]
该书内容还是比较多 ,非常适合学习。。。
如需获取这两本电子书,直接在微信公众号留言回复“电子书20180729”即可,你们的关注是我坚持的最大的动力。。
关注微信公众号“嵌入式软件开发学习圈”获取更多嵌入式学习资讯
如需获取其他学习资料,直接在微信公众号留言
[attach]18662[/attach]
欢迎光临 嵌入式开发交流网论坛 (http://www.dianzixuexi.com/bbs/) |
Powered by Discuz! X3.2 |