|
发表于 2015-8-20 11:17:19
|
显示全部楼层
- /*------------------- User SVC ------------------------------*/
- SVC_User
- PUSH {R4,LR} ; Save Registers
- LDR R2,=SVC_Count
- LDR R2,[R2]
- CMP R1,R2
- BHI SVC_Done ; Overflow
- LDR R4,=SVC_Table-4
- LDR R4,[R4,R1,LSL #2] ; Load SVC Function Address
- LDM R0,{R0-R3,R12} ; Read R0-R3,R12 from stack
- BLX R4 ; Call SVC Function
- MRS R12,PSP // 用户代码返回是不是已经做好了MSP到PSP的转换,我懂汇编,因此我不是很确定。
- STM R12,{R0-R3} ; Function return values
- SVC_Done
- POP {R4,PC} ; RETI
- ALIGN
复制代码
其次,如果SVC也使用MSP,如何保证中断中的函数不会破坏内核堆栈呢?如果在中断中调用用户函数,造成了堆栈溢出或者越界之类的。是不是在中断使用过程中必须严格限制仅能运行内核中前缀为isr的函数?
非常感谢您的解答。
|
|