Arm LPC1769(cortex m3)代码红色IDE---没有适用于g_pInvectors()at0x0的源代码
我试图用stack PSP从用户模式调用SVC。在调试LPC1769(cortex m3)上的代码时,我观察到以下错误-----没有“0x0处的g_pInvectors()可用的源代码” 我使用的IDE是代码为RED的LPC Xpresso,其LPC1769来自嵌入式艺术家 这是汇编代码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
.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
非常感谢。你能看看这个吗--