(110)xTaskCreate(radiolinkTask, “RADIOLINK“, 150, NULL, 5, NULL);*创建无线连接任务*

it2025-10-14  10

目录


前言

xTaskCreate(radiolinkTask, “RADIOLINK“, 150, NULL, 5, NULL); /*创建无线连接任务*/




一、radiolinkTask()

void radiolinkTask(void *param) { rxState = waitForStartByte1; u8 c; /*ÎÞ·ûºÅ×Ö·ûÀàÐÍ*/ u8 dataIndex = 0; u8 cksum = 0; while(1) { if (uartslkGetDataWithTimout(&c)) /*这里是每次接受一个字节的数据,这里进去函数读取uartslkDataDelivery队列句柄是否有数据,如果有数据就拷贝到&c所在地址中,如果没数据*c=0 */ { switch(rxState) { case waitForStartByte1: rxState = (c == DOWN_BYTE1) ? waitForStartByte2:waitForStartByte1; cksum = c; break; case waitForStartByte2: rxState = (c == DOWN_BYTE2) ? waitForMsgID : waitForStartByte1; cksum += c; break; case waitForMsgID: rxPacket.msgID = c; rxState = waitForDataLength; cksum += c; break; case waitForDataLength: if (c <= ATKP_MAX_DATA_SIZE) { rxPacket.dataLen = c; dataIndex = 0; rxState = (c > 0) ? waitForData : waitForChksum1; /*c=0,Êý¾Ý³¤¶ÈΪ0£¬Ð£Ñé1*//**/ cksum += c; } else { rxState = waitForStartByte1; } break; case waitForData: rxPacket.data[dataIndex] = c; dataIndex++; cksum += c; if (dataIndex == rxPacket.dataLen) { rxState = waitForChksum1; } break; case waitForChksum1: if (cksum == c) { atkpPacketDispatch(&rxPacket); } else { rxState = waitForStartByte1; IF_DEBUG_ASSERT(1); } rxState = waitForStartByte1; break; default: ASSERT(0); break; } } else { rxState = waitForStartByte1; } } }

  bool uartslkGetDataWithTimout(u8 *c)

bool uartslkGetDataWithTimout(u8 *c) { /*接受uartsls队列句柄的数据*/ if (xQueueReceive(uartslkDataDelivery, c, UARTSLK_DATA_TIMEOUT_TICKS) == pdTRUE) { return true; } *c = 0; return false; }

 

 


总结

   主要是在radiolink初始化的时候定义了一个 uarts队列句柄。 然后分时间片给这个任务时,去读取这个队列中是否有有效数据,如果有有效数据,就依次读取和校验。

    

   

  

最新回复(0)