罗菜鸟 发表于 2012-10-29 17:23

【马勒戈壁】关于RTOS的驱动,要不要阻塞。

单片机耍了3年,RTOS耍了一年,用过RL-ARM和UCOS。
自己写过RL-ARM下的UART驱动,我都是做成阻塞加环形缓冲的模式。

以STM32为例
我定义一个结构体
OS_SEM rxSem;         //8
U8*    rxBuf;             //4
U16    rxSize;            //2
U16    rxPush;   //2
U16    rxPop;    //2
U16    rxCnt;    //2

OS_SEM txSem;             //8
U8*    txBuf;             //4
U16    txSize;            //2
U16    txPush;   //2
U16    txPop;    //2
U16    txCnt;    //2

接收中断触发时,把收到字节放入Buffer中,还有触发一个信号量,任务里面通过这个信号量来读取buffer的字节。

发送时还是用环形buffer的模式,也用信号量来控制,如果发送buffr没有写满,就有信号量,然后中断里面读buffer并发送,发完产生一个信号量。

这种方法好不好??我怎么看的很多RTOS的例程都没这么做?



shell.albert 发表于 2012-10-30 09:14

首先说明一点:UART只适合于低速率通信!
1、接收时,最好缓冲一下,因为如果你的主程序接收数据到处理花费很长的时间的话,缓冲一下不至于丢失新来的数据。
2、发送时,一般不缓冲,直接发送出去。这样讲求实时性。如果你硬要缓冲的话,一是缓冲区满了自动启动发送,二是定时刷新缓冲区。

zf_015820 发表于 2012-11-12 09:27

没有人回复呀
页: [1]
查看完整版本: 【马勒戈壁】关于RTOS的驱动,要不要阻塞。