原创 ucos学习笔记

2009-6-1 00:13 2261 10 9 分类: MCU/ 嵌入式

     ucos 是基于优先级的可抢占式实时内核.由于其使用相对简单,源代码开放,从1998年问世以来,广泛应用在各行各业.2000年,它通过了美国航天局认证,能应用在航天器之类的环境苛刻的设备上面.跟LINUX相比,它不自带常见外设的驱动程序,但是易于裁剪和移植.目前,ucos能移植在40多种CPU上面运行.


      内核的主要功能是完成个任务的调度和资源的分配,以及中断的处理,系统时钟服务,消息机制.ucos所有系统服务均由内核提供。内核将应用系统和底层硬件结合成一个完整的实时系统.原则上内核能保证最高优先级别的任务处于运行状态(因为存在优先级反转问题).OS的两中类型:1)时间片轮番调度 2)优先级可抢占式


轮番调度的每个任务的优先级相同,CPU根据一定时间间隔轮流来执行各个任务.而抢占式的不一样,所有任务的优先级是不一样的,PRIOD 0优先级最高.可以说任务的优先级别代表了该任务.


     任务的5中状态:1)休眠状态 2)运行状态 3)等待状态 4)中断服务状态 5)就绪状态.当任务驻留在ROM或RAM中,此时为休眠态.任务在运行的时候为运行态.当任务等待某个资源或执行OSTimeDly()函数让低优先级的任务运行会进入等待状态.正在运行的任务被中断打断便进入了中断服务状态.当任务已建立便进入就绪状态,如果此时的任务优先级最高,可以进入运行状态.就绪的任务会在任务就绪表相应位置位.


       TCB:任务控制块.是一个比较复杂的数据结构.任何一个任务当被创建以后都会拥有一个TCB.当任务执行OSTaskDel()后会进入空闲任务块.包括任务入口地址,堆栈地址,任务优先级,前一个TCB指针,后一个TCB指针.


       任务的切换:当调用系统API函数,中断处理后会发生任务的切换.系统通过读取任务就绪表,通过TCB中堆栈,任务入口的操作,把优先级最高的且进入就绪状态的任务作为当前要运行的任务进行切换.


       main()


     {


      OSInit();


     OSTaskCreat(...);


     OSStart();


 


      }


 

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条