PX4启动流程,分为4步:
1.__start:
上电之后程序入口为Firmware/NuttX/nuttx/arch/arm/src/stm32/stm32_start.c中的__start函数,负责stm32芯片的底层初始化,包括是时钟,GPIO等。
2.os_start:
__start函数调用Firmware/NuttX/nuttx/sched/os_start.c中的os_start函数,负责os的底层初始化,包括队列和进程结构等。
3.os_bringup:
os_start函数调用Firmware/NuttX/nuttx/sched/os_bringup.c中的os_bringup函数,负责os基本进程的启动和用户进程的启动。用户启动入口由CONFIG_USER_ENTRYPOINT宏定义进行指定。
4.CONFIG_USER_ENTRYPOINT:
FMU和IO的启动入口不同,分别为:
(1)FMU中CONFIG_USER_ENTRYPOINT宏定义为nsh_main:
[1] 调用nsh_main函数。
[2] nsh_main函数调用Firmware/NuttX/apps/nshlib/nsh_consolemain.c中nsh_consolemain函数。
[3] nsh_consolemain函数调用nsh_initscript函数。
[4] nsh_initscript函数所执行的脚本即为FMU的启动脚本rcS。
[5] rcS脚本中负责挂载Sd卡,启动uorb,加载参数配置文件,启动dataman数据管理,启动各传感器,commander,执行rc.io,执行rc.interface(混控器),执行rc.mc_app(飞控姿态与位置算法)等。
(2)IO中CONFIG_USER_ENTRYPOINT宏定义为user_main:
调用src/modules/
PX4启动流程详解与任务管理

文章详细阐述了PX4的启动流程,从__start函数开始,经过os_start和os_bringup,最终到达CONFIG_USER_ENTRYPOINT,区分了FMU和IO的不同启动入口。在FMU中,启动脚本rcS负责各种服务的启动,而在IO中,user_start初始化基础环境后进入死循环。此外,文章提到了ModuleBase类和px4_work_queue在任务管理和工作队列中的作用。
最低0.47元/天 解锁文章
1934

被折叠的 条评论
为什么被折叠?



