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

 
 
> 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
Ответов
Harvester
сообщение Dec 28 2010, 03:36
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Исключение Hard Fault, также как сброс и NMI, является системным исключением с фиксированным приоритетом и разрешено всегда.
Данное исключение генерируется при появлении исключений Bus Fault, MemManage Fault, Usage Fault, если соответствующие исключения запрещены. Также Hard Fault может генерироваться при отказе шины во время выборки вектора из таблицы. Причина исключения Hard Fault - см. регистр HFSR (0xE000ED2C).
Примечание: Если очень нужно запретить HArd Fault, то можно установить регистр FAULTMASK - при этом разрешенным останется только NMI

Сообщение отредактировал IgorKossak - Dec 28 2010, 11:06
Причина редактирования: Бездумное цитирование


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
Serj78
сообщение Dec 28 2010, 12:14
Сообщение #3


Знающий
****

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



Цитата(Harvester @ Dec 28 2010, 09:36) *
Также Hard Fault может генерироваться при отказе шины во время выборки вектора из таблицы. Причина исключения Hard Fault - см. регистр HFSR (0xE000ED2C).
Примечание: Если очень нужно запретить HArd Fault, то можно установить регистр FAULTMASK - при этом разрешенным останется только NMI


Спасибо за ответы, но мне не понятно главное- суть системы исключений.

Слово "отказ" я воспринимаю как некую неисправность, возникающую по причине несоответствия конструкции (в данном случае контроллера) условиям работы.
Это некие "затычки" против системных отказов? Как вообще может возникнуть "отказ шины" (имеется в виду, очевидно, внутренняя шина данных контроллера? )

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

Недавно перешел с более простой архитектуры ( AVR) там, такого понятия нет, вот и спрашиваю....
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 28 2010, 13:59
Сообщение #4


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

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



Цитата(Serj78 @ Dec 28 2010, 20:14) *
Больше всего интересует, что я могу в программе написать такое, чтобы возникло это исключение?

Например вот так:
Код
void make_hard_fault()
{
    __asm volatile
    (
        "MOVS r0, #1       \n"
        "LDM r0,{r1-r2}    \n"
        "BX LR                \n"
    );
}

Это попытка чтения по невыровненному адресу. Будет исключение.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Serj78   STM32 Обработка hard fault exception   Dec 28 2010, 02:19
- - 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
- - sonycman   У меня была как то проблема с таким вылетом - в ис...   Dec 29 2010, 06:40
|- - AHTOXA   Цитата(sonycman @ Dec 29 2010, 14:40) Не ...   Dec 29 2010, 09:31
|- - sonycman   Цитата(AHTOXA @ Dec 29 2010, 17:31) Я вид...   Dec 29 2010, 11:58
|- - 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 Текстовая версия Сейчас: 22nd July 2025 - 14:03
Рейтинг@Mail.ru


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