当前位置:首页 > 通信技术 > 通信技术
[导读]摘要:为灵活、有效地在多任务程序设计中应用μC/OS-Ⅲ操作系统中的邮箱,采用理论分析与实例实验相结合的方法,得到基于μC/OS-Ⅲ操作系统的邮箱机制在全双工任务间通信、二值信号量和充当延迟函数等方面的应

摘要:为灵活、有效地在多任务程序设计中应用μC/OS-Ⅲ操作系统中的邮箱,采用理论分析与实例实验相结合的方法,得到基于μC/OS-Ⅲ操作系统的邮箱机制在全双工任务间通信、二值信号量和充当延迟函数等方面的应用技巧和方法。实验表明,邮箱的灵活应用不仅可以实现传统的任务间数据通信,还可以方便地替代互斥信号量和实现延时功能。
关键字:嵌入式系统;任务间通信;μC/OS-Ⅲ;邮箱

0 引言
   
嵌入式系统软件通常由多个功能模块构成,而模块的功能一般由基于嵌入式操作系统的任务来实现。在实际应用中,常需要进行任务间通信来实现特定的功能,如变量的传递、资源的共享等,这就需要针对操作系统建立可靠的任务间通信,而邮箱是最常用的任务间通信机制之一。本文基于μC/OS-Ⅲ嵌入式实时操作系统,研究了邮箱的使用和技巧,不仅探讨了邮箱在传统任务间通信和数据的传递中的应用,还通过实例研究了邮箱在二值信号量和实现延时功能中的灵活应用。

1 μC/OS-Ⅲ简介
   
嵌入式实时操作系统(RTOS)是嵌入式系统的关键组成部分。近年来,μC/OS-Ⅲ操作系统以其较小的体积、开放的源码和值得信赖的可靠性获得了工程技术人员的青睐。2011年,μC/OS-Ⅲ的升级版μC/OS-Ⅲ发布。μC/OS-Ⅲ秉承了前一版本的优点,是一个高度可移植、可固化、可扩展,具有优先抢占的实时性,专为满足当今嵌入式系统的苛刻要求的多任务内核,它的最大改进之处在于允许多个任务运行于同一优先级上,相同优先级的任务按时间片轮转调度,内核对象的数量不受限制以及接近于零的终端禁用时钟周期。μC/OS-Ⅲ内核为程序员提供了高效的实时任务调度、中断管理以及任务间通信。与前期版本不同,μC/OS-Ⅲ支持无限多个任务,无限多个优先级,无限多个信号量,同时支持互斥信号量、消息邮箱等任务间通信方式。

2 任务间通信与邮箱的应用
   
