ardupilot 的启动根据不同HAL 的启动过程不一样 , chibios 的硬件入口是
硬件启动 -> modules/Chibios/common/startup/ARMCMx/compilers/GCC/VECTOR.S ResetHandler: modules/Chibios/common/startup/ARMCMx/compilers/GCC/ crt0_v7m.S crt0_entry--AP_HAL_Chibios/hwdef/common/Board.c   __early_init()   初始化pal(gpio)& sysClock --AP_HAL_Chibios/hwdef/common/Board.c    __late_init () --  modules/Chibios/os/hal/src/hal.c   halInit()--  modules/Chibios/os/hal/osal/lib/osal_vt.c vtInit--  modules/Chibios/os/hal/ports/AT32/AT32f435_437xx/hal_lld.c hal_lld_init--rccEnablePWRInterface() dmaInit IrqInit 初始化RCC DMA Irq--palInit 初始化gpio-- adcInit   lld 库各种外设初始化-- 。。。。。canInit\cryInit\dacInit\eflInit\gptInit\i2cInit\i2sInit\icuInit\eicuInit\macInitpwmInit\sdInit\sioInit\spiInit\trngInit\uartInit\mmcInit\sduInit\rtcInit\wdgInit\wspInit--boardInit()--modules/Chibios/os/rt/src/ch.c  chiSysInit()  chibios 初始化bl  main  ->跳转到  Tools/AP_Bootloader.cpp  main()-- jump_to_app()  跳转到具体的appapp结构: Copter\Plane\Sub\Rover 都是继承自 AP_Vehicle
Copter.cpp 最后 AP_HAL_MAIN_CALLBACK 宏,作为app 的main 函数入口, 以Copter 类为Callback 对象传入
chibios 的AP_HAL_Chibios_Class.cpp HAL
 宏解开大概是这样:
int main(int argc char* const argv[]) {hal.run(copter);}
hal.run() 中 调用 Copter.Setup() 然后
while(true){copter.loop();
}
正式进入到具体应用处理逻辑