查看: 706|回复: 1

PX4源码分析5_PX4启动流程

[复制链接]

34

主题

759

帖子

1503

积分

金牌飞友

Rank: 6Rank: 6

积分
1503
飞币
742
注册时间
2017-8-23
发表于 2022-11-17 16:44:42 | 显示全部楼层 |阅读模式
PX4源码分析5_PX4启动流程

36

主题

832

帖子

1664

积分

金牌飞友

Rank: 6Rank: 6

积分
1664
飞币
816
注册时间
2017-8-21
发表于 2022-11-17 16:50:09 | 显示全部楼层
上电之后程序入口为Firmware/NuttX/nuttx/arch/arm/src/stm32/stm32_start.c中的__start函数,负责stm32芯片的底层初始化,包括是时钟,GPIO等。
   <br />
  
__start函数调用Firmware/NuttX/nuttx/sched/os_start.c中的os_start函数,负责os的底层初始化,包括队列和进程结构等。
   <br />
  
os_start函数调用Firmware/NuttX/nuttx/sched/os_bringup.c中的os_bringup函数,负责os基本进程的启动和用户进程的启动。用户启动入口由CONFIG_USER_ENTRYPOINT宏定义进行指定。
   <br />
  
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/px4iofirmware/px4io.c中的user_start函数,负责IO基础环境的初始化,包括PWM,串口,ADC等,最后进入死循环,用于遥控器输入和与FMU通信的内容。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表