Cortex-M0版本的简单任务调度

说明:此项目是基于博客里一名大佬的文章进行的移植修改。

自编STM32轻量级操作系统(二)------任务调度

 如果要在Cortex-M0上实现这个任务调度,需要修改两个函数的实现。

第一个是OSStartHighRdy()

NVIC_SYSPRI14        EQU     0xE000ED20; 系统优先级寄存器(优先级14).
NVIC_PENDSV_PRI      EQU     0xC0      ; PendSV优先级(最低).

OSStartHighRdy; 设置PendSV的异常中断优先级
	CPSID    I;关闭中断
	LDR      R0,=NVIC_SYSPRI14
	LDR      R1,=NVIC_PENDSV_PRI
	LSLS     R1, R1, #16
	LDR      R2, [R0]
	ORRS     R1,R2,R1
	STR      R1,[R0]
	
	MOVS     R0,#0;任务堆栈设置为0
	MSR      PSP,R0;PSP清零,作为首次上下文切换的标志
	
	
	LDR      R0,=CPU_ExceptStkBase;初始化堆栈为CPU_ExceptStkBase
	LDR      R1,[R0];R1的数据+R2的数据合成一个地址值,该地址中存放的数据赋值给R0
	MSR      MSP,R1;将MSP设为我们为其分配的内存地址CPU_ExceptStkBase

	LDR      R0,=NVIC_INT_CTRL
	LDR      R1,=NVIC_PENDSVSET
	STR      R1,[R0];触发PendSV异常
	
	CPSIE    I;开启中断
<
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值