匿名飞控拓空P2开发思路
main.c
#include "include.h"
#include "Ano_FcData.h"
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while (1)
{
//当系统出错后,会进入这个死循环
}
}
#endif
//=======================================================================================
//=======================================================================================
int main(void)
{
flag.start_ok = All_Init(); //进行所有设备的初始化,并将初始化结果保存
Scheduler_Setup(); //调度器初始化,系统为裸奔,这里人工做了一个时分调度器
while(1)
{
Scheduler_Run(); //运行任务调度器,所有系统功能,除了中断服务函数,都在任务调度器内完成
}
}
此处对于二次开发来说,最重要的两个函数:
All_Init(); 所有外设传感器、串口初始化函数,可以通过此函数自定义更改对应需要使用的串口
Scheduler_Run(); 任务调度函数,一共分为N个不同频率的线程,也就是每个函数执行的时间不同,例如Loop_50Hz 意思为20ms调用一次这个函数,所以此处引申出最关键的可以通过这个性质实现延时计数,设立一个标志位进行累加,因为每20Ms会调用一次这个函数,所以可以以此达到你需要的延时目的
,二次开发就是在此,你可以设立类似于这样一个自己的函数
static void Loop_50Hz_wpr(void)//20ms执行一次
{
}
但是要注意在后面的系统任务配置添加上你自己定义的那一项函数
static sched_task_t sched_tasks[] =
{
{Loop_1000Hz,1000, 0, 0},
{Loop_500Hz , 500, 0, 0},
{Loop_200Hz , 200, 0, 0},
{Loop_100Hz , 100, 0, 0},
{Loop_50Hz , 50, 0, 0},
{Loop_50Hz_wpr , 50, 0, 0},
{Loop_20Hz , 20, 0, 0},
{Loop_2Hz , 2, 0, 0},
};
然后接下来找到Ano_FlightCtrl.c这个文件
初期这个文件只需要了解两个重要函数one_key_land() 一键降落 one_key_take_off() 一键起飞
只要在前面提到的频率调用函数中调用这两个函数就能完成你想要的一键降落、一键起飞功能
再者,Ano_ProgramCtrl_User.c也是极为重要的使用,里面的基础3个程控速度函数,可以实现前后左右以及YAW转动(也就是鸡头转动),比较方便的是,你也可以在此封装一些你自己需要的功能,比如你需要一个按键一键起飞可以设立遥控器辅助通道,然后封装成函数在里面进行调用one_key_land()。你可以在Ano_ProgramCtrl_User.h里面定义一些用户数据标志位结构体,例如某个任务完成标志位置位,方便判断下一个任务是否能够开始执行