正点原子MiniFly V1.2学习笔记三---atkpRxAnlTask

本文详细解析了嵌入式系统中串口指令的接收、分析及处理流程。通过创建高优先级任务,确保指令的及时响应。文章深入介绍了如何从队列中获取指令并根据指令类型执行不同操作,如数据请求、PID参数调整等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  第5个任务,解析处理接收到的指令
xTaskCreate(atkpRxAnlTask, "ATKP_RX_ANL", 300, NULL, 6, NULL);
上面第1个任务,把串口接收到的数据解包后得到指令,然后把指令发送到队列rxQueue里了,该任务就是从队列里取指令,然后分析处理。

一、执行串口指令任务

void atkpRxAnlTask(void *param)
{
	atkp_t p;
	while(1)
	{
		xQueueReceive(rxQueue, &p, portMAX_DELAY);
		atkpReceiveAnl(&p);
	}
}

  这个任务相当简洁,它的优先级定义为6,比上面解包串口数据的任务优先级(5)高。也就是优先级5的任务1解包之后,解出来的指令存入到rxQueue队列,任务1就被挂起了。先执行这个更高优先级的任务,如果指令是请求数据的。该任务就把数据入队txQueue,执行完后返回到任务1,任务1继续执行,从txQueue取数据发送到串口DMA。
  任务从队列读取一条指令,复制到变量p里,然后调用函数分析指令

二、处理指令

  处理指令的函数结构如下,这个有点复杂,原理就是根据指令的msgID作出不同的响应

static void atkpReceiveAnl(atkp_t *anlPacket)
    {
    	if(anlPacket->msgID	== DOWN_COMMAND)
    	{
    		switch(anlPacket->data[0])
    		{
    			//..根据第1个数据,改变标志flyable,该标志在atkpSendPeriod函数被调用
    		}
    	}			
    	else if(anlPacket->msgID == DOWN_ACK)
    	{
    		if(anlPacket->data[0] == D_ACK_READ_PID)
    		{
    			//....如果请求PID参数,则把PID参数封装成包放入无线txQueue队列,如果USB连接了,同样把参数发送到USB的txQueue队列
    		}
    		if(anlPacket->data[0] == D_ACK_RESET_PARAM)//恢复默认参数
    		{
    			//.....恢复参数后,重新设置PID,然后把参数入队,发送给遥控器
    		}
    	}
    	else if(anlPacket->msgID == DOWN_RCDATA)
    	{//如果指令发来的是RC数据,把它存到变量rcdata 中
    		rcdata = *((joystickFlyui16_t*)anlPacket->data);
    	}
    	else if(anlPacket->msgID == DOWN_POWER)/*nrf51822*/
    	{
    		pmSyslinkUpdate(anlPacket);
    	}
    	else if(anlPacket->msgID == DOWN_REMOTER)
    	{
    		remoterCtrlProcess(anlPacket);
    	}
    	else if(anlPacket->msgID == DOWN_PID1)
    	{
    		//....如果接收到的是PID数据,把它存到变量pidRateRoll中,并返回ID和校验和
    	}
    	else if(anlPacket->msgID == DOWN_PID2)
    	{
    		//.....
    	}		
    	else if(anlPacket->msgID == DOWN_PID3)
    	{
    		//.....
    	}
    	else if(anlPacket->msgID == DOWN_PID4)
    	{
    		//.....
    	}
    	else if(anlPacket->msgID == DOWN_PID5)
    	{
    		//.....
    	}
    	else if(anlPacket->msgID == DOWN_PID6)
    	{
    		//....设置PWM
    	}
    }

  这里只是把接收到的指令,存到了相应的变量中。等待其它任务去调用这些变量。

如果 您之前已经安装过了该驱动,请直接 您之前已经安装过了该驱动,请直接 您之前已经安装过了该驱动,请直接 您之前已经安装过了该驱动,请直接 您之前已经安装过了该驱动,请直接 您之前已经安装过了该驱动,请直接 您之前已经安装过了该驱动,请直接 您之前已经安装过了该驱动,请直接 跳到 第二部。 第二部。 STM32 USB STM32 USB STM32 USB STM32 USBSTM32 USB虚拟 串口驱动 串口驱动 串口驱动 路径 :“ATKATK -MiniFly MiniFly MiniFlyMiniFlyMiniFly微型四轴资料 微型四轴资料 \3,配套软件 ,配套软件 ,配套软件 ,配套软件 \3,STM32 STM32 STM32 USBUSBUSB虚拟串口驱动 虚拟串口驱动 虚拟串口驱动 虚拟串口驱动 ”。安装 过程这里就不详细说明,安装完成后将 过程这里就不详细说明,安装完成后将 过程这里就不详细说明,安装完成后将 过程这里就不详细说明,安装完成后将 过程这里就不详细说明,安装完成后将 过程这里就不详细说明,安装完成后将 过程这里就不详细说明,安装完成后将 过程这里就不详细说明,安装完成后将 过程这里就不详细说明,安装完成后将 USBUSBUSB线连接好四轴 连接好四轴 连接好四轴 或遥 控器 插入电脑。 入电脑。 入电脑。 电脑 提示发现新硬件 提示发现新硬件 提示发现新硬件 提示发现新硬件 并安装驱动,如果 安装驱动,如果 安装驱动,如果 安装驱动,如果 安装驱动,如果 安装 成功了 成功了 可以在设备 可以在设备 可以在设备 管理器 管理器 看到端 看到端 口号 ,如下图 ,如下图 ,如下图 2.1.1所示。 所示。 如果安装 如果安装 失败了, 失败了, 失败了, 请参考 路径下 的安装失败解决 的安装失败解决 的安装失败解决 的安装失败解决 办
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值