本帖最后由 无为之益 于 2016-10-12 09:44 编辑
我把CoIDE下的stm32f10x_it.c文件中的硬错误中断屏蔽掉了
/*void HardFault_Handler(void)
{
{ __asm volatile( " tst lr, #4 \n"
" ite eq \n"
" mrseq r0, msp \n"
" mrsne r0, psp \n"
" ldr r1, [r0, #24] \n"
" ldr r2, handler2_address_const \n"
" bx r2 \n"
" handler2_address_const: .word pop_registers_from_fault_stack \n" );
//Go to infinite loop when Hard Fault exception occurs
}
// Go to infinite loop when Hard Fault exception occurs
while (1)
{
}
}*/
把启动文件(是keil下的)startup_stm32f10x_cl.S中对应的程序改成如下:
HardFault_Handler\
PROC
; EXPORT HardFault_Handler [WEAK]
; B .
IMPORT pop_registers_from_fault_stack
TST LR, #4
ITE EQ
MRSEQ R0, MSP
MRSNE R0, PSP
; LDR R1, [R0, #24]
; LDR R2, _handler2_address
; BX R2
;_handler2_address:
B pop_registers_from_fault_stack
ENDP
编译后没有再报lr的错误了(还有其他几个错误,今天应该都能改好,因为是不同格式引起重复定义报错)。
我不知道ARM汇编的程序标号怎么写,所以源代码中的这3句给屏蔽掉了,否则报错
; LDR R1, [R0, #24]
; LDR R2, _handler2_address
; BX R2
;_handler2_address:
也就是说,我可能没有完全正确移植吧。请教你这几句该如何正确书写呢?谢谢 !
备注:其实就是 ; LDR R2, _handler2_address
;_handler2_address: 这2句报错
|