main.c文件主要包括了初始化各外设的main函数,以及freertos的任务创建函数。
1. main函数
int main()
{
systemInit(); /*底层硬件初始化*/
xTaskCreate(startTask, "START_TASK", 300, NULL, 2, &startTaskHandle); /*创建起始任务*/
vTaskStartScheduler(); /*开启任务调度*/
while(1) {};
}
systemInit();函数即为硬件初始化函数,较为复杂,此处不深入讨论了。
**
2. 任务创建函数
**
创建了10个任务
与开发手册的流程图对比一下,参数配置,电源管理,拓展模块就没有给出了。
stabilizerTask:四轴平衡控制任务。该任务运行的内容比较多,也是比较关键的内容。
包括传感器数据读取,数据融合,获取控制数据,空翻检测,异常检测,PID 控制,PWM 输出控制等。
**
3. 看门狗
**
main.c的最后,在空闲任务的钩子函数中,设置了一个150ms的看门狗,如下:
void vApplicationIdleHook( void )
{
static u32 tickWatchdogReset = 0;
portTickType tickCount = getSysTickCnt();
if (tickCount - tickWatchdogReset > WATCHDOG_RESET_MS)
{
tickWatchdogReset = tickCount;
watchdogReset();
}
__WFI(); /*进入低功耗模式*/
}