Size: a a a

2020 October 27

E

Evgen in Deus Volt!
Vadimatorik
Хард обработчик решает. В идеале запустит на меньшей частоте без задержки чтения из flash и в харде будет точное место падения.
да запустить на меньшей частоте не проблема, только на отладке такое не отловить из-за помех быстрее jtag отвалится, ещё не понятно от чего камень мрет
источник

V

Vadimatorik in Deus Volt!
Решение 10 из 10 это при попадании в hard слать в usart дамп последней работы.
источник

V

Vadimatorik in Deus Volt!
Я так на 485 отлаживал.
источник

V

Vadimatorik in Deus Volt!
Когда к МК не подступиться было.
источник

E

Evgen in Deus Volt!
Vadimatorik
Решение 10 из 10 это при попадании в hard слать в usart дамп последней работы.
указателем на функцию,  что делал?
источник

V

Vadimatorik in Deus Volt!
Не понял вопроса. Я брал дамп регистров и отправлял его в usart. После чего мк висел в while 1.
источник

E

Evgen in Deus Volt!
Vadimatorik
Не понял вопроса. Я брал дамп регистров и отправлял его в usart. После чего мк висел в while 1.
интересно, расскажи,  как делал дамп всех регистров
источник

V

Vadimatorik in Deus Volt!
На сайте freertos есть обработчик хардоэфолта.
источник

V

Vadimatorik in Deus Volt!
Копипастил его и все. Чтобы не писать самому по документации.
источник

V

Vadimatorik in Deus Volt!
Так у меня было четкое место, где падало. Как правило, сметь происходила где-то в библиотечной функции...
источник

V

Vadimatorik in Deus Volt!
Или по nullptr.
источник

E

Evgen in Deus Volt!
Vadimatorik
На сайте freertos есть обработчик хардоэфолта.
о, спасибо
посмотрю, что там есть
без ртос их обработчик работает?
источник

V

Vadimatorik in Deus Volt!
Там одна функция оторванная от ос. Просто копирует значения регистров в локальные переменные и все.
источник

V

Vadimatorik in Deus Volt!
/* The prototype shows it is a naked function - in effect this is just an
assembly function. */
static void HardFault_Handler( void ) __attribute__( ( naked ) );

/* The fault handler implementation calls a function called
prvGetRegistersFromStack(). */
static 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 prvGetRegistersFromStack    \n"
   );
}
источник

E

Evgen in Deus Volt!
Vadimatorik
Там одна функция оторванная от ос. Просто копирует значения регистров в локальные переменные и все.
спасибо
гляну
а то что-то никак не вкурю, какого у меня мрет на определённых частотах
источник

V

Vadimatorik in Deus Volt!
void prvGetRegistersFromStack( uint32_t *pulFaultStackAddress )
{
/* These are volatile to try and prevent the compiler/linker optimising them
away as the variables never actually get used.  If the debugger won't show the
values of the variables, make them global my moving their declaration outside
of this function. */
volatile uint32_t r0;
volatile uint32_t r1;
volatile uint32_t r2;
volatile uint32_t r3;
volatile uint32_t r12;
volatile uint32_t lr; /* Link register. */
volatile uint32_t pc; /* Program counter. */
volatile uint32_t psr;/* Program status register. */

   r0 = pulFaultStackAddress[ 0 ];
   r1 = pulFaultStackAddress[ 1 ];
   r2 = pulFaultStackAddress[ 2 ];
   r3 = pulFaultStackAddress[ 3 ];

   r12 = pulFaultStackAddress[ 4 ];
   lr = pulFaultStackAddress[ 5 ];
   pc = pulFaultStackAddress[ 6 ];
   psr = pulFaultStackAddress[ 7 ];

   /* When the following line is hit, the variables contain the register values. */
   for( ;; );
}
источник

V

Vadimatorik in Deus Volt!
источник

E

Evgen in Deus Volt!
спасибо
источник

В

Василий in Deus Volt!
Vadimatorik
Если включена задержка и предсказатель, может указывать не туда из-за конвейера.
Так, что-то я не очень уверен в этом. Есть пруфы ?
источник

V

Vadimatorik in Deus Volt!
Только личный опыт. Если столкнусь еще, то надо бы статью написать.
источник