Arm LPC1769(cortex m3)代码红色IDE---没有适用于g_pInvectors()at0x0的源代码

Arm LPC1769(cortex m3)代码红色IDE---没有适用于g_pInvectors()at0x0的源代码,arm,inline-assembly,cortex-m3,thumb,lpc,Arm,Inline Assembly,Cortex M3,Thumb,Lpc,我试图用stack PSP从用户模式调用SVC。在调试LPC1769(cortex m3)上的代码时,我观察到以下错误-----没有“0x0处的g_pInvectors()可用的源代码” 我使用的IDE是代码为RED的LPC Xpresso,其LPC1769来自嵌入式艺术家 这是汇编代码 .syntax unified .cpu cortex-m3 .thumb .align 2 .global Start

我试图用stack PSP从用户模式调用SVC。在调试LPC1769(cortex m3)上的代码时,我观察到以下错误-----没有“0x0处的g_pInvectors()可用的源代码” 我使用的IDE是代码为RED的LPC Xpresso,其LPC1769来自嵌入式艺术家

这是汇编代码

        .syntax unified
        .cpu cortex-m3
        .thumb
        .align 2
        .global Start
        .thumb
        .thumb_func
    Start:
//  LDR r0,=0xf00d   //initial value of r0 which has to be changed in svc handler
    PUSH {lr}


    MOV r0,#0x2      // set stack to PSP now. Set CONTROL[1]=1
    MSR CONTROL,r0
    ISB              // Instruction memory barrier – ensures that the above is executed


    MOV r0,#0x3         //change to user level
    MSR CONTROL, r0
    ISB

    MOV r0,#0x2
    MOV r2,#0x2
exp:
    MUL r0,r0
    SUBS r2,#1
    BNE exp

    SVC 1 //print in hex

    MOV r0,#0x4  //print in decimal
    SVC 2

    MOV r0,#'A'
    SVC 3         //print character

    MOV r1,0x0
    MSR CONTROL,r1
             ISB


    POP {lr}
    BX lr
在SVC内部,我执行堆栈检查,并调用相应的函数在控制台上打印。 以下是SVC代码:

__attribute__ ((section(".after_vectors")))
void SVCall_Handler(void)
{
  while(1)
  {
    __asm(
            "TST lr, #4         \n"
            "ITE eq         \n"
            "MRSEQ r0, MSP      \n"
            "MRSNE r0, PSP      \n"
            "LDR r0,[r0,#0]     \n"
            "LDR r1, [r0, #24]  \n"
            "LDRB r1, [r1, #-2] \n"
            //immediate data in r1 and input parameter in r0

            //"PUSH {LR}            \n"
            "CBNZ r1,svc_hex            \n"
            "B svc_end          \n"

            "svc_hex:           \n"
            "CMP r1,#1          \n"
            "BNE svc_decimal             \n"
            " BL printhex               \n"
            "B svc_end          \n"

            "svc_decimal:               \n"
            "CMP r1,#2          \n"
            "BNE svc_character          \n"
            "BL printdecimal            \n"
            "B svc_end          \n"

            "svc_character:              \n"
            "CMP r1,#3          \n"
            "BL printcharacter          \n"
            "B svc_end          \n"

            "svc_end:           \n"
            "MOV r0,#0x0                \n"
            "MSR CONTROL,r0             \n"
            "ISB                \n"
            "BX LR              \n"
    );
  }
}
printhex/PrintCaCharacter/printdecimal是用于在控制台上打印相应值的函数

在调试期间的单步模式下,在SVC指令之后,出现“0x0处的g_pfinvectors()无可用源”错误


错误的原因和出现是完全出乎意料的。gdb调试器有什么问题吗?或者我解释代码的方式是错误的吗?

这对你来说可能有点晚了,但可能对其他人有用


g_pfinvectors
(或位于位置
0x0
的任何内容)是中断/异常向量表。SVC将调用SVC异常,指向其函数的指针应位于
g\u pfinvectors
中。您的代码中似乎不是这样,因此
PC
跳到
0x0
,顺便说一下,这也是
g\u pfinvectors

非常感谢。你能看看这个吗--