打印

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

[复制链接]
1168|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
罗菜鸟|  楼主 | 2012-10-29 17:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机耍了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的例程都没这么做?



uart.rar (3.05 KB)

相关帖子

沙发
morrisxiaolu| | 2012-12-17 23:17 | 只看该作者
接受一般都是中断收到包,释放信号量,让任务收数据,并通过回调函数上送给其他模块(当然你通过信号量来让其他模块读取也应该没问题)
发送过程就不是这样了: 先打开中断,这样由于UART发送缓冲区为空,就会立刻产生中断。你只需要在中断处理里不断填入数据到发送缓冲区的寄存器,它会自动发送,并立刻再产生中断。直到最后,当你没数据要发送时,就关闭中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

522

帖子

8

粉丝