系统流程框架

作者:nieyong

介绍系统的初始化流程,以及系统任务之间的关系。

系统任务

最关心的是系统中由多少个任务在运行。在FreeRTOS下,任务的初始化使用函数。所以,用grep命令参看一下源代码,可以看到一共有下面这些系统初始化的任务:

  1. $ grep -inIw 'xTaskCreate' -r ./hal/ ./modules/
  2. ./hal/src/eskylink.c:312: xTaskCreate(eskylinkTask, (const signed char * const)"EskyLink",
  3. ./hal/src/pm.c:111: xTaskCreate(pmTask, (const signed char * const)"PWRMGNT",
  4. ./hal/src/uart.c:145: xTaskCreate(uartRxTask, (const signed char * const)"UART-Rx",
  5. ./hal/src/radiolink.c:237: xTaskCreate(radiolinkTask, (const signed char * const)"RadioLink",
  6. ./modules/src/stabilizer.c:157: xTaskCreate(stabilizerTask, (const signed char * const)"STABILIZER",
  7. ./modules/src/crtp.c:77: xTaskCreate(crtpTxTask, (const signed char * const)"CRTP-Tx",
  8. ./modules/src/crtp.c:79: xTaskCreate(crtpRxTask, (const signed char * const)"CRTP-Rx",
  9. ./modules/src/info.c:68: xTaskCreate(infoTask, (const signed char * const)"Info",
  10. ./modules/src/log.c:171: xTaskCreate(logTask, (const signed char * const)"log",
  11. ./modules/src/pidctrl.c:43: xTaskCreate(pidCrtlTask, (const signed char * const)"PIDCrtl",
  12. ./modules/src/param.c:92: xTaskCreate(paramTask, (const signed char * const)"PARAM",
  13. ./modules/src/system.c:68: xTaskCreate(systemTask, (const signed char * const)"SYSTEM",

所有的任务在创建之后,都会进入while(1)的循环中,也就是任务一直循环运行。

任务之间的关系

那么任务之间的关系是怎么样的呢,如何各司其职完成系统的控制呢。下面使用一个简图进行了说明,逻辑主线是控制数据的传递。

crazyflie task