M3操作系统汇编理解

一:汇编

  1. 设置PendSV中断和优先级
    M3操作系统汇编理解
    查看CM3权威指南132页
    设置PendSV优先级和触发中断
    M3操作系统汇编理解M3操作系统汇编理解
    CM3—使用双堆栈PSP(用户)和MSP(系统)
    M3操作系统汇编理解
    M3操作系统汇编理解
    CM3-权威指南40页
    M3操作系统汇编理解
  2. 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只能通过手动修改
    M3操作系统汇编理解M3操作系统汇编理解
    M3操作系统汇编理解
  3. 触发PendSV中断
    M3操作系统汇编理解
  4. 临界区
    1) 保存PRIMASK寄存器,关中断
    M3操作系统汇编理解
    2) 恢复PRIMASK寄存器,开中断
    M3操作系统汇编理解
    M3操作系统汇编理解M3操作系统汇编理解