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

 
 
> Обработка 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
Ответов
haker_fox
сообщение Jul 11 2018, 09:53
Сообщение #2


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

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



Мой обработчик HardFault состоит из диагностического вывода в консоль содержимого регистров. Взят на просторах инета. Плюс к этому блокируются все прерывания, и через некоторое время прибор перезагружается по собаке. Событие пишется в журнал, но лишь как HARDFAULT_EVENT". В журнал уже не кладу никакой другой полезной информации. Полагаю, что на этапе отладки нужно минимизировать вероятность этого события. А если на объекте появится, то... ну что поделать) Попробовать воспроизвести у себя. Поэтому расчёт на пса, и собственные силы в отладке.

Продолжать работу после hard faulta не считаю разумным, т.к. причин этого явления может быть несколько разных. Например, невыровнный доступ к памяти. И что с этим делать? Если это правится в исходниках, там и нужно поправить. Если это "случайная" ситуация, зависиящая от внешней среды... то тоже исходники править, только больше алгоритмически. Или улетели с нулевого указателя? И вот что с этим делать? Прибор не может работать, не обратившись к нужной функции. Значит его нужно перзапускать, что и делает собака.

Как правило, приборы, особенно построенные на МК без MMU - не компы. Операционных систем, которые берут на себя весь процесс восстановления и защиты экосистемы, там нет. Писать это и тестировать самому - не одного ежа можно родить) А если только MPU? Или у нас Cortex-M0 без оного? Считаю, что лог + перезапуск самое то)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 11 2018, 20:01
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(haker_fox @ Jul 11 2018, 12:53) *
А если только MPU? Или у нас Cortex-M0 без оного?

Расчудесная и многими любимая фирма STMicroelectronics даже некоторые МК на Cortex-M3 умудряется делать без MPU. Видимо заботится о юзерах - чтоб мозги не перенапрягли, разбираясь в нём. biggrin.gif

Цитата(ViKo @ Jul 11 2018, 13:22) *
Есть не один способ сбросить МК без собаки. Зачем ждать, пока собака проснется?

Да знаем мы уже Ваш способ! этот способ - юзер с большим рубильником biggrin.gif

Цитата(Arlleex @ Jul 11 2018, 14:52) *
А если этот ваш МК стоит на приводе управления тормозами поезда? А если в самолете?

...то их (девайсов) должно быть как минимум 4-ро. Если один вздумал вольнодумничать - 3 других дадут ему по шее, так чтоб перезагрузился. А если пойдут 2 на 2, то попросят помощи у машиниста/пилота. biggrin.gif

Цитата(AlexandrY @ Jul 11 2018, 16:15) *
Ловить HardFault-ы в релизе во время эксплуатации нет особого смысла.
Слишком много информации надо зафиксировать о контексте события, слишком обременительно хранить историю версий и парсить многомегабайтные логи.
Лучше их выловить отладочным адаптером заранее.

Ну никто-ж не спорит, что лучше быть богатым и здоровым чем бедным и больным писать код сразу и без багов. Но что-то ни у кого это не получается. И при компиляции в RELEASE ненайденные баги не исчезают волшебным образом. laughing.gif

Цитата(AlexandrY @ Jul 11 2018, 16:24) *
Тестирование всего этого также повторяется с заданной периодичностью, хоть и раз в 10 мс.

Сдаётся мне, что попытка вытворить такое не уменьшит, а наоборот - увеличит вероятность наличия багов.

Цитата(haker_fox @ Jul 11 2018, 16:28) *
MPU? Но ему же закалебёшься объяснять, какая память какой задаче принадлежит.

Вообще - это возможно. Если каждая задача работает только со своими переменными.
Собираем эти переменные в свои регионы памяти: для каждой задачи - отдельный регион, куда линкуются только её переменные; в хуке переключателя контекста (в uCOS такой уже есть, но если и нет - можно просто вставить в имеющийся переключатель) при переключении на какую-то задачу закрываем всю память от записи (или вообще любого доступа) кроме региона этой задачи.
Но так редко бывает, чтобы задача работала только со своими переменными без взаимодействия с другими задачами. Хотя тут тоже есть варианты.
А изначально Вам следовало определить причину HF. И от неё уже танцевать.
Конечно бывает, что HF вызывает вторичная причина (первичная просто разрушила чью-то память не вызвав HF, а когда пользователь этих данных полез к ним, то у него и случился HF). Тут уже сложнее. Но тоже есть варианты решений.

