реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Hardfault STM32F4 Keil, Идентификация ошибки
Boriska
сообщение Oct 6 2014, 17:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 28-11-07
Пользователь №: 32 772



Подскажите, как идентифицировать ошибку и найти место ее возникновения.

Прикрепленное изображение


Обработчик:
Код
void HardFault_Handler(unsigned long *hardfault_args){
        volatile unsigned long stacked_r0;
        volatile unsigned long stacked_r1;
        volatile unsigned long stacked_r2;
        volatile unsigned long stacked_r3;
        volatile unsigned long stacked_r12;
        volatile unsigned long stacked_lr;
        volatile unsigned long stacked_pc;
        volatile unsigned long stacked_psr;
        volatile unsigned long _CFSR;
        volatile unsigned long _HFSR;
        volatile unsigned long _DFSR;
        volatile unsigned long _AFSR;
        volatile unsigned long _BFAR;
        volatile unsigned long _MMAR;

        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]);

        // Configurable Fault Status Register
        // Consists of MMSR, BFSR and UFSR
        _CFSR = (*((volatile unsigned long *)(0xE000ED28)));  
                                                                                        
        // Hard Fault Status Register
        _HFSR = (*((volatile unsigned long *)(0xE000ED2C)));

        // Debug Fault Status Register
        _DFSR = (*((volatile unsigned long *)(0xE000ED30)));

        // Auxiliary Fault Status Register
        _AFSR = (*((volatile unsigned long *)(0xE000ED3C)));

        // Read the Fault Address Registers. These may not contain valid values.
        // Check BFARVALID/MMARVALID to see if they are valid values
        // MemManage Fault Address Register
        _MMAR = (*((volatile unsigned long *)(0xE000ED34)));
        // Bus Fault Address Register
        _BFAR = (*((volatile unsigned long *)(0xE000ED38)));

        __asm("BKPT #0\n"); // Break into the debugger

}


Но стек пустой -
Прикрепленное изображение


Подскажите, в чем может быть проблема?
Go to the top of the page
 
+Quote Post
nill
сообщение Oct 7 2014, 05:09
Сообщение #2


Частый гость
**

Группа: Validating
Сообщений: 124
Регистрация: 10-08-05
Пользователь №: 7 502



Цитата(Boriska @ Oct 7 2014, 00:34) *
Подскажите, как идентифицировать ошибку и найти место ее возникновения.

Начните с чтения "AN209: Using CM3 and CM4 fault exceptions". Там указаны три основных причины возникновения INVSTATE, исходя из которых уже можно проводить дальнейший анализ.

Цитата(Boriska @ Oct 7 2014, 00:34) *
Но стек пустой -

А где и как заполняется hardfault_args? По идее, у Вас должен быть переопределён вектор прерывания HardFault, в нём заполняется hardfault_args и вызывается функция HardFault_Handler.

Сообщение отредактировал nill - Oct 7 2014, 05:18
Go to the top of the page
 
+Quote Post
Boriska
сообщение Oct 13 2014, 14:08
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 28-11-07
Пользователь №: 32 772



Цитата(nill @ Oct 7 2014, 09:09) *
Начните с чтения "AN209: Using CM3 and CM4 fault exceptions".

Это я читал. Не помогает.
Цитата(nill @ Oct 7 2014, 09:09) *
По идее, у Вас должен быть переопределён вектор прерывания HardFault, в нём заполняется hardfault_args и вызывается функция HardFault_Handler

Спасибо за подсказку. Сейчас смотрю на PSP и MSP, но указатели на стек ссылаются на фрагменты памяти, где PC = 0 или PC=0x76432320, что не похоже на область, откуда может выполняться код.
Не понятно, какая инструкция вызвала ошибку.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.05409 секунд с 7
ELECTRONIX ©2004-2016