M3操作系统汇编理解
一:汇编
- 设置PendSV中断和优先级
查看CM3权威指南132页
设置PendSV优先级和触发中断
CM3—使用双堆栈PSP(用户)和MSP(系统)
CM3-权威指南40页
- PendSV中断(上下文切换处理)
1) 关闭中断,判断是否第一次进入PendSV,如果是第一次就不需要保存任务现场,如果不是第一次,就要保存当前任务的R4-R11寄存器到任务堆栈中,手动保存,并且更新当前堆栈的栈顶指针以便再次进入任务能够正常恢复。
2) 将当前任务表指向要更新的任务控制控制表,将R4-R11出栈,从新设置PSP指向当前任务的栈顶
3) 因为在PendSV中断使用的是特权级,使用的主堆栈指针是MSP,要在退出PendSV后切换到用户级并且使用进程堆栈指针,所以要设置ORR LR,LR,#0x04; 置LR的位2为1,那么异常返回后,用户线程使用PSP,40页
4) 打开中断
在中断服务例程自动切换为MSP,要更改PSP只能通过手动修改
- 触发PendSV中断
- 临界区
1) 保存PRIMASK寄存器,关中断
2) 恢复PRIMASK寄存器,开中断