启动流程 startup_stm32f103xb system_stm32f1xx syscalls components timer scheduler_up main Reset_Handler() 服务入口 __libc_init_array() entry() rtthread_startup() rt_hw_board_init() 硬件初始化 rt_system_timer_init() 硬定时器初始化 SysTick中断SysTick_Handler rt_system_scheduler_init() 调度器初始化 rt_application_init() main_thread_entry() main() startup_stm32f103xb system_stm32f1xx syscalls components timer scheduler_up main 时序图模式 调度流程 drv_common clock scheduler_comm scheduler_up context_gcc SysTick_Handler() 触发systick 中断 rt_tick_increase() rt_sched_unlock_n_resched() rt_schedule() rt_hw_context_switch() 触发PendSV 中断 PendSV_Handler() switch_to_thread() PendSV 中切换任务 drv_common clock scheduler_comm scheduler_up context_gcc 时序图模式 任务切换过程 当TaskA在运行中systick中断触发了进入systick中断 通过设置ICSR的28BIT 挂起PendSVC,systick中断执行完后进入PendSV中断当发送中断抢占PendSV中断中断服务执行完后,PendSV继续执行并切换任务。TaskB在运行 一般 PendSV和systick中断优先级都最低,防止抢占中断。