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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章