|
|
  |
Обработка Faults на Cortex-Mx, Как используете? |
|
|
|
Jul 10 2018, 11:47
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ViKo @ Jul 10 2018, 11:35)  А вы контролируйте стек периодически, чтобы не переполнялся.  Спасибо, что разъяснили! И правда - зачем ПО отлаживать? Ведь надо просто не делать багов!  Цитата(ViKo @ Jul 10 2018, 11:44)  И к выходу из функции. LR Попробуйте как нить запустить отладчик, запустить программу, а потом в произвольной функции остановить выполнение и переместить PC на команду BX LR и продолжить выполнение кода. Увидите что будет, теоретик Вы наш.  Цитата(ViKo @ Jul 10 2018, 12:38)  У меня сброс прибора не пройдет незамеченным для пользователя. Так зачем напрягаться? Сам и передернет питание, если увидит, что прибор завис. Да ужжж.... больше нет слов. Остаётся только посочувствовать пользователям ваших девайсов.....
|
|
|
|
|
Jul 10 2018, 14:26
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 19-07-16
Пользователь №: 92 603

|
Цитата(jcxz @ Jul 10 2018, 17:47)  Да ужжж.... больше нет слов. Остаётся только посочувствовать пользователям ваших девайсов.....  Первый совет у любой техподдержки - выключите устройство и опять включите. :-)
Сообщение отредактировал serglg - Jul 10 2018, 14:27
|
|
|
|
|
Jul 10 2018, 15:01
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 3-02-14
Из: Интернет
Пользователь №: 80 322

|
Цитата(aaarrr @ Jul 10 2018, 11:39)  Можно. Но восстановить историю использования SP в функции - нет. Соответственно, и выйти из функции не получится, только вернуться к точке сбоя. Ребят, а что try except finally - запрещены? В try сохраняете SP в SEH-стек при Faults SP восстанавливается из этого стека. Переполнение стека вообще неплохо отлавливается статическим анализатором. А для редких случаев как уже говорили надо контролировать периодической проверкой. Цитата(jcxz) Вы что-ж предлагаете в memcpy() перед копированием каждого байта этот десяток флагов проверять??? Где-то я видел требование считать memcpy() - безопасной функцией. Просто иначе не получается доказать безопасность кода(доказательная безопасность). Но как по мне она небезопасна, но ведь достаточно перед ней поставить проверку и все дела. А если у вас есть вероятность отказа памяти, то как тут верно заметили есть дублирующий код который другим методом делает. Частичный отказ памяти маловероятен. А если он произойдёт то тут только дублирование железа поможет. Вероятность того, что память закончится отметается нагрузочным тестированием. А если при работе произойдёт, то используем стек прерывания/ядра сохраняем код ошибки в SD и перезагружаем устройство. При загрузки анализируем предыдущий отказ.
Сообщение отредактировал Pavia - Jul 10 2018, 15:12
|
|
|
|
|
Jul 11 2018, 09:53
|

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

|
Мой обработчик HardFault состоит из диагностического вывода в консоль содержимого регистров. Взят на просторах инета. Плюс к этому блокируются все прерывания, и через некоторое время прибор перезагружается по собаке. Событие пишется в журнал, но лишь как HARDFAULT_EVENT". В журнал уже не кладу никакой другой полезной информации. Полагаю, что на этапе отладки нужно минимизировать вероятность этого события. А если на объекте появится, то... ну что поделать) Попробовать воспроизвести у себя. Поэтому расчёт на пса, и собственные силы в отладке.
Продолжать работу после hard faulta не считаю разумным, т.к. причин этого явления может быть несколько разных. Например, невыровнный доступ к памяти. И что с этим делать? Если это правится в исходниках, там и нужно поправить. Если это "случайная" ситуация, зависиящая от внешней среды... то тоже исходники править, только больше алгоритмически. Или улетели с нулевого указателя? И вот что с этим делать? Прибор не может работать, не обратившись к нужной функции. Значит его нужно перзапускать, что и делает собака.
Как правило, приборы, особенно построенные на МК без MMU - не компы. Операционных систем, которые берут на себя весь процесс восстановления и защиты экосистемы, там нет. Писать это и тестировать самому - не одного ежа можно родить) А если только MPU? Или у нас Cortex-M0 без оного? Считаю, что лог + перезапуск самое то)
--------------------
Выбор.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|