由于嵌入式系统软件通常由基于操作系统的若干个任务实现,因此,不可避免的需要任务之间或中断服务子程序与任务间的通信,这种信息传递机制称为任务间的通信。μC/OS-Ⅲ任务间的通信可以通过共享内存、信号量、任务内建消息队列、外部消息队列、事件标志组实现。共享内存方式使用全局变量或缓存,对大型而复杂的程序,多个任务同时对一个变量进行读写操作会引起冲突或缓存区的溢出,因此共享内存用于共享一些对数据安全性不高的通用数据。信号量的通信模型虽然可以很好地起到互斥的作用,但在多个任务同时与某一任务通信是就会产生对信号量的竞争,引起通信发起端的排队,降低系统的效率。任务内建消息队列一般用于接收少量消息(如中断服务程序发送过来的消息)、外部消息队列主要面向于多个任务共同等待的消息,事件标志组则用于多个任务间的同步。
    总结来说,μC/OS-Ⅲ任务间通信有2个途径:通过全局变量或发消息给另一个任务。用全局变量时,必须保证每个任务或中断服务子程序独享该变量。中断服务中保证独享的惟一办法是关中断。如果2个任务共享某变量,各任务实现独享该变量的办法可以使关中断,再开中断,或使用信号量。需要注意的是,任务只能通过全局变量与中断服务子程序通信,而任务并不知道什么时候全局变量被中断服务子程序修改了,除非中断服务子程序以信号量方式向任务发信号,或者是该任务以查询方式不断周期地查询变量的值。这样就不可避免地给程序设计带来了一定的难度,为避免这种情况,常用的解决方法是采用邮箱。
    典型的消息邮箱(Message Mail Box)也称作交换消息,即用一个指针型变量,一个任务或一个中断服务子程序通过内核,可以把一则消息(一个指针)放到邮箱中。同样,一个或多个任务通过内核,可以接收这则消息。发送消息的任务和接收消息的任务约定,某个指针指向的内容就是它们要传送的消息,如发送消息用指针*Txmsg,而接收消息用指针*Rxmsg。这种消息传送的过程与通过邮箱收发邮件颇为相似,故称消息邮箱,或简称邮箱。
    为了在μC/OS-Ⅲ中使用邮箱,必须将OS_CFG.H文件中相应的配置常数置1。具体配置项如表1所示。


    需要说明的是,由于μC/OS-Ⅲ的邮箱管理必须有函数OSMboxCreate()和OSMboxPend()的参与,所以它们不能单独被屏蔽掉。但从表1中可以看出,将OS_MBOX_EN选项置0即可屏蔽所有邮箱函数,当然也可以屏蔽OSMboxCreate()和OSMboxPend()函数。
    μC/OS-Ⅲ的邮箱支持任务与任务之间、任务与中断服务子程序之间进行消息传递,图1给出了邮箱支持的消息传递过程中所用到的函数和任务、中断服务子程序之间的关系。


    从图1可以看出,任务或中断服务子程序都可以调用函数OSMboxPost()和OSMboxPostOpt(),但只有任务可以调用OSMboxCreate(),OSMbo xDel(),OSMboxPend()及OSMboxQuery()函数。此外,μC/OS-Ⅲ中应用程序可以使用多个邮箱,其最大数目由OS_CFG.H文件中的配置常数OS_MAX_EVENTS设定。
    在表1中各选项配置完毕并了解图1中各邮箱函数的关系后,即可以使用邮箱进行消息的传递,其具体过程为:创建邮箱OSMboxCreate();邮箱内消息的内容初始化,此时邮箱内是否有消息并不重要;将消息放入邮箱OSMboxPost();等待有消息进入邮箱OSMboxPend();如果邮箱内有消息,则任务将消息从邮箱中取走;如果邮箱内没有消息,则内核不将该任务挂起,返回空指针。
    下述代码给出了2个邮箱TxMbox和RxMbox的建立方法,同时TaskOne和TaskTwo两个任务使用邮箱实现了全双工的应答式通信。
   
   
   
    从代码可以看出,使用内核提供的邮箱服务实现任务问通信方便、简单,这也是邮箱作为任务问通信最常用手段的原因。此外,在实际应用中,通过分析邮箱的功能特点,还可以将其应用到其他场合以实现一些灵活的功能。

3 邮箱的灵活应用
3
1 用邮箱作为二值信号量
   
邮箱可以当作二值信号量用,邮箱中有消息表示资源可以使用,而空邮箱表示资源已经被其他资源占用。首先,在初始化时将邮箱设置为一个非空指针(eg.void*1),这样,一个任务可以调用OSMboxPend()函数请求信号量,然后通过调用OSMboxPost()函数释放信号量。若只需要二值信号量和邮箱,采用这种方法可以节省代码空间。此时,需将OS_MBOX_EN置1,而将OS_SEM_EN清0,即只用邮箱,而不是同时使用邮箱和信号量。同样,给出了一个邮箱传递二值信号量的简单示例。
   
3.2 邮箱实现延时,而不使用OSTimeDly()
   
