在FreeRTOS中为USART接收创建新任务
|
我将带有AVR Studio 5的EVK1105开发板用作我的AVR项目的开发IDE。
我在其中使用FreeRTOS。我在该板上有3个USART端口。一个外部模块通过USART-RS232模式连接到我的AVR32板上。它以19230波特率,7个数据位,奇数奇偶校验,stopbit-1和正常通道模式向USART0上的板发送连续的串行数据。为此,我创建了一个新任务。在每9个数据字节之后,它将发送\'\\ n \'和\'\\ r \'。因此,在我的任务中,我继续在字符串缓冲区中收集9个数据字节,然后在USART1上传输它。我正在使用轮询方法从正在接收端口的USAR0收集数据。但是我在接收数据时面临问题。我不知道它的计时问题或什么原因,或者调度程序在收集数据时是否切换了任务。但是我没有得到所需的数据。
以下是我已检查为故障排除的内容
1.将我的外部模块连接到我的PC超级终端,这给了我完美的结果。
2.实现了与使用USART0的接收相同的功能,并且所接收的任何内容都将与不带FreeRTOS的内容一起传输到USART1。它的作品很好。
请提出一些想法,可能有什么问题。我正在使用队列在Tx和Rx任务之间进行通信,以将字符串缓冲区从USART0传递到USART1。处理队列有问题吗?如何对队列进行故障排除?
我在Rx Task中的无限任务循环中使用了50ms的延迟。会造成问题吗?如果我不使用任何延迟,则操作系统崩溃。请提出一些好的实践,以便在FreeRTOS中创建新任务,这样我就不会遇到任何计时问题。
没有找到相关结果
已邀请:
2 个回复
漂汀拦
嗜蒂谷尘旱
要将USART连接到CPU 我相信
为此,需要仔细阅读很多代码-有很多依赖项。 2)您要调用什么函数来从USART0检索数据? 19kbaud约为2000字节/秒或1字节/0.5毫秒,因此50毫秒的轮询还远远不够。我建议您的RX任务连续轮询(从不显着睡眠),但优先级比TX任务低。 3)专注于在调用中调试RX任务以检索数据。使用调试器查看usart的硬件寄存器。尤其是 应将USART0 cr寄存器AVR32_USART_CR_RXEN_MASK设置为启用RX USART0 CSR寄存器AVR32_USART_CSR_RXRDY_MASK将指示那里是否有新数据 您还可以检查超低标志,以查看是否丢失了一些数据。 读取USART0 rhr时,它应该是您发送的字节。 如果您仍在进行此工作,我可以做更多研究。