Ardupilot Chibios硬件启动初始化过程整理

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\macInit
                                                        pwmInit\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()  跳转到具体的app

app结构: 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();
}

正式进入到具体应用处理逻辑

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值