亲爱的TI工程师们:
我们的应用中用到了UART,且要求UART RX随时接收,应此创建了UART任务,在任务循环中,我们通过 UART_Read函数的阻塞模式来接收 UART数据。如下:
while (1)
{
UART_read(m_uart_handle, &rx_data, 1);
if (m_rx_callback)
{
m_rx_callback(&rx_data, 1);
}
}
只是你们TI的 UART_Read 的阻塞模式有问题,不能阻塞任务。在 UART_Read前加一条等待event的语句(如下),然后再测试功耗就下来了。
while (1)
{
/* Wait for event */
(void)Event_pend(m_uart_event_handle, 0, 0xFFFFFFFF, BIOS_WAIT_FOREVER);
UART_read(m_uart_handle, &rx_data, 1);
if (m_rx_callback)
{
m_rx_callback(&rx_data, 1);
}
}
但是…,这样问题又来了。必须要在UART 接收的中断中发送这个事件才有意义。那么我如何修改cc1310 sdk的驱动源码或者TIRTOS的源码?cc1310sdk中有相应的工程吗?
Felix ZF:
UART_read是会阻塞任务的,只有当接收满了指定长度的数据后,才会继续执行UART_read之后的语句。
在UART_read阻塞状态下,因为UART仍然处于等待数据的工作状态,所以功耗比standby时高。