|
stm32f4discovery виснет раз в неделю |
|
|
|
 |
Ответов
|
Oct 1 2013, 09:19
|
Частый гость
 
Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463

|
наваял код на asm для обработчика __attribute__((noreturn, naked)) void Default_Handler(void) проверил его работоспособность эмулируя в программе сбой стека вот таким вот образом Код asm volatile ( "LDR R1,=0x08008000 \n" "MSR MSP, R1 \n" : : : ); в терминале любуюсь на Код SP_0x20003858 MSP_0x08008000 PSP_0x20003858 LR_0xFFFFFFFF PC_0x08002660 CF_0x00040000 HF_0x00000000 DF_0x0000000A AF_0x00000000 MA_0xE000ED34 BA_0xE000ED38 убираю из программы эмуляцию сбоя, запускаю в работу, 4-ро суток макетка пашет как положено, на пятые сутки зависает, в терминале - тишина, как будто макетка просто в обморок упала и не дышит... есть какие то предположения?
Сообщение отредактировал IgorKossak - Oct 1 2013, 18:57
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Oct 1 2013, 12:22
|
Частый гость
 
Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463

|
CODE /* * main.c * * Created on: 01 окт. 2013 г. * Author: jura */
#include <stm32f4xx.h>
GPIO_InitTypeDef GPIO_InitStructure;
void Delay(__IO uint32_t nCount) { while(nCount--) { } }
int main(void) {
/* включаем тактирование порта D */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
/* конфигурируем выводы PD12, PD13, PD14 и PD15 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOD, &GPIO_InitStructure);
while (1) { /* зажигаем зеленый (PD12) */ GPIO_SetBits(GPIOD, GPIO_Pin_12);
/* Задержка */ Delay(0x3FFFFF);
/* зажигаем оранжевый (PD13) */ GPIO_SetBits(GPIOD, GPIO_Pin_13);
/* Задержка */ Delay(0x3FFFFF);
/* зажигаем красный (PD14) */ GPIO_SetBits(GPIOD, GPIO_Pin_14);
/* Задержка */ Delay(0x3FFFFF);
/* зажигаем синий (PD15) */ GPIO_SetBits(GPIOD, GPIO_Pin_15);
/* Задержка */ Delay(0x7FFFFF);
/* сбрасываем все 4-ре */ GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
/* Задержка */ Delay(0xFFFFFF); } }
залил вот, это любуюсь как моргают светодиодики, курю бамбук... Цитата(Сергей Борщ @ Oct 1 2013, 15:57)  Подключиться отладчиком "на лету" во время такого зависания и посмотреть, куда ее занесло. Предварительно потренировавшись подключаться к независшей плате. Возможно проблемы со стеком не дают работать вашему обработчику.
У вас программа с ОС? Вставьте в idle task махание ногой. Возможно это не зависание, а взаимная блокировка (deadlock) и ваша программа продолжает крутиться в idle task пока остальные процессы ждут заблокированные друг другом ресурсы. И в этом случае отладчик поможет найти кто кого и откуда заблокировал, без него будет трудно. а как подключаться к независшей? это без эклипса? да программка с smcrtos вообще у меня в паралельной задачке просто моргает светодиод никого не ожидая вот так вот CODE OS_PROCESS void TProc4::exec() {//init_stack_frame(); for(;;) { for(;;) {res_table.uregs[104]=Proc4.stack_slack(); GreenLED::On(); sleep(50); GreenLED::Off(); sleep(950); ; } } } соотв когда зависает светодиод не моргает про подключение на лету: это телнетом на openocd наехать и все регистры и память можно просмотреть? круто... а я себе голову морочил с обработчиками и уартом Сергей, вопрос: а можно как то не телнетом а сразу эклипсом цепляться к работающей плате? там какие то заклинания должны стоять на вкладочке железной отладки?
Сообщение отредактировал сарматъ - Oct 1 2013, 13:40
|
|
|
|
|
Oct 1 2013, 21:10
|

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

|
QUOTE (сарматъ @ Oct 1 2013, 14:22)  Сергей, вопрос: а можно как то не телнетом а сразу эклипсом цепляться к работающей плате? там какие то заклинания должны стоять на вкладочке железной отладки? Да, можно. Но нужно исправить две ошибки в openocd и пересобрать его. В эклипсе на вкладке отладчика "Startup" снять галочки "Reset and Delay", Load Image, можно также снять "Halt". Из скрипта openocd (если таковой используете) убрать команду сброса и команды настройки линии сброса, если они там есть. Для надежности отключить линию сброса от отладчика к плате (я ее вообще не испольщую). Вот исправления в openocd: CODE diff --git a/src/jtag/hla/hla_interface.c b/src/jtag/hla/hla_interface.c index 0176a48..99d0229 100644 --- a/src/jtag/hla/hla_interface.c +++ b/src/jtag/hla/hla_interface.c @@ -137,6 +137,11 @@ int hl_interface_init_reset(void) jtag_add_reset(0, 1); hl_if.layout->api->assert_srst(hl_if.fd, 0); } + else + { + jtag_add_reset(0, 0); + hl_if.layout->api->assert_srst(hl_if.fd, 1); + } return ERROR_OK; } diff --git a/src/target/hla_target.c b/src/target/hla_target.c index a65ba80..cd7a127 100644 --- a/src/target/hla_target.c +++ b/src/target/hla_target.c @@ -484,6 +484,8 @@ static int adapter_poll(struct target *target) LOG_DEBUG("halted: PC: 0x%08x", buf_get_u32(armv7m->arm.pc->value, 0, 32)); } + else + target->state = state; return ERROR_OK; } По прводу первого исправления я не уверен, что его надо вносить именно сюда, еще не разобрался в исходниках. Тут он исправляет только stlink(-v2), а вот как обстоят дела у других отладчиков я не в курсе. Возможно надо jtag_add_reset() вставить в такое место, чтобы оно вызывалось для любого отладчика. Собираюсь попросить совета по этому поводу в списке рассылки, да времени нет сесть и написать туда длинное письмо с объяснением. Если кому-то интересно, объясню смысл этих правок здесь.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
сарматъ stm32f4discovery виснет раз в неделю Sep 10 2013, 11:28 Lotor С такой постановкой вопроса ждите экстрасенсов. В ... Sep 10 2013, 12:10 сарматъ что, зависания такие что ресетом не поднять - обыч... Sep 10 2013, 12:46 kolobok0 Цитата(сарматъ @ Sep 10 2013, 15:28) ..со... Sep 10 2013, 13:49 сарматъ да видимо придется вторую макетку собирать чтоб ее... Sep 10 2013, 13:55 adnega Цитата(сарматъ @ Sep 10 2013, 17:55) да в... Sep 10 2013, 14:05 сарматъ да снимаю питание и подключаю заново Sep 10 2013, 14:11 adnega Цитата(сарматъ @ Sep 10 2013, 18:11) да с... Sep 10 2013, 14:25 сарматъ относительно повторяемости два раза я откладывал р... Sep 10 2013, 14:45 adnega Цитата(сарматъ @ Sep 10 2013, 18:45) отно... Sep 10 2013, 16:45  сарматъ Цитата(adnega @ Sep 10 2013, 20:45) Обрат... Sep 17 2013, 04:41   adnega Цитата(сарматъ @ Sep 17 2013, 08:41) а чт... Sep 17 2013, 06:16 AHTOXA Цитата(сарматъ @ Sep 10 2013, 17:28) добр... Sep 10 2013, 18:21 сарматъ аднега, спасибо буду думать, посмотрел сейчас на п... Sep 10 2013, 18:24 KnightIgor Цитата(сарматъ @ Sep 10 2013, 19:24) адне... Sep 11 2013, 20:07 hd44780 Читал-читал, так и не нашёл, от чего питается плат... Sep 12 2013, 08:07 сарматъ "питание по юсби по которому произвожу отладк... Sep 12 2013, 09:42 сарматъ в очередной раз упал зверек, но поднялся от ресета... Sep 16 2013, 18:33 vlad_new Цитата(сарматъ @ Sep 16 2013, 22:33) в оч... Sep 16 2013, 22:30 Golikov A. протоколирование только.
попадая в секцию кидает ... Sep 16 2013, 19:26 DASM Да, тут только лог.Лучше по юарт и очень простой, ... Sep 17 2013, 04:05 сарматъ пока платка тестится собрал вторую макетку подключ... Sep 18 2013, 11:30 adnega Цитата(сарматъ @ Sep 18 2013, 15:30) кто ... Sep 18 2013, 12:06 сарматъ да tcpdump говорит что они имеют одинаковый мак 32... Sep 18 2013, 12:29 Golikov A. может быть еще путаница с кешем арп запросов.
а е... Sep 18 2013, 13:06 сарматъ широковещательный вроде только всеединички? Sep 18 2013, 13:08 Golikov A. нет там вроде 1 в старшем бите старшего байта, или... Sep 18 2013, 13:11 сарматъ а механизмом xFSR регистров кто нибудь пользовался... Sep 24 2013, 08:49 mad_mouse посмотрите переполнение каких либо переменных. есл... Sep 24 2013, 11:29 сарматъ все что ни делал не помогло все равно виснет, буду... Sep 24 2013, 18:28 adnega Попробуйте printf ("aaa\r\n"); Sep 24 2013, 19:07 сарматъ о, спасибо, заработало
а вы с xFSR не сталкивалис... Sep 24 2013, 19:13 adnega Цитата(сарматъ @ Sep 24 2013, 23:13) если... Sep 24 2013, 21:20 сарматъ да как раз оттуда эти регистры откопал Sep 24 2013, 21:26 adnega Цитата(сарматъ @ Sep 25 2013, 01:26) да к... Sep 24 2013, 21:36 сарматъ мне хотя бы место и причину найти для начала
а ст... Sep 25 2013, 05:46 Golikov A. думаю 95% случаев - переполнение.
остальное это об... Sep 25 2013, 05:51 сарматъ а ведь если стек рухнул printf работать не будет в... Sep 25 2013, 10:09 Golikov A. принтф - это вообще жесткая функция, она же с деко... Sep 25 2013, 10:19 сарматъ да наверное переделаю на просто уарт
а кстати поче... Sep 25 2013, 10:40 Сергей Борщ QUOTE (сарматъ @ Sep 25 2013, 12:40) разв... Sep 25 2013, 12:08 сарматъ что то мне казалось что я видел обращение к регист... Sep 25 2013, 12:58 Golikov A. в лпц есть макросы обращения к регистрам, думаю в ... Sep 25 2013, 13:31 сарматъ счетчик в стеке спрятан по адресу sp-24
а лпц это ... Sep 25 2013, 13:33 mdmitry Цитата(сарматъ @ Sep 25 2013, 17:33) а лп... Sep 25 2013, 15:32  Golikov A. Цитата(mdmitry @ Sep 25 2013, 19:32) LPC ... Sep 25 2013, 17:30   сарматъ можно ли делать инлайн вставками вот так
CODEvoid... Sep 26 2013, 08:05    Сергей Борщ QUOTE (сарматъ @ Sep 26 2013, 10:05) можн... Sep 26 2013, 09:51     demiurg_spb Цитата(Сергей Борщ @ Sep 26 2013, 13:51) ... Oct 18 2013, 11:25      Сергей Борщ QUOTE (demiurg_spb @ Oct 18 2013, 14:25) ... Oct 18 2013, 13:41 Сергей Борщ QUOTE (сарматъ @ Sep 25 2013, 14:58) а PS... Sep 25 2013, 16:08 сарматъ ясно
то есть надо в самом начале обработчика сохр... Sep 25 2013, 16:36 сарматъ спасибо буду пробовать Sep 26 2013, 09:53 AHTOXA Цитата(сарматъ @ Oct 1 2013, 15:19) есть ... Oct 1 2013, 09:50 vlad_new Быпа у кого то подобная проблемма. Оказалось, что ... Oct 1 2013, 18:39 A. Fig Lee Можно в бесплатном IAR цеплятся JLinkом.
Там и опц... Oct 1 2013, 20:54 сарматъ спасибо, сегодня попробую пересобрать, как раз нов... Oct 2 2013, 06:30 сарматъ пропатчил, собрал, единственное конфигурировал так... Oct 2 2013, 18:41 Сергей Борщ QUOTE (сарматъ @ Oct 2 2013, 20:41) вроде... Oct 2 2013, 19:47 сарматъ да я завтра на вторую платку просто со светодиодам... Oct 2 2013, 19:52 demiurg_spb Цитата(сарматъ @ Oct 2 2013, 23:52) Код a... Oct 18 2013, 12:32  ig_z Я использую такой обработчик Hard_Fault_Handler дл... Oct 18 2013, 13:41 сарматъ почти неделю работает без зависаний
возможно что ... Oct 10 2013, 05:40 adnega Цитата(сарматъ @ Oct 10 2013, 09:40) 2. к... Oct 10 2013, 07:07  сарматъ Цитата(adnega @ Oct 10 2013, 11:07) главн... Oct 11 2013, 05:09 Flexz Цитата(сарматъ @ Oct 10 2013, 09:40) возм... Oct 10 2013, 08:01 сарматъ платка опять повисла, точнее теперь уже ясно что п... Oct 18 2013, 08:55 Сергей Борщ QUOTE (сарматъ @ Oct 18 2013, 11:55) 2 ме... Oct 18 2013, 09:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|