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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
aaarrr
сообщение Jul 10 2018, 08:47
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ Jul 10 2018, 11:44) *
И к выходу из функции. LR

Ну, вышли с испорченными регистрами и SP - сильно легче стало?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 10 2018, 08:57
Сообщение #32


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Jul 10 2018, 11:47) *
Ну, вышли с испорченными регистрами и SP - сильно легче стало?

Не знаю. Можно по функции пройтись до конца. Допустим, просмотреть в обработчике, как меняется указатель стека в функции, откуда улетели, и попробовать его восстановить.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 10 2018, 09:13
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ Jul 10 2018, 11:57) *
Допустим, просмотреть в обработчике, как меняется указатель стека в функции, откуда улетели, и попробовать его восстановить.

Еще проанализировать, куда сохранили испорченные регистры, тоже восстановить... Главное ведь, не перезагружаться - то каждый может biggrin.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 10 2018, 09:38
Сообщение #34


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Jul 10 2018, 12:13) *
Главное ведь, не перезагружаться - то каждый может biggrin.gif

У меня сброс прибора не пройдет незамеченным для пользователя. Так зачем напрягаться? Сам и передернет питание, если увидит, что прибор завис.
У меня комп на работе по некой причине каждое утро перезагружается с голубым экраном. А после этого трудится весь день без сбоев. В чем причина, не знаю. То ли питания мало, то ли ломалка так работает. Но очень неприятно. Сидишь, мышой водишь, и вдруг бац!
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 10 2018, 10:15
Сообщение #35


Местный
***

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



Цитата(ViKo @ Jul 10 2018, 13:38) *
У меня сброс прибора не пройдет незамеченным для пользователя. Так зачем напрягаться? Сам и передернет питание, если увидит, что прибор завис.

На объектах прибор никто не передернет biggrin.gif Поверьте, лететь за тысячи километров для того, чтобы отлаживать устройство в ангаре или поле под мат орущих техников - далеко не изящный выход. Тем более UART там уже не подключишь.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 10 2018, 11:47
Сообщение #36


Гуру
******

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



Цитата(ViKo @ Jul 10 2018, 11:35) *
А вы контролируйте стек периодически, чтобы не переполнялся. rolleyes.gif

Спасибо, что разъяснили! И правда - зачем ПО отлаживать? Ведь надо просто не делать багов! cranky.gif

Цитата(ViKo @ Jul 10 2018, 11:44) *
И к выходу из функции. LR

Попробуйте как нить запустить отладчик, запустить программу, а потом в произвольной функции остановить выполнение и переместить PC на команду BX LR и продолжить выполнение кода. Увидите что будет, теоретик Вы наш. biggrin.gif

Цитата(ViKo @ Jul 10 2018, 12:38) *
У меня сброс прибора не пройдет незамеченным для пользователя. Так зачем напрягаться? Сам и передернет питание, если увидит, что прибор завис.

Да ужжж.... больше нет слов. Остаётся только посочувствовать пользователям ваших девайсов..... crying.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 10 2018, 11:57
Сообщение #37


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ Jul 10 2018, 14:47) *
Да ужжж.... больше нет слов. Остаётся только посочувствовать пользователям ваших девайсов..... crying.gif

У меня не виснет, можете не сочувствовать. Раньше висло, бывало. В последний раз в попытке усовершенствовать выскочила потенциальная вероятность деления на ноль. Исправил. Теперь никто не жалуется. А если что - прошивку можно обновить через загрузчик. Но никто не обращался.

Цитата(jcxz @ Jul 10 2018, 14:47) *
а потом в произвольной функции остановить выполнение и переместить PC на команду BX LR и продолжить выполнение кода. Увидите что будет, теоретик Вы наш. biggrin.gif

А вы на флаг поглядывайте, был HF или нет. И в зависимости от меняйте поведение функций. biggrin.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 10 2018, 11:59
Сообщение #38


Гуру
******

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



Цитата(ViKo @ Jul 10 2018, 14:57) *
А вы на флаг поглядывайте, был HF или нет. И в зависимости от меняйте поведение функций. biggrin.gif

Что за флаг? И как менять поведение?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 10 2018, 12:04
Сообщение #39


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ Jul 10 2018, 14:59) *
Что за флаг? И как менять поведение?

В обработчике задайте флаг, один или десяток разных на каждый случай и т.д. Меняйте так, чтобы функция делала как можно меньше вреда и как можно больше пользы. Чтобы манипулятор не полетел стремительным домкратом в исходное состояние. biggrin.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 10 2018, 12:13
Сообщение #40


Гуру
******

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



Цитата(ViKo @ Jul 10 2018, 15:04) *
В обработчике задайте флаг, один или десяток разных на каждый случай и т.д. Меняйте так, чтобы функция делала как можно меньше вреда и как можно больше пользы.

Вы что-ж предлагаете в memcpy() перед копированием каждого байта этот десяток флагов проверять??? 01.gif
Ааа!... Понял - это просто троллинг! biggrin.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 10 2018, 12:23
Сообщение #41


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ Jul 10 2018, 15:13) *
Ааа!... Понял - это просто троллинг! biggrin.gif

Я же писал, предлагаю подумать над. А то всё сброс да сброс. Скучно.
Мой HardFault обработчик состоит из двух ассемблерных команд. И ничего, прибор работает не хуже других. laughing.gif
Go to the top of the page
 
+Quote Post
serglg
сообщение Jul 10 2018, 14:26
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 19-07-16
Пользователь №: 92 603



Цитата(jcxz @ Jul 10 2018, 17:47) *
Да ужжж.... больше нет слов. Остаётся только посочувствовать пользователям ваших девайсов..... crying.gif


Первый совет у любой техподдержки - выключите устройство и опять включите. :-)

Сообщение отредактировал serglg - Jul 10 2018, 14:27
Go to the top of the page
 
+Quote Post
Pavia
сообщение Jul 10 2018, 15:01
Сообщение #43


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 11 2018, 09:53
Сообщение #44


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

Группа: Свой
Сообщений: 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
aaarrr
сообщение Jul 11 2018, 10:17
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(haker_fox @ Jul 11 2018, 12:53) *
Событие пишется в журнал, но лишь как HARDFAULT_EVENT". В журнал уже не кладу никакой другой полезной информации. Полагаю, что на этапе отладки нужно минимизировать вероятность этого события. А если на объекте появится, то... ну что поделать) Попробовать воспроизвести у себя.

Не факт, что будет легко воспроизвести на столе. Лучше добавить в лог хотя бы содержимое регистров и адрес события.
Go to the top of the page
 
+Quote Post

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

 


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


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