新闻中心

EEPW首页 > 测试测量 > 设计应用 > 基于ARM9和μC/OSII的多频道数据采集系统设计

基于ARM9和μC/OSII的多频道数据采集系统设计

作者:时间:2011-07-26来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/194823.htm

  3.3 针对外设的时间优化

  针对命令扫描和解析任务,将其设置为中断方式,在检测到有用户命令输入时发生中断,在中断里对用户命令进行解析、分析、提取和处理。在中断下半部分对命令进行广播式发布,发布到各个采样任务函数使其立即刷新执行。因为用户工作方式改变,命令刷新频率并不高而且任务量不大,所以完全可以利用中断的快速处理来实现这种功能。

图4 显示任务工作原理图

  在处理完命令扫描和采样任务之后,影响整个系统性能的就剩下上位机和下位机显示部分了。显示任务工作原理如图4所示,利用μC/系统提供的消息队列对显示部分进行改善。分别建立两个长度为16的消息队列和内存块链表,数据提交任务从空闲内存池中得到可用内存块之后将本任务要显示的数据存入该内存块,此时该内存就变成了带有数据的待显示数据块。而后将该内存块的地址以消息的形式注册在显示消息队列上。消息队列的长度设置为16,虽然这里只有12个任务会发送消息给消息队列,但在实时多任务程序中,各个任务的运行是随机的,消息队列在一段时间内得到的消息个数是个不定值,所以留出4个空位作为裕度。而且设置初始值为16的计数信号量来保护消息队列,数据提交任务在提交数据之前先检测该信号量,如该信号量有效就可以发送信号,如信号量无效则需等待,直到有可用信号位时方可将信号发出。在外部硬件操作端,由外部发送任务将消息队列中的消息按照固定速率发送到外部信号线上。

  这样设计,消息队列就相当于一个缓冲区,使得所有提交任务都可以向这个缓冲区发送待显示数据,有效地避免了多个任务争用一个外围设备而引起的死锁、竞争冒险等问题。同时减少了任务数量,减少了任务切换的次数,充分利用了系统时间,提高了系统性能。

  3.4 关键区保护

  多任务设计中每个任务在任何时刻都可能被其他任务打断,必须充分考虑代码的安全性、可重入性、可靠性、饥饿、互锁、死锁等情况。[3]

  为了避免上述情况,任务间消息发送和传递时以及在数据采样时对相应函数体进行关键区保护,在这些函数运行的时候禁止中断和任务调度,以保证数据传递和数据采样的绝对正确性和系统运行的绝对安全性。

  4 极限频率测定及总结

  上位机超级终端接收到的极限频率测试结果如图5所示。

图5 极限频率测量结果

  分别测试了高频段、中频段和低频段的极限频率,结果在CPU使用率80%~90%的情况下测定。该系统成功实现了智能化设计和优先级动态调度、系统参数动态设置等功能,达到了设计指标。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