在arm9上移植ucosii ,中断级任务切换时,如何处理不同的arm模式对应不同堆栈的问题?
用的处理器是TI的OMAPL138,内部是一个dsp核,一个arm926e的核,移植的ucosIIv2.52平时的任务运行在系统模式,进入OSTickISR节拍中断函数后...
用的处理器是TI 的OMAP L138, 内部是一个dsp核,一个arm926e的核, 移植的ucosII v2.52
平时的任务运行在系统模式, 进入OSTickISR节拍中断函数后是IRQ模式,
但是ucos中要在这个中断函数里把cpu寄存器保存到任务堆栈, 但是任务堆栈是系统模式下的堆栈, 在irq模式下压栈只能保存到irq堆栈中, 这个地方如何实现呢? 望指点啊 展开
平时的任务运行在系统模式, 进入OSTickISR节拍中断函数后是IRQ模式,
但是ucos中要在这个中断函数里把cpu寄存器保存到任务堆栈, 但是任务堆栈是系统模式下的堆栈, 在irq模式下压栈只能保存到irq堆栈中, 这个地方如何实现呢? 望指点啊 展开
展开全部
在iRQ时,临时进入系统模式,然后此时操作的SP就是系统模式的,然后完了在返回IRQ继续刚才的操作,,很简单的!我在ARM9上写了个简单的类似于uc/OS的多任务实时系统内核WeidaOS,在你说的这种情况下就是这么干的。。。你可以google搜一下weidaos去下载我的源码试试看,里面的源码有较为详细的说明!我的是运行在Mini2440开发板上的!
追问
你好,我现在按照你的这种做法处理的,但是遇到了一个问题:在ISR中 先从IRQ模式切换到系统模式,中间只有一个字符串发送函数调用(只是测试下模式切换),在切换回IRQ模式返回中断,会发生程序跑飞的情况,如果去掉模式切换,可以正常运行,或者去掉切换中间的函数调用,也可以正常运行。 模式切换指令如下:
MRS R0,CPSR
BIC R0,#0X1F
ORR R0,#0X1F
MSR CPSR_cxsf,40
追答
刚开始从IRQ切换到系统模式时,得关中断啊,此时不能中断嵌套的,快速做完事后返回IRQ继续刚才的执行。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询