|
发表于 2010-4-5 13:24:23
|
显示全部楼层
1、回复【楼主位】jishanlaike 阿弱
记得书上说:为了用户程序进入中断后,除能其特权级地位,采用了非基级的中断方式
在SVC_0时,把MSP的内容传给了PSP,关键就在这里,我觉得修改一下PSP的指针(即PSP=PSP-32)不就行了么,
干么还要把MSP指向的那8个寄存器值保存在PSP中呢?这些内容好像没有任何用处。
还有SVC_0中清除中断活动位的作用是什么呢??而且清除了活动位后IRQ仍然是IRQ状态。。。。
请版主辛苦一下,回忆回忆,,呵呵
-----------------------------------------------------------------------
1、用PSP和PSP,目的是:把系统堆栈和用户堆栈分开。把参数R0~R3、R12、LR、PC等压入用户堆栈,则在中断可以直接使用这些寄存器而不需要保护(已经保护了)。如果在中断中进行了线程切换,只需恢复新线程的PSP就可以了,新线程的寄存器在返回时由新线程的PSP中读取。
2、中断活动位,表示当前还有哪些中断在中断嵌套中。退出中断的唯一情况是从中断退出(再也没有被嵌套的中断),所以清除了活动位后IRQ当然仍然是IRQ状态。
3、Cortex-M的这些设计,就是为实时操作系统准备的。 |
|