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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> stm32f4discovery виснет раз в неделю
Сергей Борщ
сообщение Oct 2 2013, 19:47
Сообщение #61


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (сарматъ @ Oct 2 2013, 20:41) *
вроде работает но как то странно halt происходит на одном и том же месте подозрительно
Надо бы подключить gdb и посмотреть. Может это Idle task из одного пустого цикла.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 2 2013, 19:52
Сообщение #62


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

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



да я завтра на вторую платку просто со светодиодами попробую там помню старая версия openocd там точно разные адреса выдавала

а тут я посмотрел память сохраняет переменные нормально

да адреса остановки меняются
CODE
> halt
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x080004e0 msp: 0x2001bfd0
> resume
> halt
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x080004e4 msp: 0x2001bfd0
> resume
> halt
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x0800051c msp: 0x2001bfd0
> resume
> halt
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x08000506 msp: 0x2001bfd0


Сергей, а когда эклипсом вы подсоединяетесь на лету, в эклипсе становится возможно устанавливать точки останова?
у меня он подсоединяется но толку от него ноль он не может производить отладку - не может установить точки останова(


о, получилось, чтоб нормально подцепиться к работающей плате надо вначале телнетом поключиться к openocd и дать команду halt, потом можно уже подключаться эклипсом и он в этом случае может производить отладку...

CODE
asm volatile (
"TST LR, #0x4 \n" // Test EXC_RETURN number in LR bit 2"
"ITTEE EQ \n" // if zero (equal) then
"MRSEQ R4, MSP \n" // Main Stack was used, put MSP in R0
"LDREQ R0,[R4,#24] \n" // Get stacked PC from stack
"MRSNE R4, PSP \n" // else, Process Stack was used, put PSP in R0
"LDRNE R0,[R4,#24] \n" // Get stacked PC from stack
"MRS R1, MSP \n"
"MRS R2, PSP \n"
"MOV R3, LR \n"
"deadend1: \n"
"B deadend1 \n"// ; Infinite loop
:
:
:
);


в общем поставил в обработчик исключения такой код, сижу жду когда зависнет

Сообщение отредактировал сарматъ - Oct 3 2013, 16:16
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 10 2013, 05:40
Сообщение #63


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

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



почти неделю работает без зависаний

возможно что причина была в маленьких задержках при чтении флеш было заменено FLASH_ACR_LATENCY_5WS на FLASH_ACR_LATENCY_6WS, частота 168, напряжение питания 2,85

по мануалу не очень понимаю какую задержку надо ставить для этого случая, чисто формально 5вс, но вроде как мои условия - почти граничные для этой задержки, возможно чуть поползло напряжение и куку из флеша читается шлак при попытке ухода в обработчик исключения ошибки то же, как результат блокировка контроллера, хотя повторю это только гипотеза, но в связи с нею вопросы:

1. перемещение векторов прерывания и обработчиков исключений ошибок в озу стабильность системы увеличится?

2. кто либо пытался восстанавливать работоспособность системы из обработчиков исключений ошибок кроме как полным сбросом системы? если восстанавливали поделитесь пожалуйста опытом
Go to the top of the page
 
+Quote Post
adnega
сообщение Oct 10 2013, 07:07
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(сарматъ @ Oct 10 2013, 09:40) *
2. кто либо пытался восстанавливать работоспособность системы из обработчиков исключений ошибок кроме как полным сбросом системы? если восстанавливали поделитесь пожалуйста опытом

По-моему, в режиме Debug исключительные ситуации нужны для отлова багов, в режиме Release - для перезагрузки системы.
Чисто формально я делал один раз эмулятор непрерывной батарееной памяти с использванием MPU.
Т.е. создал некий регион памяти (якобы сужествующей), при доступе к которой возникало исключение.
Анализируя причины усключения (вплоть до ASM-команд), подменял данными из невыровненной батареечной памяти.
Потом отказался от этой затеи.
В этом случае я был готов к исключительной ситуации и ждал ее, знал причины возникновения исключения.
В работающей системе восстановить сбой по-моему не реально (выше я описал вроде бы тривиальный механизм,
но даже его обработка вызывает много вопросов) - главное побыстрее все важное сохранить, все силовое правильно
отключить - и бегом в перезагрузку.
Go to the top of the page
 
+Quote Post
Flexz
сообщение Oct 10 2013, 08:01
Сообщение #65


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Цитата(сарматъ @ Oct 10 2013, 09:40) *
возможно что причина была в маленьких задержках при чтении флеш было заменено FLASH_ACR_LATENCY_5WS на FLASH_ACR_LATENCY_6WS, частота 168, напряжение питания 2,85

по мануалу не очень понимаю какую задержку надо ставить для этого случая, чисто формально 5вс, но вроде как мои условия - почти граничные для этой задержки, возможно чуть поползло напряжение и куку из флеша читается шлак при попытке ухода в обработчик исключения ошибки то же, как результат блокировка контроллера, хотя повторю это только гипотеза, но в связи с нею вопросы:

Из личного опыта, при тех же 3.3В 168Мгц процессор успешно работает на 3WS, на неделю, конечно, не оставлял, но несколько часов - вполне держит. Так же все процессоры, которые пробовал - разгонялись до 250МГц при 7WS, отдельные экземпляры гнались и выше. Так что параметры задержек в доках даны с запасом. Хотя помониторить питание, конечно, стоит.

Если дело действительно в просадке питания, то не забываем, что в ОЗУ нужно располагать не только сами вектора, но и всю таблицу прерываний.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 11 2013, 05:09
Сообщение #66


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

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



Цитата(adnega @ Oct 10 2013, 11:07) *
главное побыстрее все важное сохранить, все силовое правильно
отключить - и бегом в перезагрузку.


у вас я так понимаю должна быть большая статистика по отказам ваших изделий, поделитесь будьте любезны информацией изза чего возникают отказы по вашему мнению? какие типовые причины? если вы что то сохраняете то видимо память озу хранит актуальные неповрежденные данные? если вы корректно все отключаете то порты ввода вывода тоже работают? периферию надо ли перезагружать если она по видимому тоже функционирует?

Цитата(Flexz @ Oct 10 2013, 12:01) *
Из личного опыта, при тех же 3.3В 168Мгц процессор успешно работает на 3WS

видимо все же это процесс веротяностный - за пару часов нормально работает за неделю вылетает
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Oct 18 2013, 08:55
Сообщение #67


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

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



платка опять повисла, точнее теперь уже ясно что плата не виснет и скорее всего задержки чтения флеш ни при чем - где то в алгоритмах причина, чуть позже переползу в соотв тему, тут пишу для того чтобы сказать

1 плата сама ни при чем она работает без зависаний, исключения ошибок не генерируются
2 метод подключения к плате отладчиком на лету предложенный Сергеем Борщем крайне полезен всем рекомендую

спасибо всем принявшим участие в обсуждении

Сообщение отредактировал сарматъ - Oct 18 2013, 08:56
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 18 2013, 09:46
Сообщение #68


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (сарматъ @ Oct 18 2013, 11:55) *
2 метод подключения к плате отладчиком на лету
Кстати, патч hla_target.c из сообщения №58 уже внесен в исходники openocd. Первый пока не собрался послать.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 18 2013, 11:25
Сообщение #69


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Сергей Борщ @ Sep 26 2013, 13:51) *
Код
typedef struct
{
    void const * LR;
    uint32_t    PSR;
    void const * Return_address;
    uint32_t    R3;
    uint32_t    R2;
    uint32_t    R1;
    uint32_t    R0;
} stack_frame;

