在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_ITConfig(UART_TYPE, USART_IT_TXE, DISABLE);
xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR(waitUntilSendDone, &xHigherPrio