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

 
 
> Обработка Faults на Cortex-Mx, Как используете?
Arlleex
сообщение Jul 7 2018, 15:39
Сообщение #1


Местный
***

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



Интересует, как коллеги обрабатывают все Faults на микроконтроллерах Cortex-Mx.
Я про NMI, Hard, MemManage, Bus, Usage, SVCall, Debug Monitor, PendSV, Systick.
С SVCall, Debug Monitor, Systick все понятно, с PendSV в принципе тоже.

А что делаете с тяжелыми отказами, отказами шины и прочими? Сейчас я просто вывожу состояние нужных регистров и стек. Как правило, если где-то программа падает, я узнаю об этом на этапе отладки. Но ведь может быть такое, что устройство уже стоит у заказчика и частично подлежит отладке на объектах. И оно должно продолжить функционирование. Как обрабатывать тогда ошибки? Перезагрузка по WDT? Или все-таки грамотный обработчик исключения должен понять природу ошибки и попытаться исправить ее? Если да, то каким образом? Сейчас мне видится вариант с сохранением лога событий в памяти (допустим, SD карты) и перезагрузкой МК. Пока что больше хорошего развития событий не знаю. Отсюда и предположения для обсуждения:
1. Должны ли существовать обработчики исключения CPU, связанные с аварийным событием (промах по памяти, тяжелый отказ, например, и т.д.) только на момент разработки и отладки ПО и выявлять все проблемы именно на этапе разработки, а при этом в боевой работе устройство ни коим образом не должно ловить такие Fault-ы?
2. Пункт 1 влечет за собой следующий вопрос: если в боевом коде обработчики должны быть предусмотрены (я подразумеваю, что все-таки это именно так) - как правильно строить архитектуру обработки ошибок? Что должен делать код в обработчике, кроме как сообщать программисту (каким-то образом) о состоянии регистров?
3. Вопрос больше из разряда "как больше нравится" - код обработчика на ассемблере или на Си?
То есть, как вы поняли, вопрос в грамотном управлении ходом событий для обеспечения надежности и безотказности устройства.

Я задаю себе вслух вопрос: "причину отказа я установлю, но что мне с этим делать дальше?".
Вопрос не философский и хотелось бы узнать, как коллеги на реальной практике применяют обработчики исключений CPU для обеспечения надежности ПО и устройства в целом от сбоев. Только прошу, не хотелось бы услышать ответ "на столе отлаживать надо". Мы отлаживаем. И работает годами. Но бывают (уверен, у всех) непредвиденные случаи, когда устройство может "выстрелить себе в колено", не важно по вашей вине или вине заказчика, и нужно с этим разбираться.
Также был бы благодарен, если на эту тему существуют мануалы, но я об этом не знаю - будьте добры, поделитесь информацией rolleyes.gif

Сообщение отредактировал Arlleex - Jul 7 2018, 15:42
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexandrY
сообщение Jul 11 2018, 13:15
Сообщение #2


Ally
******

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



Цитата(Arlleex @ Jul 7 2018, 18:39) *
Интересует, как коллеги обрабатывают все Faults на микроконтроллерах Cortex-Mx.
Я про NMI, Hard, MemManage, Bus, Usage, SVCall, Debug Monitor, PendSV, Systick.
С SVCall, Debug Monitor, Systick все понятно, с PendSV в принципе тоже.

Ловить HardFault-ы в релизе во время эксплуатации нет особого смысла.
Слишком много информации надо зафиксировать о контексте события, слишком обременительно хранить историю версий и парсить многомегабайтные логи.
Лучше их выловить отладочным адаптером заранее.
Поскольку такие проблемы чаще всего из-за специфичной периферии SoC-а и происходят во время ее исследований.
Либо по причине некачественного интерфейса к внешней памяти.
Но тут надо не HardFault-ы ловить, а гонять разнообразные тесты.
Помню случай когда ошибка c DDR вылезала у меня только когда компилер генерил STM инструкцию с сохранением более 7 им регистров в определенной последовательности и никак иначе.
Это вызывало самые причудливые Hard Fault-ы всех сортов.
Никакие логи и дампы регистров и стека не помогали. После каждой смены опций компиляции картина ошибок менялась.

