启动流程和切换流程

启动流程

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 时序图模式

任务切换过程

在这里插入图片描述
在这里插入图片描述

  1. 当TaskA在运行中systick中断触发了
  2. 进入systick中断 通过设置ICSR的28BIT 挂起PendSVC,systick中断执行完后
  3. 进入PendSV中断
  4. 当发送中断抢占PendSV中断
  5. 中断服务执行完后,PendSV继续执行并切换任务。
  6. TaskB在运行

一般 PendSV和systick中断优先级都最低,防止抢占中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值