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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> Обработка Faults на Cortex-Mx, Как используете?
Arlleex
сообщение Jul 12 2018, 12:41
Сообщение #61


Местный
***

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



Цитата(jcxz @ Jul 12 2018, 16:29) *
А эскалация - это когда к примеру у Вас запрещён BusFault, но происходит причина его вызывающая и, так как он запрещён, то происходит эскалация до HF. У меня обработка всех fault-ов построена на эскалации до HF - так проще, чем писать кучу обработчиков с одинаковыми действиями. В ISR HF по регистрам всегда можно определить первоначальный источник, до эскалации.

Ну да. На самом деле-то вот что интересно: вообще возможно ли сделать так, чтобы "вычислить" начальное место, откуда пошло затирание памяти rolleyes.gif Вангую, что нет biggrin.gif
Разве что всегда при входе проверять аргументы на заданные диапазоны (указатели тем более) и в случае чего делать assert() с тем же вызовом SVC и записью в журнал. Да и не совсем очевидно, что делать, если в функцию пришли не ожидаемые параметры (к пример, слишком большой объем запрашиваемых данных на копирование) - совсем не отрабатывать (прямой return из функции), копировать по максимальному ожидаемому размеру, и т.д. Обычно такие ситуации я передаю наверх по стеку вызовов и там уже на уровне логики принимаю решение - делать ли перезапрос, например laughing.gif
А вот насчет порчи памяти третьим лицом (функцией в нашем случае) - вещь тоже довольно интересная, случалось сталкиваться с таким, причем даже с отладчиком порой можно просидеть день, ничего не надебаживши. Правда в таких случаях меня все-таки спасают assert-ы по входу функций. Сразу видно кому снесло голову.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 12 2018, 12:51
Сообщение #62


Гуру
******

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



Цитата(haker_fox @ Jul 12 2018, 08:10) *
Один из источников полностью программный. Т.е. связка таймер-ПДП-АЦП рулит ШИМ и обеспечивает цифровой ПИД-регулятор.

В XMC4xxx можно периферию связывать между собой ещё более аппаратно - даже без использования DMA, который вносит непредсказуемую задержку.
Например в текущем проекте у меня передача блока данных по UART запускается сигналом от таймера (аппаратным сигналом без всяких DMA). Это позволяет устройству-приёмнику синхронизировать свои часы с передатчиком с точностью до такта CPU. С DMA такое не сделаешь.
Или например: АЦП по нескольким каналам измеряет и суммирует данные с большой скоростью, но пропускает окна из заданного числа тактов вокруг интервалов мёртвого времени от 3-фазного ШИМ (сигналы у переключении ключей на время замораживают АЦП), убирая таким образом из измерений помехи в моменты переключения мощной нагрузки.
Да ещё много что возможно. sm.gif

Цитата(Arlleex @ Jul 12 2018, 15:41) *
Ну да. На самом деле-то вот что интересно: вообще возможно ли сделать так, чтобы "вычислить" начальное место, откуда пошло затирание памяти rolleyes.gif Вангую, что нет biggrin.gif

В общем случае нет, но в части таких случаев - возможно. Нужны соответствующие инструменты.
Вот тут коллега haker_fox (вроде?) писал, что работает с LPC43xx. Так в нём есть ETB. Он позволяет сделать обратную отладку. И если со времени первопричины прошло не очень много времени, то так можно найти её.
Ну или эмулировать возможности ETB программно: у меня например для этого во многих проектах реализован "Монитор выполнения" - это высокочастотное периодическое прерывание, в котором в FIFO фиксируются регистры CPU и верхушка стека. Он не раз мне тоже помогал находить такие сложные ошибки с разрушением памяти.

Цитата(Arlleex @ Jul 12 2018, 15:41) *
А вот насчет порчи памяти третьим лицом (функцией в нашем случае) - вещь тоже довольно интересная, случалось сталкиваться с таким

А мне даже очень часто случалось сталкиваться. Потому что работаю обычно в команде, и это третье лицо очень часто - один из коллег. Вот это самая засада, когда у тебя начинает глючить совершенно на ровном месте когда ты ничего не менял даже. Просто накосячил один из коллег... crying.gif
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 12 2018, 13:15
Сообщение #63


Местный
***

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



Цитата(jcxz @ Jul 12 2018, 16:51) *
А мне даже очень часто случалось сталкиваться. Потому что работаю обычно в команде, и это третье лицо очень часто - один из коллег. Вот это самая засада, когда у тебя начинает глючить совершенно на ровном месте когда ты ничего не менял даже. Просто накосячил один из коллег...

