在crazyflie2.0中,数据是靠UART与nrf51822通信进行收发的,最近看了下从底层UART接收到数据怎样传输到各个任务的过程,下面先分析下接收数据的过程。
程序流程:
uart_syslink.c ->syslink.c ->Radiolink.c ->Comm.c ->Crtp.c(1)首先是最底层接收数据的uart_syslink.c程序,将接收到的数据放入队列uartDataDelivery中;
void uartIsr(void)
{
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
uint8_t rxDataInterrupt;
if (USART_GetITStatus(UART_TYPE, USART_IT_TXE))
{
if (outDataIsr && (dataIndexIsr < dataSizeIsr))
{
USART_SendData(UART_TYPE, outDataIsr[dataIndexIsr] & 0x00FF);
dataIndexIsr++;
}
else
{
USART_ITConfi
本文分析了crazyflie2.0如何通过UART与nrf51822通信接收数据的流程,从底层UART接收开始,经过Comm.c和Crtp.c的处理,详细介绍了数据如何被分发到各个任务,特别是关键的Crtp.c文件中的link结构体和queues的使用。
订阅专栏 解锁全文
5510

被折叠的 条评论
为什么被折叠?



