vivado ucos Hello World工程中uart stdou输出

2015-08-06 20:36 阅读 859 次 评论 0 条

ucos的hello wordl工程中,能够通过串口输出“Hello world from the main task”,证明程序中一定使用了串口。查看源代码在StartupTask()函数中,调用了UCOS_StdInOutInit();在其中调用UARTPS_Init(UCOS_STDOUT_DEVICE_ID)函数,进行uartps的初始化,并且定义了信号量(Semaphore)与互斥信号量(Mutex);

在进入发送或接收状态时,获取Mutex,在接收过程中通过信号量Semaphore等待中断中产品的信号量,进行写入或读取操作。而在等待信号量时,任务已经将cpu空出,可供其它任务使用,但由于uart的发送或接收采用互斥信号量,所以此时其它任务将不能使用此uart进行发送或接收操作。如果强制使用,将会出现发送数据不连续,在正常的数据帧中包含了其它任务的数据。或者接收数据不完整,正常数据帧的数据被其它任务接收,而从FIFO中删除,正常任务不能正确执行。

Uart发送数据方法需要在每写满FIFO处理后,产生一个硬件外部中断,中断cpu进行现场保护,跳转执行发送任务,然后恢复中断前任务执行。发送数据长度由发送FIFO的长度决定。相比TI c6000系列DSP的EDMA通过timer发送串口方式效率低了很多,发送长度受内部RAM限制,且在发送过程完全不需要cpu参数,均有硬件完成。

uart接收数据方法每次只能接收一个字节,并且产生一个中断,花诶时间进行现场保护,效率较低。好在外部输入数据较少,基本不会占用太多cpu时间。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:vivado ucos Hello World工程中uart stdou输出 | 起点博客
分类:应用笔记 标签:, , ,

发表评论


表情