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)
1)stm32的配置和初始化
2)nuttx系統的入口函數os_start()
3.系統入口函數os_start()
1)nuttx系統的初始化
2)nuttx系統的啓動進程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)