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

 
 
> Logging. Какие опции, Как изловить трудно повторяющийся баг
A. Fig Lee
сообщение Jul 11 2014, 15:24
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Народ, а че вы делаете чтобы изловить once in a while событие.
Например есть у нас ОС, и вот раз в пару дней система выпадает в осадок и не отвечает.
Что делать?
Опции:
1) иметь наружный дополнительный контроллер с питанием от батарейки, ножки которого дергать периодически из задач ОС.
Контроллер будет писать какая задача заткнулась. Сложно, муторно, надо делать плату и прикручивать к основной.
2) Использование battery backed RAM, писать инфо туда. Хорошо, когда есть еще риал тайм клок.
Чтоб время писать.
3) Использование вотчдога, только как определить что именно заткнулось?
В айдл таск проверять счетчики и смотреть, какая задача вылетела?
По вотчдогу писать в EEPROM?

Как вы вылавливаете баги?


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jekin
сообщение Jul 11 2014, 15:33
Сообщение #2


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

Группа: Свой
Сообщений: 91
Регистрация: 9-09-07
Из: Минск
Пользователь №: 30 406



Я при решении подобных проблем делаю трассировку с помощью ULINKpro. Позволяет писать пока не закончится свободное место на жестком диске компьютера.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 11 2014, 17:32
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Jekin @ Jul 11 2014, 11:33) *
Я при решении подобных проблем делаю трассировку с помощью ULINKpro. Позволяет писать пока не закончится свободное место на жестком диске компьютера.

Рассматриваем случай когда устройство уже в экплуатации или тестируется, без внешних соединений, в рабочей остановке

Цитата(jcxz @ Jul 11 2014, 11:51) *
Чего именно Вы хотите? Обнаруживать повисание определённых задач (а-ля позадачный вотчдог)?

Наверное. Периодически могут сказать, что устройство перестало работать. Почему перестало, как найти проблему.
Для hard fault сделал запись в EEPROM, при тесте работало.
Hard fault-a не было, почему "перестало работать" не понятно.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 12 2014, 07:33
Сообщение #4


Ally
******

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



Цитата(A. Fig Lee @ Jul 11 2014, 20:32) *
Рассматриваем случай когда устройство уже в экплуатации или тестируется, без внешних соединений, в рабочей остановке


Наверное. Периодически могут сказать, что устройство перестало работать. Почему перестало, как найти проблему.
Для hard fault сделал запись в EEPROM, при тесте работало.
Hard fault-a не было, почему "перестало работать" не понятно.


Ну очевидно у вас проблемы электромагнитной совместимости.
Здесь надо углублятся в железо. Анализировать трассировку, расположение разъемов и компонентов на плате и т.д.
Если вам конечно нужно решить проблему, а не найти причину. wink.gif

На моей практике проблемы с ЭМС часто приводили к защелкиванию внутренней периферии, тогда никакие WDT и прочие ухищрения не срабатывают. Бывает происходит сброс, а узел осциллятора уже не живой, не стартует программа.
Бывает сам кристал уходит в аут и не заводится при определенных погодных условиях.
Нельзя сбрасывать со счетов радиацию. Радиация сильнее вблизи массивных металических объектов и гранитных, мраморных массивов.
Клавиатура без защитных заземленных контуров идеальный осточник статических пробоев, процессоры виснут мертво.
Специфический дребезг вызванный ЭМИ на линях I2C, SPI, UART и проч. вызывает мертвое подвисание периферийных модулей.
И проч.

В любом случае на этапе инициализации не должно быть глухих циклов ожидания чего-то, должны быть отработаны сценарии ухода на альтернативные логи при зависании любого генератора или осциллятора.

В этом плане опасней были микроконтроллеры от NXP со всяким встроенным в ROM вспомогательным фирмваре.
Наиболее защищены от таких неприятностей чипы от Freescale, с несколькими внешними осцилляторами, несколькими внутренними и несколькими независимыми WDT.
И их операционка MQX уже сверху донизу оборудована логами, не надо перепахивать ядро RTOS чтобы еще что нибудь залогить.

Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 12 2014, 11:26
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(AlexandrY @ Jul 12 2014, 03:33) *
Ну очевидно у вас проблемы электромагнитной совместимости.
...

Может конечно и такое быть. Буду иметь ввиду. Но для этого мне надо исключить софт.
Пока предыдущие 2 случая:
1) в течение суток или 2х в зависимости от ethernet нетворк траффика глохло радио на устройстве.
Оказалось что переполнялась очередь запросов на прерывание от ethernet,
radio работает через SPI (DMA & IRQ), не могло воткнуть свой запрос на обслуживание, в результате висло.
Это относительно простой случай
2) в Кокосе баг в CoWaitForSingleFlag(). Получилось при определенных условиях что задача ушла из waiting list а в ready list не попала.
Вылавливал 2 недели, сужая кольцо. Проявлялось раз в сутки в лучшем случае.

