新闻中心

EEPW首页>手机与无线通信>设计应用> LPC2365的μC/OS-II 下多串口通信编程

LPC2365的μC/OS-II 下多串口通信编程

作者: 时间:2013-07-22 来源:网络 收藏

3 软件设计
3.1 μC/OS-II的移植
μC/OS-II是一个完整的、可移植、可固化、可裁剪、源代码公开的占先式实时多任务内核,它可移植到多种不同架构的微处理器上,包括8位、16位、32位单片机或DSP,以及64位的微处理器。
要在自己的硬件环境中运行该操作系统,首先必须将其移植到相应CPU体系结构中,好在国内已有大量的书籍和文章介绍移植方法,严格按照其步骤进行源代码编写和修改就可以得到一份自己移植的操作系统。更简捷、可靠的办法是从网站下载针对某一具体架构处理器的移植好的例程,大大方便了用户的使用。关于移植μC/OS-II到ARM7的方法可参考文献。
3.2 应用程序编写
要使用μC/OS-II嵌入式,编写应用程序必须遵守其编程规范。在本应用程序中,主要编写了串口中断服务程序和串口数据的收发任务,在任务间进行数据交换时,使用了互斥型信号量和二值信号量。
对于串口中断服务程序的编写,需要注意的问题主要在于通信帧数据是否为固定长度。在本应用程序中,串口1接收和发送的数据帧长度固定且较短,其中断服务程序和任务编程相对较简单;串口0和2接收到的数据帧是不定长的且长度较长,需要考虑数据帧长度是否为触发深度的整数倍。设置串口接收中断触发深度为14,当通信帧的长度不是14的整数倍时,对方将通信帧全部发送完毕后,最后一批数据必定不足14字节,从而导致超时中断,就可以在超时中断中发送信号量来通知接收任务,成功地结束接收过程。
当通信帧的长度正好为14的整数倍时,对方将通信帧全部发送完毕后,最后一批数据必定是14字节,只能触发正常的接收中断,不会触发超时中断。在通信帧数据不定长的情况下,不能通过正常的接收中断来判断接收过程是否结束。为此,在通信任务中应为等待信号量函数设置超时参数,当接收到的数据稳定不变时就可以结束接收过程。串口0中断服务程序和接收数据任务程序片段代码如下:
c.JPG
d.JPG
依据所要完成的任务并结合硬件系统框图,将串口0和串口1接收到的数据存放在一个全局数组中,分别创建串口0和串口1接收任务,两个接收任务将接收到的数据直接写入全局数组的相应元素中。由于要求将串口0和串口1接收到的数据组帧以每秒一帧的速率发送出去,而串口0正好是每秒接收到一帧数据,或者说与串口0相连接的普通性能GPS接收机每秒发送一帧数据,所以发送帧数据的组装和写入队列任务的启动可以由串口0接收任务中的信号量来控制,这样可以避免因计时误差而导致下传的GPS帧数据跳变或重复。
由于需要将串口2接收到的高性能GPS接收机数据和串口0及串口1接收到的数据组帧后写入发送,所以涉及到发送资源的使用问题,也就是共享资源的使用问题。具有处理优先级反转的功能,特别适合对共享资源的互斥访问,其优先级继承值必须高于所有需要访问这个共享资源的任务的优先级。这里,串口2接收任务的优先级为9,数据组帧任务的优先级为13,所以设置的优先级继承值为8。当这两个任务向中写入数据时,首先需要获取互斥型信号量,待写完数据后应及时释放信号量,以供其他任务使用该资源。
在主函数main()中,创建了串口3接收数据任务,该任务的功能是创建其他任务,并在无限循环中等待串口3接收数据,当串口3接收到数据后对其进行判断,并依据其内容执行相应的指令。其任务优先级设为最高基于以下两点:该任务是关键任务,当接收到指令时必须执行,不得遗漏;该任务执行的不是很频繁,可以保障低任务优先级的任务得到执行。其程序代码如下:
e.JPG
f.JPG

数字通信相关文章:数字通信原理


通信相关文章:通信原理




评论


相关推荐

技术专区

关闭