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

 
 
> Обработка 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
AlexandrY
сообщение Jul 12 2018, 19:40
Сообщение #4


Ally
******

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



Цитата(jcxz @ Jul 11 2018, 23:01) *
Ну никто-ж не спорит, что лучше быть богатым и здоровым чем бедным и больным писать код сразу и без багов. Но что-то ни у кого это не получается. И при компиляции в RELEASE ненайденные баги не исчезают волшебным образом. laughing.gif

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

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

Второе, искать надо там где бОльшая вероятность. И я согласен с ST, что самый чувствительный участок - это RAM. RAM занимает самую большую площадь на чипе.
А сбои в RAM-е имеют свойство накапливаться. Поэтому чем чаще тестируете RAM тем меньше накопленных ошибок будет.

Ну и последняя модная фишка от IAR 8.20 - стековые канарейки (stack canaries)
Такая фича компилера, когда он автоматом вставляет некую проверку стека на целостность в каждую подозрительную функцию.

Кста, если кто забыл. Есть еще такая фича у IAR как С-RUN Runtime Checking, тож проверяет кучу косяков в риалтайме как и Ubsan
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 13 2018, 01:27
Сообщение #5


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

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



QUOTE (AlexandrY @ Jul 13 2018, 03:40) *
Ну и последняя модная фишка от IAR 8.20 - стековые канарейки (stack canaries)
Такая фича компилера, когда он автоматом вставляет некую проверку стека на целостность в каждую подозрительную функцию.

Прямо сейчас внедрил в проект этот инструмент. Пусть будет. Вдруг поймает что-то.
AlexandrY, я, как понял, вы IAR только используете?


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


Ally
******

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



Цитата(haker_fox @ Jul 13 2018, 04:27) *
Прямо сейчас внедрил в проект этот инструмент. Пусть будет. Вдруг поймает что-то.
AlexandrY, я, как понял, вы IAR только используете?

Нет не только. Сейчас в активной поддержке у меня проекты в Keil 4, Keil 5, IAR 7 , MPLAB
А вот как раз на 8-й IAR я еще не перешел. Жду плагина под 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
|- - 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


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

 


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


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