系统流程框架
作者:nieyong
介绍系统的初始化流程,以及系统任务之间的关系。
系统任务
最关心的是系统中由多少个任务在运行。在FreeRTOS下,任务的初始化使用函数。所以,用grep命令参看一下源代码,可以看到一共有下面这些系统初始化的任务:
$ grep -inIw 'xTaskCreate' -r ./hal/ ./modules/
./hal/src/eskylink.c:312: xTaskCreate(eskylinkTask, (const signed char * const)"EskyLink",
./hal/src/pm.c:111: xTaskCreate(pmTask, (const signed char * const)"PWRMGNT",
./hal/src/uart.c:145: xTaskCreate(uartRxTask, (const signed char * const)"UART-Rx",
./hal/src/radiolink.c:237: xTaskCreate(radiolinkTask, (const signed char * const)"RadioLink",
./modules/src/stabilizer.c:157: xTaskCreate(stabilizerTask, (const signed char * const)"STABILIZER",
./modules/src/crtp.c:77: xTaskCreate(crtpTxTask, (const signed char * const)"CRTP-Tx",
./modules/src/crtp.c:79: xTaskCreate(crtpRxTask, (const signed char * const)"CRTP-Rx",
./modules/src/info.c:68: xTaskCreate(infoTask, (const signed char * const)"Info",
./modules/src/log.c:171: xTaskCreate(logTask, (const signed char * const)"log",
./modules/src/pidctrl.c:43: xTaskCreate(pidCrtlTask, (const signed char * const)"PIDCrtl",
./modules/src/param.c:92: xTaskCreate(paramTask, (const signed char * const)"PARAM",
./modules/src/system.c:68: xTaskCreate(systemTask, (const signed char * const)"SYSTEM",
所有的任务在创建之后,都会进入while(1)
的循环中,也就是任务一直循环运行。
任务之间的关系
那么任务之间的关系是怎么样的呢,如何各司其职完成系统的控制呢。下面使用一个简图进行了说明,逻辑主线是控制数据的传递。