ucosiii中的串口数据发送任务设计

2016-05-30 21:46 阅读 498 次 评论 0 条

串口发送数据由于串口发送的速率低,而串口的发送缓冲(FIFO)一般只有64字节,在数据稍长的情况下,一次无法发送完毕,导致在需要在任务中等待64字节发送完毕后,再传送下一个64字节。

以前写过一个ucos下的串口发送任务,利用队列缓存待发送的数据,然后等待串口空闲后发送。这个任务设计对于数据源(数据帧)由于一个任务产生的程序,没有问题,因为一个任务产生数据,即便任务被抢占,恢复后,仍然从上次被中断的位置继续存入数据,数据帧不会被其他任务产生的数据帧打乱。很明显在多任务产生数据帧的情况,需要对缓存队列进行互斥信号量控制,保证一个任务的数据缓存完毕,交出缓存队列下一个任务才能缓存队列,这样每一个数据帧是完整的,串口发送任务,让然按队列的数据发送数据,直到发送为空。

上面的作法有个缺陷,就是在高优先级的任务抢占cpu执行,当需要写数据时,会被停下来,可能会影响此时需要紧急执行任务。为了不影响高优先级任务的执行,可以为这个优先级的任务再开一个缓存队列(或者通过ucosiii中的内存管理OS_MEM分配空间),当执行时,可以直接缓存数据,而不用等待,这时在串口发送任务中需要查询各个发送队列,顺序将每个队列中的数据放空即可。有点空间换时间的感觉。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:ucosiii中的串口数据发送任务设计 | 起点博客
分类:应用笔记 标签:,

发表评论


表情