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

 
 
> STM32 Обработка hard fault exception, Как правильно с ним работать
Serj78
сообщение Dec 28 2010, 02:19
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Читаю документацию на ARM ( DDI0337e - Cortex™-M3 Revision: r1p1 Technical Reference Manual)

Хочется более полного понимания, от тех кто работал с системой исключений.

Из того что я понял- это как будто "верхний" уровень "прерываний" происходящий по критическим событиям в процессоре.

Из структуры стартап-файла (использую Keil 4.12) видно, что по каждому исключению может быть вызвано прерывание.

Очень вероятно, что назначением прерываний ведает Configurable Fault handler, упомянутый в вышеуказанном документе (DDI0337e).

Но как его включить (где описана структура управляющего регистра) ?

Как вообще используют систему исключений? У меня она нигде никак в явном виде не инициализируется , как узнать что исключение произошло?
Периодически читать статус регистр исключения? И если оно произошло, какие могут быть последствия?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sonycman
сообщение Dec 29 2010, 06:40
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



У меня была как то проблема с таким вылетом - в исходниках FatFs от Чена есть такая функция - mem_cpy().
Весьма вредная, оказывается, так как при установленном флаге WORD_ACCESS она будет производить копирование 32-ух битными словами, а не байтами, безо всякого внимания к выравниванию.
Естественно, это быстро приводит к исключению.

Дело в том, что большая часть команд Cortex-M3 допускает работу с невыровненными по границе слова данными.
Но только не LDM и несколько других.

А именно они генерируются при компиляции Ченовской mem_cpy с флагом WORD_ACCESS.

Не знаю, почему он вставил эту свою писульку, вместо стандартных библиотечных функций. sad.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 29 2010, 09:31
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sonycman @ Dec 29 2010, 14:40) *
Не знаю, почему он вставил эту свою писульку, вместо стандартных библиотечных функций. sad.gif


Я видел кучу самодельных реализаций memcpy(). Раз люди пишут, значит есть причины. Думаю, что основных претензий к библиотечной memcpy() две: она очень большая, и она медленная на маленьких кусках данных. Оба недостатка - следствие огромной кучи начальных проверок в стремлении копировать максимальными блоками. Не всегда это всё нужно. Например, я копирую блоки максимум 20 байт. В этом случае тупое побайтовое(!) копирование может быть быстрее memcpy(). Или наоборот, блоки большие, но я, как программист, гарантирую, что они будут выровнены. Зачем мне тогда начальные проверки memcpy()?
(А теперь представьте, что всё, что делает memcpy(), делает сам компилятор, принудительно?! sm.gif )


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 29 2010, 11:58
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(AHTOXA @ Dec 29 2010, 17:31) *
Я видел кучу самодельных реализаций memcpy(). Раз люди пишут, значит есть причины. Думаю, что основных претензий к библиотечной memcpy() две: она очень большая, и она медленная на маленьких кусках данных.

Хм, ну ради некоторой экономии места смысл есть, это да. Да и то только на "маленьких" контроллерах, и в случае, когда больше нигде в программе эта функция не используется.