Вот тут я Вас очень даже понимаю. Бывает над одним проектом работает несколько человек и у каждого "работает все".
Про ETB спасибо, кстати, надо бы до конца поразбираться со всякими CoreSight финтиклюшками - ITM, TPIU, ETB (Embedded Trace Bus который) и т.д. А то может уже все придумали давно а мы я не пользуемся(-юсь) sad.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 12 2018, 13:24
Сообщение #64


Гуру
******

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



Цитата(Arlleex @ Jul 12 2018, 16:15) *
ETB (Embedded Trace Bus который)

Embedded Trace Buffer
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Jul 12 2018, 13:53
Сообщение #65


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(Arlleex @ Jul 12 2018, 15:41) *
"вычислить" начальное место, откуда пошло затирание памяти rolleyes.gif Вангую, что нет biggrin.gif

Вычислять нет, разрабатывать так что бы этого не происходило возможно. Использовать Ubsan, например, да и в целом поменьше указателей, побольше контейнеров. Вот только запас по памяти и быстродействию должен быть большим что бы включить и радоваться.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 12 2018, 19:40
Сообщение #66


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
Сообщение #67


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

Группа: Свой
Сообщений: 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
Сообщение #68


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
jcxz
сообщение Jul 13 2018, 11:15
Сообщение #69


Гуру
******

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



Цитата(AlexandrY @ Jul 13 2018, 13:21) *
Нет не только. Сейчас в активной поддержке у меня проекты в Keil 4, Keil 5, IAR 7 , MPLAB
А вот как раз на 8-й IAR я еще не перешел. Жду плагина под MQX.

А что - с 7-го IAR на 8-й надо как-то переходить? wacko.gif
У меня довольно большой проект нормально компилится и работает как под IAR7.80 так и под IAR8.20. И разницы в работе не заметно. Разве что в размере кода небольшая.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 13 2018, 14:18
Сообщение #70


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

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



QUOTE (AlexandrY @ Jul 13 2018, 18:21) *
Жду плагина под MQX.

Странно, что NXP купив Freescale не портировал MQX на LPC серию.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Jul 16 2018, 09:36
Сообщение #71


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Зато они сменили лицензию на 5 версию. За деньги что-нибудь может и будет портировано.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 17 2018, 09:03
Сообщение #72


Местный
***

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



Кстати, коллеги.
А нормальная ли практика фиксировать критические события во внутреннюю Program Flash МК? Обычно для внутрисистемных (внутри МК, в смысле) ошибок не требуется много памяти. Выделить два куска по N кБ и цикличный автомат журналирования организовать (чтобы при потере питания последние записи не потерлись). А то я, конечно, сам ставлю на все устройства внешнюю память, но интересует опыт (положительный/отрицательный) журналирования в набортную память МК. ИМХО, если не злоупотреблять printf() с прямым текстом в лог и только регистровые фреймы хранить, самое оно.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 17 2018, 09:09
Сообщение #73


Ally
******

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



Цитата(Arlleex @ Jul 17 2018, 12:03) *
Кстати, коллеги.
А нормальная ли практика фиксировать критические события во внутреннюю Program Flash МК? Обычно для внутрисистемных (внутри МК, в смысле) ошибок не требуется много памяти. Выделить два куска по N кБ и цикличный автомат журналирования организовать (чтобы при потере питания последние записи не потерлись). А то я, конечно, сам ставлю на все устройства внешнюю память, но интересует опыт (положительный/отрицательный) журналирования в набортную память МК. ИМХО, если не злоупотреблять printf() с прямым текстом в лог и только регистровые фреймы хранить, самое оно.

Расскажите лучше как вы по регистровым фреймам способны хоть что-то понять о причине сбоя. lol.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 17 2018, 09:54
Сообщение #74


Гуру
******

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



Цитата(Arlleex @ Jul 17 2018, 12:03) *
А нормальная ли практика фиксировать критические события во внутреннюю Program Flash МК?

Не лучший вариант, если принять во внимание сложность реализации и возникающую привязку к железу.
EEPROM стоит копейки, ни к чему экономить.

Цитата(AlexandrY @ Jul 17 2018, 12:09) *
Расскажите лучше как вы по регистровым фреймам способны хоть что-то понять о причине сбоя. lol.gif

Аншлаг прям.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 17 2018, 09:57
Сообщение #75


Гуру
******

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



Цитата(Arlleex @ Jul 17 2018, 12:03) *
А то я, конечно, сам ставлю на все устройства внешнюю память, но интересует опыт (положительный/отрицательный) журналирования в набортную память МК.

Во всех устройствах, где надо было вести журналов сбоев, до сих пор располагал его только во FRAM/MRAM.
Go to the top of the page
 
+Quote Post

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

 


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


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