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

 
 
> 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
Ответов
Golikov A.
сообщение Jul 11 2014, 18:18
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



если есть возможность FRAM поставить, то можно на ней сделать дата логер циклический. На EEPROM конечно ничего хорошего не сделаешь при нормальной активности смены потоков...

Единственный вариант это сделать флаги вход - выход задачи. Делается так

char FlagIn_FuncName;
char FlagOut_FuncName;
при входе в функцию увеличиваете первый, при выходе второй.
а по вочдогу все флаги от всех функций в EEPROM записывайте в ближайший не пустой сектор из выделенных для логированния. Если памяти полно то флаги можно int сделать, тогда сможете даже оценить сколько по времени проработала программа. Естественно пара не совпадающих флагов укажет функцию смерти...

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


Знающий
****

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



Цитата(Golikov A. @ Jul 11 2014, 14:18) *
если есть возможность FRAM поставить, то можно на ней сделать дата логер циклический. На EEPROM конечно ничего хорошего не сделаешь при нормальной активности смены потоков...

Единственный вариант это сделать флаги вход - выход задачи. Делается так

char FlagIn_FuncName;
char FlagOut_FuncName;
при входе в функцию увеличиваете первый, при выходе второй.
а по вочдогу все флаги от всех функций в EEPROM записывайте в ближайший не пустой сектор из выделенных для логированния. Если памяти полно то флаги можно int сделать, тогда сможете даже оценить сколько по времени проработала программа. Естественно пара не совпадающих флагов укажет функцию смерти...

O! Какая хорошая идея со счетчиками входа/выхода в функцию.
Да, можно сделать ячейки RAM __no_init,
если вотчдог ресета не было, мы их обнуляем, если был, значит там данные, пишем их в ЕЕПРОМ при рестарте вотчдога.
В данном случае EEPROM маленький, 128 байт, FRAM нет, правда есть место во флаше СТМки.

В айдл таск можно периодически проверять счетчики, если задача зависла на 200 миллисекунд, например, уходим на вотчдог ресет..
Да, чтото в этом есть..

Погуглю, может 24LCXX можно безболезненно на FRAM поменять..


Цитата(kolobok0 @ Jul 11 2014, 14:59) *
На обработку заходят все траблы (hard fault, mem manage, bus fault, обработчик с прерывания от оконной собаки, прерывания от ассерта и т.п.),
в данной обработке есть стэк в нём адресс возврата, дата-время, состояние глобальных данных (флагов состояния, стэков динамических ошибок и т.д.)
вся информация до которой можно дотянуться.
по адресу возврата вычисляется модуль (модульная архитектура). прерывания полностью
блокируются, происходит запись во флэш(скользящая адресация, по трём банкам) и уход на рестарт.

При подъёме логики производится чтение из флэша. Если были траблы - производится расшифровка и запись в лог файл в MicroSD карточку
(если стоит), в лог файл.

где то так.

Хорошо, продуманно. А если ничего не происходит, а устройство не отвечает? гдето там в loop впало, например, или ожидание?
Както это обрабатывается? По моему, наиболее трудная задача.


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

Сообщений в этой теме
- A. Fig Lee   Logging. Какие опции   Jul 11 2014, 15:24
- - Jekin   Я при решении подобных проблем делаю трассировку с...   Jul 11 2014, 15:33
|- - A. Fig Lee   Цитата(Jekin @ Jul 11 2014, 11:33) Я при ...   Jul 11 2014, 17:32
|- - AlexandrY   Цитата(A. Fig Lee @ Jul 11 2014, 20:32) Р...   Jul 12 2014, 07:33
|- - A. Fig Lee   Цитата(AlexandrY @ Jul 12 2014, 03:33) Ну...   Jul 12 2014, 11:26
||- - AlexandrY   Цитата(A. Fig Lee @ Jul 12 2014, 14:26) П...   Jul 12 2014, 12:34
||- - A. Fig Lee   Цитата(AlexandrY @ Jul 12 2014, 08:34) Ош...   Jul 12 2014, 13:52
|- - 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
||- - 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 Текстовая версия Сейчас: 23rd July 2025 - 15:47
Рейтинг@Mail.ru


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