А насчёт "огромной" преогромной кучи проверок не соглашусь. Несколько битовых проверок с регистрами много времени не займут.
В отличии от примитивного побайтового цикла с обращением к памяти.
wink.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Serj78   STM32 Обработка hard fault exception   Dec 28 2010, 02:19
- - Harvester   Исключение Hard Fault, также как сброс и NMI, явля...   Dec 28 2010, 03:36
|- - Serj78   Цитата(Harvester @ Dec 28 2010, 09:36) Та...   Dec 28 2010, 12:14
|- - AHTOXA   Цитата(Serj78 @ Dec 28 2010, 20:14) Больш...   Dec 28 2010, 13:59
- - zltigo   QUOTE (Serj78 @ Dec 28 2010, 08:19) Но ка...   Dec 28 2010, 05:03
- - Dron_Gus   Например, Вы можете попытаться обратиться или выпо...   Dec 28 2010, 12:46
- - Serj78   Спасибо за примеры! Но это если я, образно го...   Dec 28 2010, 15:48
|- - AHTOXA   Цитата(Serj78 @ Dec 28 2010, 23:48) По ид...   Dec 28 2010, 16:56
|- - sonycman   Цитата(AHTOXA @ Dec 28 2010, 23:56) Нет, ...   Dec 28 2010, 23:50
|- - AHTOXA   А если адрес получается извне? Например, читается ...   Dec 29 2010, 00:29
|- - sonycman   Цитата(AHTOXA @ Dec 29 2010, 08:29) А есл...   Dec 29 2010, 02:53
|- - AHTOXA   Цитата(sonycman @ Dec 29 2010, 10:53) А в...   Dec 29 2010, 03:40
|- - AHTOXA   Цитата(sonycman @ Dec 29 2010, 19:58) А н...   Dec 29 2010, 13:11
|- - sonycman   Цитата(AHTOXA @ Dec 29 2010, 21:11) Ха...   Dec 29 2010, 14:37
|- - igorsk   Цитата(sonycman @ Dec 29 2010, 16:37) И о...   Apr 7 2011, 21:45
- - pan_oleg   День добрый. Нужна помощ. Код для STM32F101BT6 нап...   Jan 5 2011, 11:31
|- - Haamu   Цитата(pan_oleg @ Jan 5 2011, 15:31) Код ...   Apr 11 2014, 02:30
|- - Сергей Борщ   Цитата(Haamu @ Apr 11 2014, 04:30) Подска...   Apr 11 2014, 03:09
- - Атмег   Цитата(pan_oleg @ Jan 5 2011, 14:31) День...   Apr 5 2011, 16:48
|- - KnightIgor   Цитата(Атмег @ Apr 5 2011, 18:48) При изм...   Apr 6 2011, 12:32
- - Атмег   Цитата(KnightIgor @ Apr 6 2011, 15:32) Эт...   Apr 6 2011, 17:10
- - Атмег   Кажется, причины ясны, проблема не в моем коде. У ...   Apr 7 2011, 17:45
|- - aaarrr   Цитата(Атмег @ Apr 7 2011, 21:45) Кажется...   Apr 7 2011, 22:11
- - Атмег   Цитата(aaarrr @ Apr 8 2011, 01:11) Можно ...   Apr 8 2011, 07:53
|- - aaarrr   Цитата(Атмег @ Apr 8 2011, 11:53) PLL нас...   Apr 8 2011, 08:49
- - Атмег   Цитата(aaarrr @ Apr 8 2011, 11:49) А FMR?...   Apr 8 2011, 09:48
|- - aaarrr   Цитата(Атмег @ Apr 8 2011, 13:48) код из ...   Apr 8 2011, 09:54
- - Атмег   Это я взял как есть из примера. Как будет очередно...   Apr 8 2011, 10:23
|- - aaarrr   Цитата(Атмег @ Apr 8 2011, 14:23) Запись ...   Apr 8 2011, 10:28
- - Атмег   Цитата(aaarrr @ Apr 8 2011, 14:28) В том-...   Apr 8 2011, 10:57
- - aaarrr   Если программа стартует из флеш, то загрузчик не з...   Apr 8 2011, 11:06
- - Атмег   Цитата(aaarrr @ Apr 8 2011, 15:06) Если п...   Apr 8 2011, 15:39
|- - aaarrr   Цитата(Атмег @ Apr 8 2011, 19:39) Имел в ...   Apr 8 2011, 16:13
- - Атмег   Цитата(aaarrr @ Apr 8 2011, 20:13) Процес...   Apr 8 2011, 17:28
|- - aaarrr   Цитата(Атмег @ Apr 8 2011, 21:28) Отличае...   Apr 8 2011, 20:29
- - Атмег   Да, вы были правы, действительно дело оказалось EE...   Apr 12 2011, 22:02
- - aaarrr   Цитата(Атмег @ Apr 13 2011, 02:02) Но Атм...   Apr 12 2011, 22:05


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 11:44
Рейтинг@Mail.ru


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