首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 电子技术 > 通信与网络
嵌入式实时操作系统μC/OS-II串口通信的设计与实现
来源:本站整理  作者:佚名  2011-03-18 16:27:42



摘要:为解决实时操作系统μC/OS-II串口通信设计中信号量、消息邮箱使用方法的问题,提出了一种以STM32V评估板为硬件平台和μC/OS-Ⅱ的串口通信程序设计方案。该方案采用Cortex-M3架构的ARM处理器STM32F103VB作为主控制芯片,ST3232作为串口通信电平转换器。软件设计部分描述了信号量、消息邮箱的应用场合和基本操作方法,通过信号量和消息邮箱的配合使用保证任务间的数据传输的同步性。给出了整个程序中的设计思路,程序开发使用STM32F103VB处理器自带的固件库,减少了繁琐的寄存器配置,降低了程序开发强度。实验验证了在2种不用通信速率下数据传输具有误码率低、传输稳定可靠的特点,并且若能够配合相应的数据校验算法就可将其应用于工业现场的数据通信。
关键词:实时操作系统;μC/OS-II;信号量;消息邮箱;串口通信;STM32F103VB;ST3232

    ARM是目前嵌入式领域中应用最广泛的RISC微处理器结构,以低成本、低功耗、高性能的特点占据了嵌入式系统应用领域的领先地位,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场。STM32F103VB是基于ARM新内核Cortex-M3的通用微处理器,STM32V评估板是基于该芯片的学习板并集成了仿真调试器(Ulink_Me),可以方便用户快速学习和开发用户程序。目前常见的嵌入式系统有:WinCE、Linux、pSoS、VxWorks和μC/OS-II等。μC/OS-Ⅱ是专门为嵌入式系统应用设计的,具有源码公开、实时性好、可移植裁剪、高效稳定和教学科研免费使用等特点,已经成功移植到8、16、32和64位等多种微处理器上,广泛应用于照相摄影、医疗器械、音响设备、工业机器人控制、发动机控制、航空器、高速公路电话系统、自动提款机等众多领域。这里以STM32V评估板为硬件开发平台,结合μC/OS-II嵌入式操作系统,设计了基于信号量、消息邮箱的串口通信应用程序。

1 信号量、消息邮箱
    μC/OS-II由事件(Event)驱动,一般事件包括信号量(Semaphores)、互斥信号量(Mutex semaphores)、消息邮箱(Message Mail boxes)、消息队列(Message Query)、事件标志组(Event Flag Group)等。其中信号量和消息邮箱作为一种常见的通信机制,在数据通信过程中应用最为广泛。
1.1 信号量(Semaphores)
    μC/OS-II的信号量由2部分组成:一个是信号的计数值(0~65 535);另一个是由等待该信号量的任务组成的等待任务列表。信号量可用于以下场合:允许一个任务与其他任务或中断同步;取得共享资源的使用权(满足互斥条件);标志事件的发生。
    对信号量一般可以实施以下3种操作:初始化(INITIALIZE)信号量或者称为创建信号量(CREATE);等待信号量(WAIT)或者称为挂起信号量(PEND);发送信号量(POST)。
    信号量在初始化过程中需要给信号量赋初值,等待信号量的任务表(WAWING LIST)应清为空。信号量的使用需要调用相应的函数并配置其相关的宏定义,具体如表1所示。

1.JPG


1.2 消息邮箱(Message Mail boxes)
    消息邮箱能使任务或中断服务向另外一个任务发送一个指针型的变量,这个指针指向一个包含指定“消息”的数据结构。消息邮箱发送的不是消息本身,而是消息的地址指针。
    消息邮箱可用于通知一个事件发生或作为二值信号量使用。消息邮箱的工作原理是邮箱在初始化时建立一个等待消息的任务列表,当邮箱为空时,等待消息的任务就挂起,并且被加入到等待消息的任务列表中。当邮箱收到消息时,等待任务列表中优先级最高的任务或者最先等待消息的任务得到消息,且转入就绪并从任务列表中清除。
    对消息邮箱的操作一般有3种:邮箱初始化(INITIALIZE),或者称为建立邮箱(CREATE);发送消息给邮箱(POST);等待消息进入邮箱(PE-ND);无等待请求邮箱消息(ACCEFT)。
    消息邮箱的使用需要调用相应的函数并配置其相关的宏定义,具体如表2所示。

2.JPG

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:167,984.40000 毫秒