pixhawk飞控架构



pixhawk 学习总结2

Pixhawk编译环境搭建好,接下来就是要看APM源码了。介绍给大家一款非常好用的程序编辑器软件source insight,在windows下看源码是最好不过了。

飞控系统是一套庞大的系统,要理解一整套的流程的话,是要经过一番折腾才行。我的角度是用linux的分层架构去分析的,接下来就是我看代码所理解和整理的飞控架构。

飞控架构分为3层:飞行控制栈(主要是姿态的控制)HAL(硬件抽象层)属于顶层应用,实时操作系统(nuttx)和底层驱动属于底层,还有就是引导系统启动的bootloader

我所负责的是底层和bootloader,现在就来说说流程吧,从bootloader说起。

一.Bootloader源码:CPU启动过程

1.上电启动:EXTERN (vector_table)

1)初始化堆栈指针 .initial_sp_value = &_stack,

2)硬件错误为阻塞 .hard_fault = hard_fault_handler,

3)中断控制器 .irq = { IRQ_HANDLERS }

4)系统的复位入口函数 .reset = reset_handler,

2.入口函数:ENTRY(reset_handler)

1)定义数据段 .data.bss

2)pre_main()(开启协处理器)

3)main() 

3.main函数:main(void)

1)board_init()(开发板的初始化)

2)bootloader()nuttx系统的设置)

3)jump_to_app()(测试引导nuttx系统)

二.APM的源码:nuttx系统的启动

1.bootloader引导进入.vectors向量表:stm32_vectors.S

1)定义堆栈的大小

2)定义STM32的中断向量表

3)入口函数是ENTRY(__start)

2.入口函数是ENTRY(__start)

1stm32的配置和初始化

2nuttx系统的入口函数os_start()

3.系统入口函数os_start()

1nuttx系统的初始化

2nuttx系统的启动进程os_bringup()

4.系统的启动进程os_bringup()

1创建内核进程

2)创建用户进程

a.创建init进程(main_t)CONFIG_USER_ENTRYPOINT

IO : CONFIG_USER_ENTRYPOINT =user_start

Fmu板:CONFIG_USER_ENTRYPOINT = nsh_main

5.IO系统进程入口函数:user_start(没有使用根文件系统)

6.fmu系统进程入口函数:nsh_main(根文件系统binfs

你可能感兴趣的:(pixhawk飞控架构)