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

Местный
  
Группа: Участник
Сообщений: 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 для обеспечения надежности ПО и устройства в целом от сбоев. Только прошу, не хотелось бы услышать ответ "на столе отлаживать надо". Мы отлаживаем. И работает годами. Но бывают (уверен, у всех) непредвиденные случаи, когда устройство может "выстрелить себе в колено", не важно по вашей вине или вине заказчика, и нужно с этим разбираться. Также был бы благодарен, если на эту тему существуют мануалы, но я об этом не знаю - будьте добры, поделитесь информацией
Сообщение отредактировал Arlleex - Jul 7 2018, 15:42
|
|
|
|
|
 |
Ответов
|
Jul 11 2018, 09:53
|

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

|
Мой обработчик HardFault состоит из диагностического вывода в консоль содержимого регистров. Взят на просторах инета. Плюс к этому блокируются все прерывания, и через некоторое время прибор перезагружается по собаке. Событие пишется в журнал, но лишь как HARDFAULT_EVENT". В журнал уже не кладу никакой другой полезной информации. Полагаю, что на этапе отладки нужно минимизировать вероятность этого события. А если на объекте появится, то... ну что поделать) Попробовать воспроизвести у себя. Поэтому расчёт на пса, и собственные силы в отладке.
Продолжать работу после hard faulta не считаю разумным, т.к. причин этого явления может быть несколько разных. Например, невыровнный доступ к памяти. И что с этим делать? Если это правится в исходниках, там и нужно поправить. Если это "случайная" ситуация, зависиящая от внешней среды... то тоже исходники править, только больше алгоритмически. Или улетели с нулевого указателя? И вот что с этим делать? Прибор не может работать, не обратившись к нужной функции. Значит его нужно перзапускать, что и делает собака.
Как правило, приборы, особенно построенные на МК без MMU - не компы. Операционных систем, которые берут на себя весь процесс восстановления и защиты экосистемы, там нет. Писать это и тестировать самому - не одного ежа можно родить) А если только MPU? Или у нас Cortex-M0 без оного? Считаю, что лог + перезапуск самое то)
--------------------
Выбор.
|
|
|
|
|
Jul 11 2018, 20:01
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(haker_fox @ Jul 11 2018, 12:53)  А если только MPU? Или у нас Cortex-M0 без оного? Расчудесная и многими любимая фирма STMicroelectronics даже некоторые МК на Cortex-M3 умудряется делать без MPU. Видимо заботится о юзерах - чтоб мозги не перенапрягли, разбираясь в нём.  Цитата(ViKo @ Jul 11 2018, 13:22)  Есть не один способ сбросить МК без собаки. Зачем ждать, пока собака проснется? Да знаем мы уже Ваш способ! этот способ - юзер с большим рубильником  Цитата(Arlleex @ Jul 11 2018, 14:52)  А если этот ваш МК стоит на приводе управления тормозами поезда? А если в самолете? ...то их (девайсов) должно быть как минимум 4-ро. Если один вздумал вольнодумничать - 3 других дадут ему по шее, так чтоб перезагрузился. А если пойдут 2 на 2, то попросят помощи у машиниста/пилота.  Цитата(AlexandrY @ Jul 11 2018, 16:15)  Ловить HardFault-ы в релизе во время эксплуатации нет особого смысла. Слишком много информации надо зафиксировать о контексте события, слишком обременительно хранить историю версий и парсить многомегабайтные логи. Лучше их выловить отладочным адаптером заранее. Ну никто-ж не спорит, что лучше быть богатым и здоровым чем бедным и больным писать код сразу и без багов. Но что-то ни у кого это не получается. И при компиляции в RELEASE ненайденные баги не исчезают волшебным образом.  Цитата(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-теоретики....  Цитата(AlexandrY @ Jul 11 2018, 21:30)  Замедление разработки в ответственных системах скорее всего даже полезно. Да я тоже считаю что лучше 5 раз сходить на кофе-паузу чем 2!!! Ведь чем меньше времени программист проводит за клавиатурой, тем меньше у него времени плодить баги! На прошлой работе у меня был коллега, так он так начальству и говорил: "Вот я сейчас лишние полчаса просидел в кафе, так я же это с целью ускорить разработку - иначе бы за это время успел написать баг, но поиски которого пришлось бы потратить несколько дней. А так - выпил лишнюю чашку кофе - и ускорил проект на несколько дней!"
|
|
|
|
|
Jul 12 2018, 19:40
|

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

|
Цитата(jcxz @ Jul 11 2018, 23:01)  Ну никто-ж не спорит, что лучше быть богатым и здоровым чем бедным и больным писать код сразу и без багов. Но что-то ни у кого это не получается. И при компиляции в RELEASE ненайденные баги не исчезают волшебным образом.  Сдаётся мне, что попытка вытворить такое не уменьшит, а наоборот - увеличит вероятность наличия багов. Вопрос не куда деваются баги, а где и когда их лучше искать. Просто включить логику и осознать целесообразность. При полной неопределенности целесообразней искать там где удобно. А напрягать юзеров и техподдержку логами не имеет смысла. Я на этом обжегся. Во-первых юзеры устраивают истерику когда просишь логи, а тех.поддержка почитав логи начинает косо смотреть и требовать расшифровщик логов для их уровня интеллекта и даже начинают требовать что писать и что не писать в логи. Второе, искать надо там где бОльшая вероятность. И я согласен с ST, что самый чувствительный участок - это RAM. RAM занимает самую большую площадь на чипе. А сбои в RAM-е имеют свойство накапливаться. Поэтому чем чаще тестируете RAM тем меньше накопленных ошибок будет. Ну и последняя модная фишка от IAR 8.20 - стековые канарейки (stack canaries) Такая фича компилера, когда он автоматом вставляет некую проверку стека на целостность в каждую подозрительную функцию. Кста, если кто забыл. Есть еще такая фича у IAR как С-RUN Runtime Checking, тож проверяет кучу косяков в риалтайме как и Ubsan
|
|
|
|
|
Jul 13 2018, 01:27
|

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

|
QUOTE (AlexandrY @ Jul 13 2018, 03:40)  Ну и последняя модная фишка от IAR 8.20 - стековые канарейки (stack canaries) Такая фича компилера, когда он автоматом вставляет некую проверку стека на целостность в каждую подозрительную функцию. Прямо сейчас внедрил в проект этот инструмент. Пусть будет. Вдруг поймает что-то. AlexandrY, я, как понял, вы IAR только используете?
--------------------
Выбор.
|
|
|
|
Сообщений в этой теме
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, 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     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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|