Сейчас получше, но пару раз в неделю 2-3 устройства из сотни может зависнуть.
Это не hard fault, туда уже поставил ловушку.

Цитата(Golikov A. @ Jul 12 2014, 02:15) *
П.С. А киньте почитать про window watchdog пожалуйста, а то что-то сходу не нашел...

В RM008 мануале по STM32 windowed watchdog.


Цитата(jcxz @ Jul 11 2014, 23:42) *
Не очень понял что это даст и как оценить - работает или нет программа?
Эти счётчики в любой момент времени могут совпадать (in и out) или различаться на >=1. Что по ним можно понять?
Если вы про отслеживание их изменений, ну и что? Зависла одна задача, зато другая - нет, она продолжает вызывать эти функции и счётчики меняются.
И какой выигрыш?

Моя идея была что надо эту мысль имплементировать так:
счетчики ставить в теле задач, не функций, тогда понятно - где не увеличивается счетчик, там проблема.
У меня кое что имплементировано:
В каждом дескрипторе задачи есть указатель на функцию и линия сурс кода.
Задача при входе в функцию обновляет глобальное имя функции и периодически номер линии.
При переключении задач та задача, которая уходит ставит в своем дескрипторе имя функции где была последний раз и линию.
То есть где они были я примерно знаю.

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

Цитата(jcxz @ Jul 11 2014, 23:42) *
Я делаю так:...

Интересная, продуманная идея. Спасибо.
Единственно, я опасаюсь повторения ситуации, когда у меня все задачи стали изза бага в Кокосе.
Айдл правда работал.
Надо или в айдл задачу все это запихивать или в таймер, что лучше, мне кажется.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 12 2014, 12:34
Сообщение #6


Ally
******

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



Цитата(A. Fig Lee @ Jul 12 2014, 14:26) *
Получилось при определенных условиях что задача ушла из waiting list а в ready list не попала.
Вылавливал 2 недели, сужая кольцо. Проявлялось раз в сутки в лучшем случае.


Ошибка в ядре это очень серьезно. Я бы бросал эту ось пока не поздно.

Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 12 2014, 13:52
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(AlexandrY @ Jul 12 2014, 08:34) *
Ошибка в ядре это очень серьезно. Я бы бросал эту ось пока не поздно.

А где их нет?
Поздно бросать.
Устройство само по себе state machine, все стандартно катится по временным отрезкам.
Ось не нужна. Даже вредна. Но она есть. Приходится с этим жить.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- A. Fig Lee   Logging. Какие опции   Jul 11 2014, 15:24
|- - jcxz   Цитата(AlexandrY @ Jul 12 2014, 13:33) Не...   Jul 13 2014, 05:26
|- - adnega   Цитата(jcxz @ Jul 13 2014, 09:26) Во-во...   Jul 13 2014, 05:28
- - jcxz   Цитата(A. Fig Lee @ Jul 11 2014, 21:24) Н...   Jul 11 2014, 15:51
- - Golikov A.   если есть возможность FRAM поставить, то можно на ...   Jul 11 2014, 18:18
|- - A. Fig Lee   Цитата(Golikov A. @ Jul 11 2014, 14:18) е...   Jul 11 2014, 19:29
||- - kolobok0   Цитата(A. Fig Lee @ Jul 11 2014, 23:29) ....   Jul 11 2014, 19:52
|||- - A. Fig Lee   Цитата(kolobok0 @ Jul 11 2014, 15:52) был...   Jul 11 2014, 20:39
|||- - kolobok0   Цитата(A. Fig Lee @ Jul 12 2014, 00:39) Я...   Jul 11 2014, 22:47
||- - kolobok0   Цитата(A. Fig Lee @ Jul 11 2014, 23:29) ....   Jul 11 2014, 20:20
|- - jcxz   Цитата(Golikov A. @ Jul 12 2014, 00:18) Е...   Jul 12 2014, 03:42
- - kolobok0   Цитата(A. Fig Lee @ Jul 11 2014, 19:24) Н...   Jul 11 2014, 18:59
- - andrewlekar   Как-то пока отлавливается всё логами и натурными э...   Jul 11 2014, 19:46
- - Golikov A.   Цитата128 байт, FRAM нет, правда есть место во фла...   Jul 11 2014, 20:06
- - Golikov A.   Общие функции вызываемые всеми будут иметь флаги о...   Jul 12 2014, 06:15


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

 


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


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