|
Как поимать "баг" в STM32 на скорости 72 MHz?, методы поиска и устранения спонтанных и редких сбоев в работе МК |
|
|
|
Apr 24 2018, 12:09
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Как поймать "Баг" на скорости 72 МГц ? (тема для обсуждения и поиска решения) Задача: Есть условное устройство на базе STM32F103C8 (Cortex-3M) которое работает на максимально разрешенной частоте в режиме максимальной нагрузки, то есть активно работает ядро АРМ, периферия, порты ввода-вывода, DMA, таймеры. В процессе длительной работы (неделя) систематически происходит сбой. Зацикливание, спонтанный неконтролируемый сброс МК и т.д. Всё это возможно по ряду причин: Сбой по питанию, переполнение стека или "кучи", кривой арбитраж шин или прерываний, неисправность МК. Причин масса. Вопрос: Как поймать сбой происходящий в периоде довольно длительного отрезка времени? У простого разработчика разумеется нет тех аппаратных возможностей которыми оперируют крупные лаборатории и производители серийных устройств, нет возможности обвешать "девайс" супервайзерами, логическими анализаторами и неделями круглосуточно гонять устройство, писать Log-и, а потом отрядом в 50 человек анализировать их. Стало быть нам придётся думать самим. Что у нас есть? Есть отладочная система CoreSight. Есть две "собаки" WatchDog таймера. Внутренний, зависимый от периферии и независимый автономный. Внутренний оконный WWDT, перед командой Сброса МК может сгенерировать прерывание. Данная опция специально разработана инженерами из STM для того, чтобы иметь возможность сделать дамп данных (память, состояние регистров, состояние периферии и т.д) перед сбросом системы МК. Что может быть проще? Написали в обработчике прерывания от "собаки" процедуру инициализации SPI,UART или I2C и выплюнули в внешнюю Флэш-память дамп всей оперативной памяти + состояние регистров. Далее считал с флэши и сиди анализируй - где споткнулся или завис МК. Бинго ! Это я описал самое очевидное и "тепличное" развитие событий. ТАК бывает... Но редко...  А если контроллер прерываний "упал" или зациклился в одной точке? Если вообще ядро АРМ "упало" или зациклилось? А может вообще - стек налетел на "кучу" и управляющая программа рандомно пошла вразнос и остановила генераторы шин или периферии? В данном случае "собака" WWDT бессильна. Она мертва. Есть конечно ещё независимый IWWDT - но он не генерит прерываний - тупо сбрасывает контроллер. Есть отладочное CoreSight - до которого тоже ещё надо уметь достучаться. Так что Давайте высказываться, Уважаемые участники сообщества. У кого какие есть на это мысли и решения?
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
 |
Ответов
|
Apr 24 2018, 12:55
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(Kabdim @ Apr 24 2018, 15:25)  Постараться делить неопределенность на малые куски. Есть такая мысль. Решил слизать с промышленных контроллеров. Там один 8-ми битный порт отдают на real-time bug catcher. его подключают к прозрачному регистру-защёлке типа 74HC573 а выходы на 7 светодиодов. 7-бит "красный", 6-й "зелёный", остальные "жёлтые" Суть такая: Присваиваются номера. Процедурам на вход и на выход и нее, и прерываниям на вход и на выход. Например: Процедура A (0x01 -IN, 0x02 - OUT) , Процедура B (0x03-IN, 0x04 - OUT)..... и т.д. Прерывание A (0x41 -IN, 0x42 - OUT) , Пррерывание B (0x43-IN, 0x44 - OUT)..... и т.д. При прирывании по WWDT перед сбросом в информационном байте устанавливается 7-й бит в 1, это чтобы после сброса при начальных установках не скинуло содержимое регимтра-защёлки подключенной к bug-catcher порту. Процедуры и прерывания пишут свои номера при входе и выходе в порт. Регистр-защёлка их запоминает. В случае ступора или сброса, на светодиодах видно - где споткнулся МК. Цитата А эта темпа предметная или пофлудить об абстракте? 50/50...  Есть проект "маршрутизатор-переводчик" промышленный. По 485-му "мастер" разговаривает с 232-ми "слейвами". Протоколы разные. они известны, но изменить их нельзя. Данный девайс получает пакеты, переводит их в нужный формат и отдаёт "слейвам", получает от них ответ, опять переводит в другой протокол и отправляет "мастеру". Вот такая штука из "говна и палок", работает... Но с глюками. Спонтанными. Может долго работать без сбоев. Но иногда частит. Суть в том, что глюки начинают вылазить при оживленном траффике по сети, если запросов-ответов мало может неделями работать без проблем. А вообще - то, мне тема интересная. Я большой любитель ловли "багов", и пофлудить не прочь. В любом случае это - ОПЫТ.
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Apr 28 2018, 17:43
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(manul78 @ Apr 24 2018, 17:55)  Суть в том, что глюки начинают вылазить при оживленном траффике по сети, если запросов-ответов мало может неделями работать без проблем. нувыблиндаёте!!! Вы же нашли, можно сказать, багу и продолжаете гадать на кофейной гуще. Прибор на стол и эмулируем не то что оживленный трафик, перегруженный трафик. Во первых бага быстро появиться, во вторых вы обязаны были разработчик обязан был на столе проверить, что будет, если трафик будет перегружен.
|
|
|
|
|
Apr 29 2018, 06:50
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(juvf @ Apr 28 2018, 20:43)  Прибор на стол и эмулируем не то что оживленный трафик, перегруженный трафик. Во первых бага быстро появиться, во вторых вы обязаны были разработчик обязан был на столе проверить, что будет, если трафик будет перегружен. Хотя звучит умно, но по факту это немного глупо. На кой нагружать трафиком если известно, что дивайс или система наверняка заглохнет при превышении определенного уровня? Что вам даст если вы зафиксируйте несколько раз этот уровень? Ошибка конечно проявится, но это будет не та ошибка! А чтобы была та, нужно именно тот трафик смоделировать. А если вы знаете именно тот трафик, то знаете и ошибку. Так что "стресс-тест" это просто семантический плеоназм в данном случае.
|
|
|
|
|
Apr 29 2018, 09:54
|
Знающий
   
Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450

