Gcc 手臂皮质M4 SVC“U处理器”;UsageFault“;

Gcc 手臂皮质M4 SVC“U处理器”;UsageFault“;,gcc,arm,interrupt,cortex-m3,stm32f4discovery,Gcc,Arm,Interrupt,Cortex M3,Stm32f4discovery,我正在为一个个人迷你ARM内核项目创建一个上下文切换程序,而上下文切换程序完全是在汇编中编写的。问题是,当我进行SVC调用(SVC 0)时,我会输入SVC_处理程序,但当我尝试执行下一条指令时,我会输入另一个处理程序(“UsageFault_处理程序”)。故障发生在我可以弹出SVC_处理程序中的任何寄存器之前 这里是我的gdb屏幕的一个寄存器转储(在我进入SVC\u处理程序并遇到UsageFault\u处理程序之后): 我不确定是什么导致了这个问题,因为我确保了中断被启用并将SVC优先级初始化为

我正在为一个个人迷你ARM内核项目创建一个上下文切换程序,而上下文切换程序完全是在汇编中编写的。问题是,当我进行SVC调用(SVC 0)时,我会输入SVC_处理程序,但当我尝试执行下一条指令时,我会输入另一个处理程序(“UsageFault_处理程序”)。故障发生在我可以弹出SVC_处理程序中的任何寄存器之前

这里是我的gdb屏幕的一个寄存器转储(在我进入SVC\u处理程序并遇到UsageFault\u处理程序之后):


我不确定是什么导致了这个问题,因为我确保了中断被启用并将SVC优先级初始化为0x0(最高优先级)。另外,我正在使用ARM Cortex M4 STM32F411E评估板

问题是我的中断向量都是偶数(ARM模式)。当T位为0(向量数的最低有效位)时尝试执行指令会导致故障或锁定。由于Cortex-M仅在Thumb2状态下运行,我必须在上下文开关程序集中的中断处理程序上方放置“.thumb_func”,以指示我的异常在thumb状态下运行

你看过文档了吗?我看过,但我不认为优先权是我想的问题。你的micro是什么?STM32是不够的。你读过程序员手册吗?我正在开发ARM Cortex M4 STM32F411E评估板。我阅读了编程手册(PM0214),现在我正在玩中断启用和优先级寄存器。但我在想,如果问题是中断禁用或优先级,那么我就不会进入SVC_处理器,所以问题一定是其他问题。是的,让中断在ARM Cortex-m上正常工作就像一个终极的神圣奇迹。我喜欢这个东西。
(gdb) i r
r0             0x1  1
r1             0x20000bcc   536873932
r2             0x40004404   1073759236
r3             0x1  1
r4             0x0  0
r5             0xc  12
r6             0x3  3
r7             0x20000fe4   536874980
r8             0x1  1
r9             0x0  0
r10            0xb  11
r11            0xa  10
r12            0x2  2
sp             0x2001ffa8   0x2001ffa8
lr             0xfffffff1   4294967281
pc             0x8000188    0x8000188 <UsageFault_Handler>
cpsr           0x3  3
activate:
      cpsie i                                                                   

      /* save kernel state into msp */
      mrs ip, msp
      push {r4-r11,ip,lr}

      /* retrieve routine parameters and switch to the process stack psp */
      ldmfd r0!, {ip,lr}                                                        
      msr control, ip                                                           
      isb                                                                       
      msr psp, r0                                                               

      /* software stack frame. load user state */
      pop {r4-r11}                                                              

      /* hardware stack frame. the cpu pops r0-r3, r12 (IP), LR, PC, xPSR automatically */

      /* jump to user task*/
      bx lr


SVC_Handler:
      /* automatically use the msp as the sp when entering handler mode */

      /* pop msp stack */
      pop {r4-r11,ip,lr}
      mov sp, ip

      /* back to the thread mode if no other active exception */
      bx lr