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

目录


前言

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队列句柄。 然后分时间片给这个任务时,去读取这个队列中是否有有效数据,如果有有效数据,就依次读取和校验。

    

   

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值