ИМХО у вас ошибка (поля структуры в обратном порядке перечислены и не хватает PC):
http://infocenter.arm.com/help/index.jsp?t...a/Babefdjc.html
Обратите внимание на подпись к рисунку: Decreasing memory address
У меня так сделано, правда я ещё ни разу это не применял в бою.
Код
typedef struct
{
    uint32_t r0;
    uint32_t r1;
    uint32_t r2;
    uint32_t r3;
    uint32_t r12;
    uint32_t lr;   // LR (R14)
    uint32_t pc;
    uint32_t xpsr;
} stack_frame_t;
Ещё наверное про -mapcs-frame для gcc стоит вспомнить.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 18 2013, 12:32
Сообщение #70


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(сарматъ @ Oct 2 2013, 23:52) *
Код
    asm volatile (
1            "TST LR, #0x4           \n" // Test EXC_RETURN number in LR bit 2"
2            "ITTEE EQ               \n" // if zero (equal) then
3            "MRSEQ R4, MSP          \n" // Main Stack was used, put MSP in R0
4            "LDREQ R0,[R4,#24]      \n" // Get stacked PC from stack
5            "MRSNE R4, PSP          \n" // else, Process Stack was used, put PSP in R0
6            "LDRNE R0,[R4,#24]      \n" // Get stacked PC from stack
7            "MRS R1, MSP              \n"
8            "MRS R2, PSP            \n"
9            "MOV R3, LR                \n"
10            "deadend1:                \n"
11            "B deadend1                \n"//; Infinite loop
12            :
13            :
14            :
            );
