У меня возникли трудности с созданием жесткого обработчика ошибок для NRF51 с ARM CortexM0.
(примечание: следующий код был объединен из разных источников в Интернете) Вот что у меня есть на данный момент:
static void hard_fault_handler_c(unsigned int * hardfault_args)
{
unsigned int stacked_r0;
unsigned int stacked_r1;
unsigned int stacked_r2;
unsigned int stacked_r3;
unsigned int stacked_r12;
unsigned int stacked_lr;
unsigned int stacked_pc;
unsigned int stacked_psr;
stacked_r0 = ((unsigned long) hardfault_args[0]);
stacked_r1 = ((unsigned long) hardfault_args[1]);
stacked_r2 = ((unsigned long) hardfault_args[2]);
stacked_r3 = ((unsigned long) hardfault_args[3]);
stacked_r12 = ((unsigned long) hardfault_args[4]);
stacked_lr = ((unsigned long) hardfault_args[5]);
stacked_pc = ((unsigned long) hardfault_args[6]);
stacked_psr = ((unsigned long) hardfault_args[7]);
for(;;);
}
void HardFault_Handler(void)
{
asm volatile(
"movs r0, #4\t\n"
"mov r1, lr\t\n"
"tst r0, r1\t\n" /* Check EXC_RETURN[2] */
"beq 1f\t\n"
"mrs r0, psp\t\n"
"ldr r1,=hard_fault_handler_c\t\n"
"bx r1\t\n"
"1:mrs r0,msp\t\n"
"ldr r1,=hard_fault_handler_c\t\n"
: /* no output */
: /* no input */
: "r0" /* clobber */
);
}
Ошибка во время компиляции: Цель построения: project.elf Вызов: Cross ARM C ++ Linker C: \ Users \ Steven \ AppData \ Local \ Temp \ ccuAgDyP.ltrans9.ltrans.o: В функции HardFault_Handler':
<artificial>:(.text.HardFault_Handler+0x18): undefined reference to
hard_fault_handler_c 'collect2.exe: error : ld возвратил 1 статус выхода make: *** [FruityMesh.elf] Ошибка 1 makefile: 65: не удалось выполнить рецепт для цели 'project.elf'
Таким образом, похоже, что компоновщик не может найти адрес для функции hard_fault_handler_c. Я бы подумал, что мне нужно написать сборку для импорта или включить путь к этой функции, но это всего лишь мое предложение. Мне не удалось написать сборку для M0, которая для этого компилируется.
Спасибо
static
? Что если убрать? Возможно, встроенная сборка интерпретируется как другая единица перевода .. - person Eugene Sh.   schedule 09.10.2015