欢迎光临散文网 会员登陆 & 注册

2.实时性

2023-08-28 18:15 作者:踏星赴梦  | 我要投稿

1.UCOSIII保证实时性的一个点:为了实现中断和任务的同步,需要在中断中进行post操作,UCOSIII为了减少中断执行的时间,提高系统中断响应的实时性,设计了OS_TickTaskOS_IntQTask,这样原本需要在中断里进行一些较为耗时的操作就被放到了任务级代码中去。

1.1时钟节拍任务:OS_TickTask()

属于UCOSIII自带的5个系统任务之一

  • 空闲任务:OS_IdleTask() -->必须的

  • 时钟节拍任务:OS_TickTask() -->必须的

  • 统计任务:OS_StatTask()  -->可选的

  • 定时任务:OS_TmrTask() -->可选的

  • 中断服务管理任务:OS_IntQTask() 可选的

该任务由系统自动创建,其任务优先级为OSCfg_TickTaskPrio,时钟节拍任务的优先级尽量高一些,一般设置为1(值越低,优先级越高),事实上,它的优先级应该设置比重要任务的优先级稍低。

时钟节拍任务的作用:OS的节拍任务,该任务等待信号量的到来,并执行OS_TickListUpdate()函数,对需要延时的任务进行更新,将延时时间到达的任务放回就绪列表中,信号量由节拍函数OS_TimeTick()发出,或者由中断延时函数发送

1.2中断服务管理任务:OS_IntQTask()

  • 属于UCOSIII自带的5个系统任务之一

  • 在配置文件中可以使能中断服务管理任务,使能后系统会自动创建中断服务管理任务

  • 中断服务管理任务的作用:该任务负责“延迟”在ISR(中断服务程序)中调用系统post服务函数的行为

  • 中断服务管理任务的优先级永远是最高的:0

怎么理解“该任务负责“延迟”在ISR(中断服务程序)中调用系统post服务函数的行为”这句话:

原因1:在UCOS中通过关闭中断任务调度器上锁两种方式来管理临界段代码,如果使用任务调度器上锁的方式来管理临界段代码的话,那么在中断服务函数中调用“post类函数”就不允许操作任务就绪表、等待表等系统内部数据解结构(这里是规定)。

原因2:当ISR中调用UCOS提供的“post”类函数时,要发送的数据和发送的目的地都会存入一个特别的缓冲队列中--“holding”队列,当所有嵌套中断结束时,UCOSIII会执行任务切换,运行中断服务管理任务(该任务优先级最高),中断服务管理任务会将holding队列中存放的任务重新发给相应的任务。目的:减少中断关闭的时间

如果没有这个中断服务管理任务,在ISR中还要执行把任务从等待列表中删除,并把任务放入就绪链表中,以及其他的一些耗时操作。

2.FreeRTOS中没有这样的设计

从这一点上,可以看出UCOSIII的实时性要比FreeRTOS好。





2.实时性的评论 (共 条)

分享到微博请遵守国家法律