Цитата(Pavia @ Jul 11 2018, 19:21) *
Место вставки элементарно подсчетом скобок определяется. Только для каждого класса надо будет добавить GetDebugString

Набежали, блин, PC-теоретики.... 05.gif

Цитата(AlexandrY @ Jul 11 2018, 21:30) *
Замедление разработки в ответственных системах скорее всего даже полезно.

Да я тоже считаю что лучше 5 раз сходить на кофе-паузу чем 2!!! Ведь чем меньше времени программист проводит за клавиатурой, тем меньше у него времени плодить баги! biggrin.gif
На прошлой работе у меня был коллега, так он так начальству и говорил: "Вот я сейчас лишние полчаса просидел в кафе, так я же это с целью ускорить разработку - иначе бы за это время успел написать баг, но поиски которого пришлось бы потратить несколько дней. А так - выпил лишнюю чашку кофе - и ускорил проект на несколько дней!" biggrin.gif
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 12 2018, 04:44
Сообщение #4


Местный
***

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



Цитата(jcxz @ Jul 12 2018, 00:01) *
Конечно бывает, что HF вызывает вторичная причина (первичная просто разрушила чью-то память не вызвав HF, а когда пользователь этих данных полез к ним, то у него и случился HF). Тут уже сложнее. Но тоже есть варианты решений.

А вот тут, пожалуйста, поподробнее. Интересно как ловятся такие эскалационные баги smile3046.gif В терминологии ARM, нсколько я помню, это называется "не точный отказ" (not exact fault).
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 12 2018, 12:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Arlleex @ Jul 12 2018, 07:44) *
А вот тут, пожалуйста, поподробнее. Интересно как ловятся такие эскалационные баги smile3046.gif В терминологии ARM, нсколько я помню, это называется "не точный отказ" (not exact fault).

Вы не поняли. Я тут вовсе не говорил про эскалацию fault-ов. Баг не обязательно приводит к fault-у. Ну затёрла одна функция данные другой - с чего это может вызвать fault? А вот когда уже вторая функция начнёт пользоваться этими разрушенными данными, то может получиться fault. А может и не получиться, а порушатся данные третьей функции. И так далее. И когда это может привести к fault-у (а может и нет).
И вот - в конце концов получили этот fault, определили что он возник из-за того что в какой-то функции какие-то данные приняли недопустимое значение. Начинаем разбираться, а судя по коду - ну не может быть таких значений у этой функции. А всё потому что - это не первичный сбой. А первичную причину в таком случае установить уже гораздо сложнее, чем если бы первичная причина сразу вызвала fault.

А эскалация - это когда к примеру у Вас запрещён BusFault, но происходит причина его вызывающая и, так как он запрещён, то происходит эскалация до HF. У меня обработка всех fault-ов построена на эскалации до HF - так проще, чем писать кучу обработчиков с одинаковыми действиями. В ISR HF по регистрам всегда можно определить первоначальный источник, до эскалации.

И "неточный отказ" не имеет никакого отношения к эскалации. Это просто один из видов отказов по вектору BusFault. Неточный - это значит, что регистр адреса отказа не содержит точного адреса отказа. Например - из-за кеширования. Выполнили Вы запись в память, но из-за наличия буфера записи, данные не сразу физически запишутся в ОЗУ, а через некоторое время. И если эта запись вызовет fault, то PC к этому времени уже убежит на несколько инструкций. Вот тут и получите "неточный отказ".
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
|- - 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
||- - 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
- - AlexandrY   Цитата(Arlleex @ Jul 7 2018, 18:39) Интер...   Jul 11 2018, 13:15
|- - haker_fox   QUOTE (AlexandrY @ Jul 11 2018, 21:15) Лу...   Jul 11 2018, 13:28
|- - AlexandrY   Цитата(haker_fox @ Jul 11 2018, 16:26) Пе...   Jul 11 2018, 13:45
|- - 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 Текстовая версия Сейчас: 24th June 2025 - 19:54
Рейтинг@Mail.ru


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