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

 
 
> STM32F1xx и Fault, Не получается отловить из какого места
XGoblinX
сообщение Aug 29 2011, 11:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-12-10
Пользователь №: 61 586



Всем здравствуйте!

Есть программка на иаре. Загружаю под SWD в STM32F103.
int main( void )
{
memset(0x20000000, 0, 0xffffff);
}

Во время выполнения естественно падаю в 0xC.
Но после этого я не могу посмотреть откуда именно (с какой инструкции) он туда свалился.
Хочу для себя понять на будущее, как ловить такие вещи.
Спасибо заранее.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Aleksandr Barano...
сообщение Aug 29 2011, 18:20
Сообщение #2


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

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Если я правильно понял вопрос, есть известный способ, описанный в книжке "The Definitive Guide to the ARM Cortex-M3":
Код
void HardFaultException( void )
{
    unsigned int contr_reg;

    contr_reg = __get_CONTROL();
    if(contr_reg&2)
    {
        asm("MRS R0, PSP");
    }
    else{
        asm("MRS R0, MSP");
    }
    asm("B    (Hard_fault_handler_c)");                    //top of stack is in R0. It is passed to C-function.

  while (1)
  {

  }
}


С- handler:

Код
void Hard_fault_handler_c(unsigned long* hard_fault_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]);

printf ("[Hard fault handler]\n");
printf ("R0 = %x\n", stacked_r0);
printf ("R1 = %x\n", stacked_r1);
printf ("R2 = %x\n", stacked_r2);
printf ("R3 = %x\n", stacked_r3);
printf ("R12 = %x\n", stacked_r12);
printf ("LR = %x\n", stacked_lr);
printf ("PC = %x\n", stacked_pc);
printf ("PSR = %x\n", stacked_psr);
  
}


--------------------
ASB
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- XGoblinX   STM32F1xx и Fault   Aug 29 2011, 11:23
- - SII   А где пытаетесь смотреть? Адрес возврата (из котор...   Aug 29 2011, 11:33
|- - XGoblinX   Цитата(SII @ Aug 29 2011, 11:33) А где пы...   Aug 29 2011, 11:38
- - KnightIgor   Цитата(XGoblinX @ Aug 29 2011, 13:23) Все...   Aug 29 2011, 11:49
|- - XGoblinX   Цитата(KnightIgor @ Aug 29 2011, 11:49) А...   Aug 29 2011, 12:17
- - SII   Почитайте внимательно описание архитектуры на пред...   Aug 29 2011, 13:05
|- - XGoblinX   Цитата(Aleksandr Baranov @ Aug 29 2011, 18...   Aug 30 2011, 05:03
|- - demiurg_spb   Ребята, стал попадать в обработчик хард-фолта с та...   Jun 14 2012, 10:02
- - andrewlekar   По идее да. Смотрите в map файле, что за функция н...   Jun 14 2012, 11:13
- - brag   ЦитатаРебята стал попадать в обработчик хард-фолта...   Jun 14 2012, 11:46
|- - demiurg_spb   Огромное спасибо за столь исчерпывающие рекомендац...   Jun 14 2012, 12:04
- - brag   У Вас по ходу LR выводился из стека, а я думал то ...   Jun 14 2012, 12:10
- - demiurg_spb   Спасибо! Отличная мысль!   Jun 14 2012, 17:17


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:49
Рейтинг@Mail.ru


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