论文部分内容阅读
摘要:uC/OS-III是Micrium公司于2011年8月1日发布的占先式硬实时系统,uC/OS-III任务间的通信可以通过全局变量、信号量、任务内建消息队列、外部消息队列、事件标志组实现。
关键词:uC/OS-III;uC/OS-III任务间通信;嵌入式系统
中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)02-0306-03
Communication between uC/OS-III ’s tasks
QU Huan-yu,CHEN Li-ping,WANG Ji-xin
(School of Mathematics,Physics and Informaiton Engineering ,Jiaxing University,Jiaxing 314001, China)
Abstract: uC/OS-III is a preemptive real-time system published by Micrium at August 1,2011. uC/OS-III’s inter-tasks communication through global variables,semaphores,task built-in message queues,external message queues,event flags group.
Key words: uC/OS-III;uC/OS-III inter-task communication;embedded system
这几年年来,数字化技术飞速发展,嵌入式产品应用在我们生活中的各个方面。而操作系统作为嵌入式产品的核心,起着越来越不可或缺的作用。嵌入式产品的实时性、容错能力等关键因素很大程度都决定于嵌入式操作系统的性能。本文主要研究了最近发布的硬实时系统uC/OS-III及其任务间的通信方式。
uC/OS-III任务间的通信方式相对于其它实时系统有较大的改变。尤其是任务内建消息队列后,中断程序可以直接发送消息给任务而不通过消息队列,这在一些采集信号频繁的应用中能大大提高其实时处理能力,从而提高整个系统的效率。
1内核对象的结构分析
1.1信号量
typedef struct os_sem OS_SEN;(1)
struct os_sem{
OS_OBJ_TYPEType;(2)
CPU_CHAR*NamePtr;(3)
OS_PEND_LISTPendList;(4)
OS_SEM_CTR Ctr;(5)
CPU_TSTS; };(6)
struct OS_PEND_LIST{
OS_PEND_DATA*HeadPtr;
OS_PEND_DATA*TailPtr;
OS_OBJ_QTY NbrEntries;};
在uC/OS-III中,所有的结构体都会有特定的数据类型。
信号量结构体中的第一个变量是"Type"域,表明该内核对象是一个信号量,从而保证通过引用调用信号量的函数也能够识别所传入的参数是信号量的地址而非其他。
信号量被赋予一个用户自定义的名字,便于调试。
若有多个任务等待该信号量,这些任务就会被放入挂起队列中。OS_PEND_LIST是一个结构体,它控制挂起队列,其内部的三个变量分别指向挂起队列的头部和尾部,以及挂起队列的长度。
信号量计数值,定义为该信号量可以被访问的次数。
信号量中包含了一个时间戳变量,存储了上一次信号量被提及时的时间戳。
用户代码不能直接访问信号量结构体,必须通过uC/OS-III所定义的API,否则会导致一些数据的丢失。
1.2消息及消息队列
图2外部消息队列及任务内建消息队列
置位OS_CFG.H中的OS_CFG_Q_EN开启消息队列服务,如果多个任务等待同一个消息队列中的消息,则可创建一个OS_Q,发送消息到该OS_Q中。uC/OS-III还可以广播消息给所有在消息队列中等待的任务。
消息队列是FIFO模式,也可以设置为LIFO模式,若任务或ISR(中断服务程序)发送紧急消息给另一个任务时,LIFO模式是非常高效的,在这种情况下,该紧急消息将绕过消息队列中的其他消息。
当一个消息被发送到消息队列时,等待该消息的高优先级任务首先接收到这个消息。
图4通过事件标志组任务间的通信
事件标志组的位宽可以在OS_TYPE.H中配置,可以是8位,16位或32位,事件标志组必须在创建后使用。任务或ISR可以提交标志,然而,只有任务可以将在事件标志组中等待的其它任务删除,取消等待,只有任务才能让任务在事件标志组中等待。任务可以等待事件标志组中的任意个位被设置。等待可以以时基为单位被设置期限。
2结束语
uC/OS-III任务间的通信可以通过全局变量、信号量、任务内建消息队列、外部消息队列、事件标志组实现。全局变量用于共享一些对数据安全性不高的通用数据,信号量用于任务间共享一些被限制的资源,任务内建消息队列一般用于接收少量消息(如中断程序发送过来的消息)、外部消息队列主要面向于多个任务共同等待的消息、事件标志组则用于多个任务间的同步。
参考文献:
[1] Micrium Micrium-uCOS-III-UserManual [M] .R
关键词:uC/OS-III;uC/OS-III任务间通信;嵌入式系统
中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)02-0306-03
Communication between uC/OS-III ’s tasks
QU Huan-yu,CHEN Li-ping,WANG Ji-xin
(School of Mathematics,Physics and Informaiton Engineering ,Jiaxing University,Jiaxing 314001, China)
Abstract: uC/OS-III is a preemptive real-time system published by Micrium at August 1,2011. uC/OS-III’s inter-tasks communication through global variables,semaphores,task built-in message queues,external message queues,event flags group.
Key words: uC/OS-III;uC/OS-III inter-task communication;embedded system
这几年年来,数字化技术飞速发展,嵌入式产品应用在我们生活中的各个方面。而操作系统作为嵌入式产品的核心,起着越来越不可或缺的作用。嵌入式产品的实时性、容错能力等关键因素很大程度都决定于嵌入式操作系统的性能。本文主要研究了最近发布的硬实时系统uC/OS-III及其任务间的通信方式。
uC/OS-III任务间的通信方式相对于其它实时系统有较大的改变。尤其是任务内建消息队列后,中断程序可以直接发送消息给任务而不通过消息队列,这在一些采集信号频繁的应用中能大大提高其实时处理能力,从而提高整个系统的效率。
1内核对象的结构分析
1.1信号量
typedef struct os_sem OS_SEN;(1)
struct os_sem{
OS_OBJ_TYPEType;(2)
CPU_CHAR*NamePtr;(3)
OS_PEND_LISTPendList;(4)
OS_SEM_CTR Ctr;(5)
CPU_TSTS; };(6)
struct OS_PEND_LIST{
OS_PEND_DATA*HeadPtr;
OS_PEND_DATA*TailPtr;
OS_OBJ_QTY NbrEntries;};
在uC/OS-III中,所有的结构体都会有特定的数据类型。
信号量结构体中的第一个变量是"Type"域,表明该内核对象是一个信号量,从而保证通过引用调用信号量的函数也能够识别所传入的参数是信号量的地址而非其他。
信号量被赋予一个用户自定义的名字,便于调试。
若有多个任务等待该信号量,这些任务就会被放入挂起队列中。OS_PEND_LIST是一个结构体,它控制挂起队列,其内部的三个变量分别指向挂起队列的头部和尾部,以及挂起队列的长度。
信号量计数值,定义为该信号量可以被访问的次数。
信号量中包含了一个时间戳变量,存储了上一次信号量被提及时的时间戳。
用户代码不能直接访问信号量结构体,必须通过uC/OS-III所定义的API,否则会导致一些数据的丢失。
1.2消息及消息队列
图2外部消息队列及任务内建消息队列
置位OS_CFG.H中的OS_CFG_Q_EN开启消息队列服务,如果多个任务等待同一个消息队列中的消息,则可创建一个OS_Q,发送消息到该OS_Q中。uC/OS-III还可以广播消息给所有在消息队列中等待的任务。
消息队列是FIFO模式,也可以设置为LIFO模式,若任务或ISR(中断服务程序)发送紧急消息给另一个任务时,LIFO模式是非常高效的,在这种情况下,该紧急消息将绕过消息队列中的其他消息。
当一个消息被发送到消息队列时,等待该消息的高优先级任务首先接收到这个消息。
图4通过事件标志组任务间的通信
事件标志组的位宽可以在OS_TYPE.H中配置,可以是8位,16位或32位,事件标志组必须在创建后使用。任务或ISR可以提交标志,然而,只有任务可以将在事件标志组中等待的其它任务删除,取消等待,只有任务才能让任务在事件标志组中等待。任务可以等待事件标志组中的任意个位被设置。等待可以以时基为单位被设置期限。
2结束语
uC/OS-III任务间的通信可以通过全局变量、信号量、任务内建消息队列、外部消息队列、事件标志组实现。全局变量用于共享一些对数据安全性不高的通用数据,信号量用于任务间共享一些被限制的资源,任务内建消息队列一般用于接收少量消息(如中断程序发送过来的消息)、外部消息队列主要面向于多个任务共同等待的消息、事件标志组则用于多个任务间的同步。
参考文献:
[1] Micrium Micrium-uCOS-III-UserManual [M] .R