в общем поставил в обработчик исключения такой код, сижу жду когда зависнет
Очень странный код:
Cточки 4 и 6 можно заменить одной и вынести за условие.
Строчки 7 и 8 не нужны т.к. в R4 и так будет либо MSP либо PSP.
Строчки 10 и 11 можно заменит на "b ."
Строчки 12-14 тоже не нужны.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ig_z
сообщение Oct 18 2013, 13:41
Сообщение #71


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



Я использую такой обработчик Hard_Fault_Handler для вывода в уарт.

CODE
void Hard_Fault_Handler(uint32_t stacked_reg[])
{
DBGS_STR("In HardFault_Handler:");
DBGS_MSG("SCB->HFSR = 0x%08X", SCB->HFSR);

if ((SCB->HFSR & (1 << 30)) != 0)
{
DBGS_STR(" Forced Hard Fault");
DBGS_MSG(" SCB->CFSR= 0x%08X", SCB->CFSR );
if((SCB->CFSR & 0xFFFF0000) != 0)
{
uint32_t CFSRValue = SCB->CFSR >> 16; // right shift to lsb
DBGS_STR(" Usage fault:");
if((CFSRValue & (1 << 9)) != 0) {
DBGS_STR(" Divide by zero");
}
if((CFSRValue & (1 << 8)) != 0) {
DBGS_STR(" Unaligned");
}
if((CFSRValue & (1 << 3)) != 0) {
DBGS_STR(" NOCP");
}
if((CFSRValue & (1 << 2)) != 0) {
DBGS_STR(" INVPC");
}
if((CFSRValue & (1 << 1)) != 0) {
DBGS_STR(" INVSTATE");
}
if((CFSRValue & (1 << 0)) != 0) {
DBGS_STR(" UNDEFINSTR");
}
}
}

DBGS_MSG("R0 = 0x%08X", stacked_reg[0]);
DBGS_MSG("R1 = 0x%08X", stacked_reg[1]);
DBGS_MSG("R2 = 0x%08X", stacked_reg[2]);
DBGS_MSG("R3 = 0x%08X", stacked_reg[3]);
DBGS_MSG("R12= 0x%08X", stacked_reg[4]);
DBGS_MSG("LR = 0x%08X", stacked_reg[5]);
DBGS_MSG("PC = 0x%08X", stacked_reg[6]);
DBGS_MSG("PSR= 0x%08X", stacked_reg[7]);

for(;;)
{
UART0_Put();
}
}

__asm void HardFault_Handler(void)
{
TST lr, #4 // Test for MSP or PSP
ITE EQ
MRSEQ r0, MSP
MRSNE r0, PSP
B __cpp(Hard_Fault_Handler)
}
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 18 2013, 13:41
Сообщение #72


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (demiurg_spb @ Oct 18 2013, 14:25) *
ИМХО у вас ошибка (поля структуры в обратном порядке перечислены и не хватает PC):
Пожалуй, насчет порядка я действительно ошибся. Причем сначала ошибся, потом начал исправлять (PSR и LR успел поменять) и меня, вероятно, отвелекли. PC в данном случае есть адрес, где произошло исключение, т.е я его обозвал Return_address. R12 я, действительно, забыл. Или на нем меня отвлекли и я Ctrl-x сделал, а Ctrl-v не успел.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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