16+
Среда
21 августа
Вход |Карта сайта |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

ARM-контроллеры

 
Новая темаПравила РегистрацияСтатистика Архив
Вернуться в конференциюТопик полностью
LightElf  (10.08.2019 14:28 - 10.08.2019 14:31) , в ответ на Началось все с того, что поставили в надежность на испытания, там и заметили сброс по WDT, потом его отключили для поиска петли. Выяснилось, что "на столе" виснет, но значительно реже. Вроде бы аппаратная природа зависона, но дальнейшее автор: Make_Pic
Ну тады надо начать с того, что именно у вас прописано в вектора исключений и в неиспользуемые вектора прерываний. Туда часто впихивают что-то типа  
void default_isr(void)
{
    for (;;);
}
Вот туда программа влетает и крутится до срабатывания WDT. Что, в общем, в плане поиска проблемы нисколечко не помогает. Подобный вариант заметно лучше:
#pragma pack(push,1)
// кадр стека, создаваемый исключением
typedef struct fault_frame_s
{
    uint32_t   stacked_R0;
    uint32_t   stacked_R1;
    uint32_t   stacked_R2;
    uint32_t   stacked_R3;
    uint32_t   stacked_R12;
    uint32_t   stacked_LR;
    uint32_t   stacked_PC;
    uint32_t   stacked_xPSR;
} fault_frame_t;
#pragma pack(pop)

// кадр исключения (для отладки)
__no_init __root fault_frame_t fault_frame;
__no_init __root uint32_t      fault_icsr;
__no_init __root uint32_t      fault_flag;

void default_isr(void)                        
{                                             
    if (__get_CONTROL() & 2)
    {
        memcpy(&fault_frame, __get_PSP(), sizeof(fault_frame));
    }
    else
    {
        memcpy(&fault_frame, __get_MSP(), sizeof(fault_frame));    
    }   
    fault_icsr = SCB->ICSR;
    fault_flag = 0xdeadbeaf;
    __DSB();
    SCB->AIRCR = 0x05FA0004;
    while(1)                                  
    {                                         
    }                                         
}                                             
При старте проверяем fault_flag на предмет магического значения. Если присутствует - сохраняем во флеше fault_frame и fault_icsr. Обнуляем fault_flag. Дальше развиваем по вкусу.
 [x][x][x][x][x][x] [x][x][x][x][x][x][x][x]

Тема выделяется по переводу строки или автоматом

 

Имя


Регистрация позволит вам редактировать и перемещать ваши сообщения и прикреплять к ним файлы.
 
Символы: á é ó ú ý « »
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7527 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXIX