说明:此项目是基于博客里一名大佬的文章进行的移植修改。
如果要在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;开启中断
<