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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值