微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 嵌入式实时操作系统μC/OS-II串口通信的设计与实现

嵌入式实时操作系统μC/OS-II串口通信的设计与实现

时间:03-17 来源:互联网 点击:

3 软件开发设计
选择RealView MDK软件作为开发工具,它是针对各种嵌入式处理器开发的软件开发工具。与ARM之前的工具包ADS等相比,RealView编译器可将代码密度提高10%,性能改善20%,并且支持ARM7、ARM9和最新的Cortex-M3核处理器。编程语言可以使用C或者C++语言,支持在线调试。
嵌入式实时操作系统μC/OS-Ⅱ可以管理256个任务,除了系统任务外,用户应用程序最多可以有248个任务,而中断嵌套的层数最多也可以到255层。任务创建过程包含了任务堆栈大小的设置、优先级分配以及在通信或保持同步过程中使用的信号量和邮箱。在STM32V评估板上通过RS232接口实现了评估板与PC机的通信,软件设计流程如图3所示,在完成相应的初始化之后,创建程序设计中用到的信号量和消息邮箱,紧接着需要创建应用任务,最后启动系统。


由该流程图可以看出:本程序设计中创建了4个任务,即LED显示任务,液晶显示任务,串口数据发送任务和数据发送控制任务。每一个任务都要有相应的优先级和任务堆栈空间,程序设计中每个任务的堆栈空间为512个字节,优先级依次为11,13,4,6。
ST公司用标准的ANSI C封装了ARM微处理器中各个功能寄存器,为用户应用程序的开发提供了丰富的固件库(Firmware)。固件库方便用户对底层微处理器外设进行初始化配置,如串口初始化函数为void USARTConfigurtion(void),具体代码如下:

初始化操作包括了时钟初始化、中断初始化,I/O接口初始化,串口初始化等。主程序在完成初始化操作后创建信号量、消息邮箱和任务创建。由于信号量、邮箱都是事件类型,所以需用OS_EV-ENT来定义,信号量、邮箱的建立由函数App_EventCreate()完成。

使用信号量和消息邮箱可以保持任务之间的通信的同步,串口数据发送任务App_TaskSendata(void-*p_arg)发送信号量App_UserIFSem通知数据发送控制任务App_TaskSendata Ctrl(void*p_arg),数据发送控制任务在接收到信号量App_User IFSem后,发送消息(www.Real Vie-w.com\n)给指定邮箱App_UserIFMbox,串口调用数据发送函数USART_Send Data(),串口数据发送任务数据发送完成后发送通知信号量App_ UserIFSeml给数据发送控制任务,数据发送控制任务在接收到发送完成信号量App_UserIFSeml后,向指定邮箱发送另一则消息(www.xust. edu.cn\n),数据发送任务在接收到消息邮箱后通过串口发送接收到的消息内容给PC机。具体代码如下:


图4为串口通信波特率设定为9 600 bps和115 200 bps时,在串口小助手中观察到的程序运行后的测试结果,结果表明程序按照预先设定好的发送要求不断向PC机发送数据,并且通信稳定,在测试过程中未出现乱码和通信异常中断情况,程序设计达到了预期目标。通常在工业现场实际应用中需要保证数据传输的可靠性,一般都需要在数据的发送和接收端对数据进行相应的数据校验,常见的数据校验算法是CRC校验,可以采用8或16位的CRC校验方式。在该通信过程中并未使用校验算法来检测数据传输的一致性,若在数据传输过程中添加相应的CRC校验算法,就可以最大程度地减少数据传输的误码率,保证数据传输的准确性。在后期的研究学习中也可以尝试将其应用于工业现场以测试其工作的可靠性。

4 结论
本文以STM32V评估板为硬件开发平台,结合μC/OS-II嵌入式操作系统中信号量和消息邮箱,设计了基于信号量、消息邮箱的串口通信应用程序,并通过实验验证了该串口应用程序在保证任务间通信同步情况下,数据传输具有较好的稳定性和可靠性,达到了程序设计预期目标。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top