邮箱的超时等待功能可以用作延时,模仿OS-TimeDly()函数功能。示例代码如下:
   
   
    在程序执行过程中,若在指定的时间TIMEOUT内没有消息到来,则TaskC继续执行,这显然与OSTimeDly(TIMEOUT)功能类似;但是,如果TaskD在指定的时间结束之前,向邮箱发送一个dummy消息,则可以中止任务1中的延时,使TaskC提前继续执行,这与调用函数OSTimeDly Res ume()的功能一致。

4 结语
   
本文基于嵌入式操作系统μC/OS-Ⅲ探讨了邮箱在任务间通信中的应用方法及注意事项,分析了各邮箱函数的关系及使能/屏蔽方法,并给出示例实现2个任务的全双工通信;在此基础上,还研究了邮箱在二值信号量和延时功能中的灵活应用,并给出实例代码验证,这在嵌入式系统开发过程中有一定的参考价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

武汉2025年9月9日 /美通社/ -- 7月24日,2025慧聪跨业品牌巡展——湖北•武汉站在武汉中南花园酒店隆重举办!本次巡展由慧聪安防网、慧聪物联网、慧聪音响灯光网、慧聪LED屏网、慧聪教育网联合主办,吸引了安防、...

关键字: AI 希捷 BSP 平板

上海2025年9月9日 /美通社/ -- 9月8日,移远通信宣布,其自研蓝牙协议栈DynaBlue率先通过蓝牙技术联盟(SIG)BQB 6.1标准认证。作为移远深耕短距离通信...

关键字: 蓝牙协议栈 移远通信 COM BSP

上海2025年9月9日 /美通社/ -- 为全面落实党中央、国务院和上海市委、市政府关于加快发展人力资源服务业的决策部署,更好发挥人力资源服务业赋能百业作用,8月29日,以"AI智领 HR智链 静候你来&quo...

关键字: 智能体 AI BSP 人工智能

北京2025年9月8日 /美通社/ -- 近日,易生支付与一汽出行达成合作,为其自主研发的"旗驭车管"车辆运营管理平台提供全流程支付通道及技术支持。此次合作不仅提升了平台对百余家企业客户的运营管理效率...

关键字: 一汽 智能化 BSP SAAS

深圳2025年9月8日 /美通社/ -- 晶泰科技(2228.HK)今日宣布,由其助力智擎生技制药(PharmaEngine, Inc.)发现的新一代PRMT5抑制剂PEP0...

关键字: 泰科 AI MT BSP

上海2025年9月5日 /美通社/ -- 由上海市经济和信息化委员会、上海市发展和改革委员会、上海市商务委员会、上海市教育委员会、上海市科学技术委员会指导,东浩兰生(集团)有限公司主办,东浩兰生会展集团上海工业商务展览有...

关键字: 电子 BSP 芯片 自动驾驶

推进卓越制造,扩大产能并优化布局 苏州2025年9月5日 /美通社/ -- 耐世特汽车系统与苏州工业园区管委会正式签署备忘录,以设立耐世特亚太总部苏州智能制造项目。...

关键字: 智能制造 BSP 汽车系统 线控

慕尼黑和北京2025年9月4日 /美通社/ -- 宝马集团宣布,新世代首款量产车型BMW iX3将于9月5日全球首发,9月8日震撼亮相慕尼黑车展。中国专属版车型也将在年内与大家见面,2026年在国内投产。 宝马集团董事...

关键字: 宝马 慕尼黑 BSP 数字化

北京2025年9月4日 /美通社/ -- 在全球新一轮科技革命与产业变革的澎湃浪潮中,人工智能作为引领创新的核心驱动力,正以前所未有的深度与广度重塑各行业发展格局。体育领域深度融入科技变革浪潮,驶入数字化、智能化转型快车...

关键字: 人工智能 智能体 AI BSP

上海2025年9月2日 /美通社/ -- 近日,由 ABB、Moxa(摩莎科技)等八家企业在上海联合发起并成功举办"2025 Ethernet-APL 技术应用发展大会"。会议以"破界•融合...

关键字: ETHERNET 智能未来 BSP 工业通信
关闭