Если устройство действительно критичное для безопасности, то никто не даст вам полагаться на обработку HardFault, а потребуют полный пакет самотестирования всего и вся в чипе перед каждой ответственной операцией.
Насчет как писать надежный софт есть специальные стандарты.
Вот тут доступно написано
Что интересно, допускается восстановление после HardFault-ов, если они были ожидаемы и произошли во время штатного тестирования.
Т.е. перед тестированием переопределяем обработчик на специальный для данного теста, по завершению тестирования ставим на место стандартный обработчик RTOS.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 11 2018, 13:28
Сообщение #3


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (AlexandrY @ Jul 11 2018, 21:15) *
Лучше их выловить отладочным адаптером заранее.

Но как? Вот сегодня у меня. LPC4337. FreeRTOS. 12 задач. Снаружи 4 АЦП, память SDRAM, дисплей, ethernet, rs-485, реле и прочая дребедень, свойственная промышленному контроллеру. Периодически, один раз на 10 одинаковых событий вылетает hardfault, либо портится память в произвольной задаче (структуры данных в классе). Вот как искать? MPU? Но ему же закалебёшься объяснять, какая память какой задаче принадлежит. Ловушка переполнения стека в оси не срабатывает. Call Stack ничего полезного мне не даёт, либо я не умею читать между строк. В итоге я полдня сидели и комментировал задачи, пришёл к работоспособному варианту, и методом научного тыка разобрался, что вызывало ошибку. А это было у меня под носом. Но
пока пришёл к этому, затратил немало времени.


QUOTE (AlexandrY @ Jul 11 2018, 21:24) *
Только хочу уточнить, что тестирование делается перед каждым включением двигателя, актуатора или еще чего.
Тестируются все критичные области RAM-а и все объекты RTOS, включая сервисы как менеджер памяти, межпроцессорный обмен и т.д.
Тестирование всего этого также повторяется с заданной периодичностью, хоть и раз в 10 мс.

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 11 2018, 13:45
Сообщение #4


Ally
******

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



Цитата(haker_fox @ Jul 11 2018, 16:26) *
Периодически, один раз на 10 одинаковых событий вылетает hardfault, либо портится память в произвольной задаче (структуры данных в классе). Вот как искать?

Как правильно ловить hardfault-ы - https://www.iar.com/support/tech-notes/debu...lt-on-cortex-m/

Цитата(haker_fox @ Jul 11 2018, 16:28) *
Сигнатуры в ОЗУ? Тестовые блоки с CRC? Не представляю, как можно тестировать менеджер памяти, межпроцессный обмен. Вы, как я понимаю, подобным занимаетесь. Может быть напишите нам подробнее эти тонкости, если они не затронут ноу-хау. Просто иногда хочется лбом об стенку биться, ибо не знаешь, где искать)))

