工具/软件:
使用uart _回调 freertos的demo、发现默认
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
使用uart _回调 freertos的demo、发现默认
好的、谢谢!
我正在使用 UART 回调+ FreeRTOS 演示 F2838x 器件驱动程序。 默认情况下、该示例使用:
uartParams.readReturnMode = UART_ReadReturnMode_PARTIAL;
#define CONFIG_UART_BUFFER_LENGTH 1
在这种情况下、callbackFxn为每个接收到的字节正确触发回调 ()。
不过、当我将缓冲区长度更改为 10 时:
#define CONFIG_UART_BUFFER_LENGTH 10
我注意到回调是 不会按预期多次触发 。 低电平逻辑似乎取决于 a 超时中断 、仅当 FIFO 不为空且超时到期时才会生成。 这会导致从未触发超时中断、因此不会调用回调。
问题:
我应该如何UART_ReadReturnMode_PARTIAL在驱动程序库中正确配置或实现、以便在使用大于 1 的缓冲区长度时可靠地调用回调?
您好、
该示例用于 RXRXF1>= 1 个中断触发条目。
当接收到一个字节时触发中断。 如果 FIFO 触发级别设置为 1、则不需要超时功能。
我不熟悉 RTOS 本身、但似乎没有在收到更多数据时触发 UART 任务。
我检查了 Rxbuffer 通常可以使用中断任务更新较大的数据长度、但第一个 UART 棉任务仅在接收到的第一个数据时触发、这使得它在 while 循环中挂起。
B.R.
Sal
修改 while 循环后、看起来可以处理多字节的数据包。
char input[10];
....
while (1) {
bytesRead = 0;
while (bytesRead <= 9) {
status = UART_read(uart, &input, 10, &bytesRead);
if (status != UART_STATUS_SUCCESS) {
/* UART_read() failed */
while (1) {
}
}
}
bytesWritten = 0;
while (bytesWritten == 0) {
status = UART_write(uart, &input, 10, &bytesWritten);
if (status != UART_STATUS_SUCCESS) {
/* UART_write() failed */
while (1) {
}
}
}
}
B.R.
Sal