**说明:本文原创作者『Allen5G』首发于微信公众号『Allen5G』,关注获取更多干货!标签:编程,软件,算法,思维**
先看看整个工程的任务关系手机APP是需要自己开发APP的,暂时没空搞,坐等官方。。
然后主要就是上位机和遥控器的使用了上位机通过USB连接四轴,需要烧录固件BootLoader遥控器使用NFR无线通信,这个也是可玩性最高的地方,当然也是最核心的部分---姿态解算和姿态控制,之后主要要研究的就是这块代码
整个系统是基于Freertos系统,所以函数也是在系统中进行任务切换
看下main函数部分:首先说下代码风格很喜欢,可能是强迫症,注释必须对其
#include "system.h" /*头文件集合*/TaskHandle_t startTaskHandle; //创建句柄static void startTask(void *arg);//声明创建函数int main() //主函数{ systemInit(); /*底层硬件初始化*/ xTaskCreate(startTask, "START_TASK", 300, NULL, 2, &startTaskHandle); /*创建起始任务*/ vTaskStartScheduler(); /*开启任务调度*/ while(1){};}/*创建任务*/void startTask(void *arg){ taskENTER_CRITICAL(); /*进入临界区*/ xTaskCreate(radiolinkTask, "RADIOLINK", 150, NULL, 5, NULL); /*创建无线连接任务*/ xTaskCreate(usblinkRxTask, "USBLINK_RX", 150, NULL, 4, NULL); /*创建usb接收任务*/ xTaskCreate(usblinkTxTask, "USBLINK_TX", 150, NULL, 3, NULL); /*创建usb发送任务*/ xTaskCreate(atkpTxTask, "ATKP_TX", 150, NULL, 3, NULL); /*创建atkp发送任务任务*/ xTaskCreate(atkpRxAnlTask, "ATKP_RX_ANL", 300, NULL, 6, NULL); /*创建atkp解析任务*/ xTaskCreate(configParamTask, "CONFIG_TASK", 150, NULL, 1, NULL); /*创建参数配置任务*/ xTaskCreate(pmTask, "PWRMGNT", 150, NULL, 2, NULL); /*创建电源管理任务*/ xTaskCreate(sensorsTask, "SENSORS", 450, NULL, 4, NULL); /*创建传感器处理任务*/ xTaskCreate(stabilizerTask, "STABILIZER", 450, NULL, 5, NULL); /*创建姿态任务*/ xTaskCreate(wifiLinkTask, "WIFILINK", 150, NULL, 4, NULL); /*创建通信连接任务*/ xTaskCreate(expModuleMgtTask, "EXP_MODULE", 150, NULL, 1, NULL); /*创建扩展模块管理任务*/ printf("Free heap: %d bytes\n", xPortGetFreeHeapSize()); /*打印剩余堆栈大小*/ vTaskDelete(startTaskHandle); /*删除开始任务*/ taskEXIT_CRITICAL(); /*退出临界区*/}void vApplicationIdleHook( void ){ static u32 tickWatchdogReset = 0; portTickType tickCount = getSysTickCnt(); if (tickCount - tickWatchdogReset > WATCHDOG_RESET_MS) //添加独立看门狗 { tickWatchdogReset = tickCount; watchdogReset(); } __WFI(); /*进入低功耗模式*/}main函数正常步骤:先是硬件初始化:基本都是32的基础操作,后边看哪部分时涉及到了再说吧!
...