|
Цитата(AlexandrY @ Apr 29 2018, 10:50)  На кой нагружать трафиком если известно, что дивайс или система наверняка заглохнет при превышении определенного уровня? Дивайс должен уйти во вполне определенное состояние при превышении определенного уровня и выйти из него в рабочее после нормализации обстановки. Например, пропускать только те пакеты, на которые хватает производительности канала, а в слове состояния выставить признак проблем с подключением. Или при превышении частоты ошибок прекратить общение до паузы в сигнале или появлении корректного сообщения. Почитайте описание протокола CAN, например.
|
|
|
|
|
Apr 29 2018, 17:20
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(novikovfb @ Apr 29 2018, 12:54)  Дивайс должен уйти во вполне определенное состояние при превышении определенного уровня и выйти из него в рабочее после нормализации обстановки. В CAN-е это аппаратно сделано, поэтому я только CAN везде и применяю. И да логируется у меня достаточно счетчиков относящихся к работе CAN. Но если я сделаю некий "стресс-тест" с хаотичными командами, то система подвиснет, лог будет переполнен, даже могут возникнуть конструктивные повреждения, сработает WDT И че я выясню в результате? Попробуйте "стресс-тест" провести где нить в сети промышленных логических контроллеров. Тоже получите катастрофу. Опять же применив некую симуляцию запредельного трафика можно просто ввести устройство в ступор и при этом вообще ничего реально тестироваться не будет. Т.е. сделать грамотное нагрузочное тестирование очень сложно во первых, а во вторых оно не для выявления ошибок, а скорее для тестирования риалтайма систем.
|
|
|
|
|
Apr 30 2018, 05:45
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AlexandrY @ Apr 29 2018, 20:20)  Опять же применив некую симуляцию запредельного трафика можно просто ввести устройство в ступор и при этом вообще ничего реально тестироваться не будет. Это только говорит о том, что данное устройство неправильно спроектировано. Никакая комбинация входных данных (валидных или просто мусора) с любой частотой повторения на внешних интерфейсах не должна вводить устройство в состояние ступора либо любое другое нерабочее состояние. Если это не так - это кривое устройство и надо переделывать. Как то так. Всегда следую данному правилу. Да и по внутренним интерфейсам устройства - например если у меня есть SPI-FLASH в устройстве, но обращение к ней идёт не часто, то для теста (обнаружения редко проявляющихся непериодических сбоев как у ТС), я нагружаю данный интерфейс транзакциями чтения/записи по самое нехочу. Например - создаю несколько задач ОС, которые параллельно обращаются к этому интерфейсу со случайными запросами чтения/записи случайной длины и адресом, так чтобы загрузка CPU при такой работе была близка к максимальной. Гоняю этот тест несколько часов с общим объёмом траффика во много ГБ. И одновременно с этим устройство должно продолжать выполнять свои штатные функции. Вот если за время такого теста сбоев не было - значит всё ок. Иначе - разбираюсь, пока не устраню причину.
|
|
|
|
|
Apr 30 2018, 17:59
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(jcxz @ Apr 30 2018, 10:45)  Это только говорит о том, что данное устройство неправильно спроектировано. Никакая комбинация входных данных (валидных или просто мусора) с любой частотой повторения на внешних интерфейсах не должна вводить устройство в состояние ступора либо любое другое нерабочее состояние. Если это не так - это кривое устройство и надо переделывать. ППКС Цитата В CAN-е это аппаратно сделано нет там этого аппаратно. там транспортный уровень аппаратный, а протокольного нет. Например преобразователь протоколов CAN-USART (кан в любой серийный... Modbus, Гранит, МЭК-101, Лисна-Ч....) По кану от датчика приходят данные, их надо передать по МЭК-101 на OPC-сервер. Раз в секунду датчик передает пакет, преобразователь преобразовывает и передает дальше. Если пакеты от датчика пойдут 100 раз в сек.... - преобразователь может не успеть их обрабатывать... Если пакеты от датчика буферезировать, то может переполниться буфер. Ни какой аппаратный кан не поможет. Цитата Попробуйте "стресс-тест" провести где нить в сети промышленных логических контроллеров. Тоже получите катастрофу. Делаем. Нет катастрофы. Например эл.счетчик. Запрос-ответ, запрос-ответ. Начинаем часто запрашивать - тот отвечает или пропускает запросы, но не виснет. Можно послать запрос и не дожидаясь ответа послать ещё запрос - счетчик не должен зависнуть. Цитата сделать грамотное нагрузочное тестирование очень сложно Легко. На китах типа дискавери, на китах ПЛИСовых, на ПК. Цитата во вторых оно не для выявления ошибок Если система легла - то в ней ошибка. Не важно от чего она зависла, от стрес-теста, от действия оператора или от положения звёзд на небе. Как мою плату положет тестировщик - мне не важно. Мне важно, чтобы я мог повторить эти действия и плата легла. Если стрестест её положит за минуту - это замечательно. Попробую под дебагом положить плату, буду смотреть почему лежит, буду смотреть стек вызовов. Либо без дебага, но с дебажними вставками и журналированием. Вобщем если раз в минуту я могу положить плату, то бага находиться быстро. ps Цитата сработает WDT в один прекрасный момент отказался от WDT. Эта штука как минимум не нужна, как максимум опасна. Если плата зависла - в программе есть ошибка, нужно её устранять. WDT пересбросит плату и ни кто не узнает о проблеме, пока гильотина не отрежет руку или не упадет самолёт не случиться непоправимое. Если плата работает круглые сутки, годами, без зависаний и без WDT - для меня это показатель, что ошибок нет.
|
|
|
|
|
May 1 2018, 11:25
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(juvf @ Apr 30 2018, 20:59)  в один прекрасный момент отказался от WDT. Эта штука как минимум не нужна, как максимум опасна. Если плата зависла - в программе есть ошибка, нужно её устранять. Ну вот и зря. Кроме программных ошибок, от которых кстати собака не всегда "спасает", есть еще и аппаратные проблемы, слишком плавное нарастание питания, дребезг в цепях питания и т.п. с которыми собака хорошо справляется, поэтому никогда от нее не отказываюсь, а программные баги отлавливаю логированием в критических к зависаниям функциях...
|
|
|
|
Сообщений в этой теме
manul78 Как поимать "баг" в STM32 на скорости 72 MHz? Apr 24 2018, 12:09   jcxz Цитата(juvf @ Apr 28 2018, 20:43) Прибор ... Apr 29 2018, 02:35    jcxz Цитата(AlexandrY @ Apr 29 2018, 09:50) Хо... Apr 29 2018, 08:51     jcxz Цитата(novikovfb @ Apr 29 2018, 12:54) Ди... Apr 29 2018, 10:04       AlexandrY Цитата(jcxz @ Apr 30 2018, 08:45) наприме... Apr 30 2018, 08:14        jcxz Цитата(AlexandrY @ Apr 30 2018, 11:14) Ка... Apr 30 2018, 08:26         AlexandrY Цитата(jcxz @ Apr 30 2018, 11:26) Вы мой ... Apr 30 2018, 10:49        AlexandrY Цитата(juvf @ Apr 30 2018, 20:59) в один ... Apr 30 2018, 19:56         juvf Цитата(AlexandrY @ May 1 2018, 00:56) Есл... May 1 2018, 04:27          haker_fox QUOTE (juvf @ May 1 2018, 12:27) готов по... May 1 2018, 05:23           AlexandrY Цитата(haker_fox @ May 1 2018, 08:23) Рас... May 1 2018, 19:05            mantech Цитата(AlexandrY @ May 1 2018, 22:05) В м... May 1 2018, 19:25             one_eight_seven Цитата(mantech @ May 1 2018, 22:25) Это д... May 1 2018, 20:54        haker_fox QUOTE (juvf @ May 1 2018, 01:59) Эта штук... May 1 2018, 03:51         haker_fox QUOTE (mantech @ May 1 2018, 19:25) Ну во... May 1 2018, 14:37          mantech Цитата(haker_fox @ May 1 2018, 17:37) Инт... May 1 2018, 17:50         juvf Цитата(mantech @ May 1 2018, 16:25) ... д... May 2 2018, 17:50          mantech Цитата(juvf @ May 2 2018, 20:50) какой уж... May 2 2018, 17:59    juvf Цитата(AlexandrY @ Apr 29 2018, 11:50) На... Apr 29 2018, 14:28  KnightIgor Цитата(manul78 @ Apr 24 2018, 13:55) 50/5... Apr 30 2018, 15:17 Mareng Обычно помогало постепенное упрощения функционала ... Apr 24 2018, 12:25 AVI-crak Скорми проект бешеной лошади. Уверен что она найдё... Apr 24 2018, 12:29 iosifk Цитата(Mareng @ Apr 24 2018, 15:25) Обычн... Apr 24 2018, 12:33  manul78 Цитата(iosifk @ Apr 24 2018, 15:33) Есть ... Apr 24 2018, 19:46 HardEgor Цитата(manul78 @ Apr 24 2018, 19:09) Как ... Apr 24 2018, 12:36 manul78 Цитата(HardEgor @ Apr 24 2018, 15:36) Сде... Apr 24 2018, 12:58  jcxz Цитата(manul78 @ Apr 24 2018, 15:58) Глюк... Apr 24 2018, 13:03   manul78 Цитата(jcxz @ Apr 24 2018, 16:03) Внимате... Apr 24 2018, 13:19    iosifk Цитата(manul78 @ Apr 24 2018, 16:19) Это ... Apr 24 2018, 13:48    jcxz Цитата(manul78 @ Apr 24 2018, 16:19) Софт... Apr 24 2018, 15:40     manul78 Цитата(jcxz @ Apr 24 2018, 18:40) А какой... Apr 24 2018, 20:41      twix Цитата(manul78 @ Apr 24 2018, 20:41) Изви... Apr 25 2018, 03:31      AVI-crak Цитата(manul78 @ Apr 25 2018, 02:41) Так ... Apr 25 2018, 04:45      HardEgor Цитата(manul78 @ Apr 25 2018, 03:41) По п... Apr 25 2018, 05:14       AlexandrY Цитата(HardEgor @ Apr 25 2018, 08:14) Не ... Apr 25 2018, 05:47 jcxz Цитата(manul78 @ Apr 24 2018, 15:09) Как ... Apr 24 2018, 12:43 Kabdim При такой постановке - устроить флуд по каналам. С... Apr 24 2018, 12:57 AlanDrakes После перезапуска проверять состояние регистров пр... Apr 24 2018, 13:03 AlexandrY Цитата(manul78 @ Apr 24 2018, 15:09) Что ... Apr 24 2018, 13:39 Obam ЦитатаА может вообще - стек налетел на "кучу... Apr 24 2018, 14:25 -= Александр =- Гораздо проще и эффективнее не "скворечники... Apr 24 2018, 14:49 k155la3 Еслиб Вы поподробнее расписали что-есть-девайс, в ... Apr 24 2018, 15:43 twix Цитата(manul78 @ Apr 24 2018, 13:09) Как ... Apr 24 2018, 15:46 jcxz Цитата(twix @ Apr 24 2018, 18:46) 1. Пове... Apr 24 2018, 16:26  twix Цитата(jcxz @ Apr 24 2018, 17:26) Я вижу ... Apr 24 2018, 16:40   jcxz Цитата(twix @ Apr 24 2018, 19:40) А уж ва... Apr 24 2018, 18:05    AlexandrY Цитата(jcxz @ Apr 24 2018, 21:05) Вероятн... Apr 24 2018, 19:38    twix Цитата(jcxz @ Apr 24 2018, 19:05) 1) С че... Apr 24 2018, 19:52 amiller Кстати а сама постановка вопроса в теме предполага... Apr 25 2018, 06:51 jcxz Цитата(amiller @ Apr 25 2018, 09:51) Кста... Apr 25 2018, 07:09 manul78 Добрый день !
Спасибо всем за ответы, шутки,... Apr 25 2018, 08:35 adnega Цитата(manul78 @ Apr 25 2018, 11:35) Дале... Apr 25 2018, 08:45 jcxz Цитата(manul78 @ Apr 25 2018, 11:35) 5. .... Apr 25 2018, 08:49 AlexandrY Цитата(manul78 @ Apr 25 2018, 11:35) 3. .... Apr 25 2018, 09:43 ViKo Цитата(manul78 @ Apr 25 2018, 11:35) Дале... Apr 25 2018, 10:25  -= Александр =- Цитата(ViKo @ Apr 25 2018, 13:25) Систему... Apr 25 2018, 10:46   AlexandrY Цитата(-= Александр =- @ Apr 25 201... Apr 25 2018, 10:48    AVI-crak Цитата(AlexandrY @ Apr 25 2018, 16:48) Та... Apr 25 2018, 16:55     AlexandrY Цитата(AVI-crak @ Apr 25 2018, 19:55... Apr 25 2018, 17:21      twix Цитата(AlexandrY @ Apr 25 2018, 17:21) RA... Apr 26 2018, 08:13       AlexandrY Цитата(twix @ Apr 26 2018, 11:13) Справед... Apr 26 2018, 08:35      k155la3 >> Назовите такой продвинутый редактор, в ко... Apr 26 2018, 13:54       AlexandrY Цитата(k155la3 @ Apr 26 2018, 16:54) ... Apr 26 2018, 14:07   HardEgor Через SWD можно читать регистры и память и писать ... Apr 25 2018, 10:48 k155la3 . . . . а-а-а-а. В ЭТОМ смысле.Цитата(manul78 ... Apr 26 2018, 14:13 Сергей Борщ Всегда делаю отладочный вывод через свободный УАПП... Apr 25 2018, 09:13 Kabdim Да, в андроид студии такое есть... Apr 26 2018, 07:39 x893 Это может означать, что плохо или спроектировано и... Apr 29 2018, 17:52 Rst7 QUOTE Если 5V по пину рубит регулярно через диоды ... May 1 2018, 09:34 haker_fox QUOTE (AlexandrY @ May 2 2018, 03:05) В м... May 2 2018, 02:18 AlexandrY Цитата(haker_fox @ May 2 2018, 05:18) Вы ... May 2 2018, 07:51  mantech Цитата(AlexandrY @ May 2 2018, 10:51) Вот... May 2 2018, 09:05   AlexandrY Цитата(mantech @ May 2 2018, 12:05) Это о... May 2 2018, 10:19    mantech Цитата(AlexandrY @ May 2 2018, 13:19) Во... May 2 2018, 10:45     AlexandrY Цитата(mantech @ May 2 2018, 13:45) Жаль,... May 2 2018, 10:55      mantech Цитата(AlexandrY @ May 2 2018, 13:55) Но ... May 2 2018, 11:02       AlexandrY Цитата(mantech @ May 2 2018, 14:02) Приче... May 2 2018, 12:17        mantech Цитата(AlexandrY @ May 2 2018, 15:17) Ну ... May 2 2018, 16:11         AlexandrY Цитата(mantech @ May 2 2018, 19:11) Это к... May 3 2018, 05:29          haker_fox QUOTE (AlexandrY @ May 3 2018, 13:29) А т... May 3 2018, 10:05           AlexandrY Цитата(haker_fox @ May 3 2018, 13:05) А з... May 3 2018, 10:21            mantech Цитата(AlexandrY @ May 3 2018, 13:21) Так... May 3 2018, 11:39            haker_fox QUOTE (AlexandrY @ May 3 2018, 18:21) Так... May 4 2018, 01:25          Kabdim Цитата(AlexandrY @ May 3 2018, 08:29) А т... May 3 2018, 12:19           mantech Цитата(Kabdim @ May 3 2018, 15:19) третий... May 3 2018, 15:02 Kabdim Судя по доке, беглым взглядом - ничего подобного, ... May 3 2018, 15:41 yuri_t Если говорить о fault tolerant системах (медицина,... May 6 2018, 17:55 AlexandrY Цитата(yuri_t @ May 6 2018, 20:55) Если г... May 7 2018, 06:54 haker_fox QUOTE (yuri_t @ May 7 2018, 01:55) Что ка... May 7 2018, 08:10 yuri_t По поводу WDT - чтобы нарушить работу CPU, достато... May 8 2018, 15:31 juvf Цитата(yuri_t @ May 8 2018, 20:31) в WDT ... May 8 2018, 15:36
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|