Не, к счастью мне такого не надо пока применять.
Обходимся так называемой ABC релейной схемой. Дивайсы с ней легко проходят сертификацию и на софт даже не глядят.
Просто в MQX таких фичей по самодиагностике много, я их аккуратно обхожу и как они работают особо не разбирался.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Arlleex   Обработка Faults на Cortex-Mx   Jul 7 2018, 15:39
- - aaarrr   По-моему, так: 1. Должны быть и в релизе. 2. Регис...   Jul 7 2018, 15:53
- - ViKo   А вот, скажем, выйти из той функции, которая сбойн...   Jul 7 2018, 18:28
|- - aaarrr   Цитата(ViKo @ Jul 7 2018, 21:28) А вот, с...   Jul 7 2018, 18:32
|- - ViKo   Цитата(aaarrr @ Jul 7 2018, 21:32) 2. А е...   Jul 7 2018, 20:08
|- - aaarrr   Цитата(ViKo @ Jul 7 2018, 23:08) Так же и...   Jul 7 2018, 20:48
|- - jcxz   Цитата(aaarrr @ Jul 7 2018, 23:48) Вы так...   Jul 7 2018, 20:56
|- - aaarrr   Цитата(jcxz @ Jul 7 2018, 23:56) Типа как...   Jul 7 2018, 21:04
|- - jcxz   Цитата(aaarrr @ Jul 8 2018, 00:04) Так он...   Jul 7 2018, 21:12
|- - ViKo   Цитата(aaarrr @ Jul 8 2018, 00:04) Так он...   Jul 10 2018, 07:04
|- - aaarrr   Цитата(ViKo @ Jul 10 2018, 10:04) Так PC ...   Jul 10 2018, 07:24
|- - ViKo   Цитата(aaarrr @ Jul 10 2018, 10:24) А где...   Jul 10 2018, 07:47
|- - jcxz   Цитата(aaarrr @ Jul 10 2018, 10:24) Разме...   Jul 10 2018, 08:05
|- - aaarrr   Цитата(jcxz @ Jul 10 2018, 11:05) Пока не...   Jul 10 2018, 08:13
- - jcxz   Цитата(Arlleex @ Jul 7 2018, 18:39) А что...   Jul 7 2018, 20:45
- - Arlleex   Спасибо участникам обсуждения! Примерно так я ...   Jul 10 2018, 05:14
|- - jcxz   Цитата(Arlleex @ Jul 10 2018, 08:14) где ...   Jul 10 2018, 06:08
||- - Arlleex   Цитата(jcxz @ Jul 10 2018, 10:08) Лучше л...   Jul 10 2018, 06:35
|- - aaarrr   Цитата(Arlleex @ Jul 10 2018, 08:14) Если...   Jul 10 2018, 06:42
|- - jcxz   Цитата(aaarrr @ Jul 10 2018, 09:42) скопи...   Jul 10 2018, 06:57
- - Arlleex   Цитата(aaarrr @ Jul 10 2018, 10:42) Если ...   Jul 10 2018, 07:36
|- - jcxz   Цитата(Arlleex @ Jul 10 2018, 10:36) В эт...   Jul 10 2018, 08:13
- - aaarrr   Цитата(Arlleex @ Jul 10 2018, 10:36) Кста...   Jul 10 2018, 08:01
|- - ViKo   Цитата(aaarrr @ Jul 10 2018, 11:01) Да ну...   Jul 10 2018, 08:09
|- - aaarrr   Цитата(ViKo @ Jul 10 2018, 11:09) Если вн...   Jul 10 2018, 08:18
||- - ViKo   Цитата(aaarrr @ Jul 10 2018, 11:18) Так о...   Jul 10 2018, 08:23
|- - jcxz   Цитата(ViKo @ Jul 10 2018, 11:09) То есть...   Jul 10 2018, 08:26
|- - ViKo   Цитата(jcxz @ Jul 10 2018, 11:26) А какой...   Jul 10 2018, 08:35
|- - jcxz   Цитата(ViKo @ Jul 10 2018, 11:35) А вы ко...   Jul 10 2018, 11:47
|- - ViKo   Цитата(jcxz @ Jul 10 2018, 14:47) Да ужжж...   Jul 10 2018, 11:57
||- - jcxz   Цитата(ViKo @ Jul 10 2018, 14:57) А вы на...   Jul 10 2018, 11:59
||- - ViKo   Цитата(jcxz @ Jul 10 2018, 14:59) Что за ...   Jul 10 2018, 12:04
||- - jcxz   Цитата(ViKo @ Jul 10 2018, 15:04) В обраб...   Jul 10 2018, 12:13
||- - ViKo   Цитата(jcxz @ Jul 10 2018, 15:13) Ааа...   Jul 10 2018, 12:23
|- - serglg   Цитата(jcxz @ Jul 10 2018, 17:47) Да ужжж...   Jul 10 2018, 14:26
- - aaarrr   Цитата(ViKo @ Jul 10 2018, 11:23) По моем...   Jul 10 2018, 08:39
|- - ViKo   Цитата(aaarrr @ Jul 10 2018, 11:39) Можно...   Jul 10 2018, 08:44
||- - aaarrr   Цитата(ViKo @ Jul 10 2018, 11:44) И к вых...   Jul 10 2018, 08:47
||- - ViKo   Цитата(aaarrr @ Jul 10 2018, 11:47) Ну, в...   Jul 10 2018, 08:57
||- - aaarrr   Цитата(ViKo @ Jul 10 2018, 11:57) Допусти...   Jul 10 2018, 09:13
||- - ViKo   Цитата(aaarrr @ Jul 10 2018, 12:13) Главн...   Jul 10 2018, 09:38
||- - Arlleex   Цитата(ViKo @ Jul 10 2018, 13:38) У меня ...   Jul 10 2018, 10:15
|- - Pavia   Цитата(aaarrr @ Jul 10 2018, 11:39) Можно...   Jul 10 2018, 15:01
- - haker_fox   Мой обработчик HardFault состоит из диагностическо...   Jul 11 2018, 09:53
|- - aaarrr   Цитата(haker_fox @ Jul 11 2018, 12:53) Со...   Jul 11 2018, 10:17
|- - ViKo   Цитата(haker_fox @ Jul 11 2018, 12:53) Зн...   Jul 11 2018, 10:22
|- - Arlleex   Цитата(haker_fox @ Jul 11 2018, 13:53) А ...   Jul 11 2018, 11:52
||- - haker_fox   QUOTE (Arlleex @ Jul 11 2018, 19:52) А ес...   Jul 11 2018, 13:11
|- - jcxz   Цитата(haker_fox @ Jul 11 2018, 12:53) А ...   Jul 11 2018, 20:01
|- - Arlleex   Цитата(jcxz @ Jul 12 2018, 00:01) Конечно...   Jul 12 2018, 04:44
||- - jcxz   Цитата(Arlleex @ Jul 12 2018, 07:44) А во...   Jul 12 2018, 12:29
||- - Arlleex   Цитата(jcxz @ Jul 12 2018, 16:29) А эскал...   Jul 12 2018, 12:41
||- - Kabdim   Цитата(Arlleex @ Jul 12 2018, 15:41) ...   Jul 12 2018, 13:53
|- - AlexandrY   Цитата(jcxz @ Jul 11 2018, 23:01) Ну никт...   Jul 12 2018, 19:40
|- - haker_fox   QUOTE (AlexandrY @ Jul 13 2018, 03:40) Ну...   Jul 13 2018, 01:27
|- - AlexandrY   Цитата(haker_fox @ Jul 13 2018, 04:27) Пр...   Jul 13 2018, 10:21
|- - jcxz   Цитата(AlexandrY @ Jul 13 2018, 13:21) Не...   Jul 13 2018, 11:15
|- - haker_fox   QUOTE (AlexandrY @ Jul 13 2018, 18:21) Жд...   Jul 13 2018, 14:18
|- - Pavia   Цитата(haker_fox @ Jul 11 2018, 16:28) Но...   Jul 11 2018, 16:21
|- - Kabdim   Цитата(Pavia @ Jul 11 2018, 19:21) Всё пр...   Jul 11 2018, 16:29
|- - AlexandrY   Цитата(Pavia @ Jul 11 2018, 19:21) Ошероу...   Jul 11 2018, 18:30
- - haker_fox   QUOTE (Arlleex @ Jul 11 2018, 19:52) Я ещ...   Jul 11 2018, 13:19
|- - AlexandrY   Цитата(haker_fox @ Jul 11 2018, 16:19) И ...   Jul 11 2018, 13:24
- - haker_fox   QUOTE (jcxz @ Jul 12 2018, 04:01) Расчуде...   Jul 12 2018, 05:10
|- - jcxz   Цитата(haker_fox @ Jul 12 2018, 08:10) Од...   Jul 12 2018, 12:51
|- - Arlleex   Цитата(jcxz @ Jul 12 2018, 16:51) А мне д...   Jul 12 2018, 13:15
|- - jcxz   Цитата(Arlleex @ Jul 12 2018, 16:15) ETB ...   Jul 12 2018, 13:24
- - Kabdim   Зато они сменили лицензию на 5 версию. За деньги ч...   Jul 16 2018, 09:36
- - Arlleex   Кстати, коллеги. А нормальная ли практика фиксиров...   Jul 17 2018, 09:03
|- - AlexandrY   Цитата(Arlleex @ Jul 17 2018, 12:03) Кста...   Jul 17 2018, 09:09
|- - jcxz   Цитата(Arlleex @ Jul 17 2018, 12:03) А то...   Jul 17 2018, 09:57
- - aaarrr   Цитата(Arlleex @ Jul 17 2018, 12:03) А но...   Jul 17 2018, 09:54


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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 03:00
Рейтинг@Mail.ru


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