스택 PSP를 사용하여 사용자 모드에서 SVC를 호출하려고합니다. LPC 1769 (cortex m3)에서 코드를 디버깅 할 때 다음 오류가 발생합니다. ------- "g_pfnVectors() at 0x0"에 사용할 수있는 소스가 없습니다 사용중인 IDE가 LPC 1769 인 코드 빨강 LPC Xpresso입니다. 임베디드 아티스트. 여기 LPC 1769 (cortex m3) 코드 레드 IDE --- g_pfnVectors() at0x0에 사용할 수있는 소스가 없습니다.
는 I 스택 검사를 수행하고 해당 기능 콘솔에 인쇄라고 어셈블리 코드 SVC 내부 .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
이다.
__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/printcaharacter/printdecimal 콘솔에서 각 값을 인쇄 기능은 : 여기 SVC 코드이다.
디버그 중에 단일 단계 모드에서 SVC 명령 다음에 "g_pfnVectors() at 0x0"에 사용할 수있는 소스가 없습니다.
오류의 원인과 도착은 예상치 못한 것입니다. gdb 디버거에 문제가 있습니까? 아니면 코드를 잘못 해석하고있는 것입니까?
감사합니다. 이걸 좀 볼 수 있니? http://stackoverflow.com/questions/15542360/pass-by-reference-in-assembly –