启动流程
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中断优先级都最低,防止抢占中断。