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

 
 
> Stm32 HardFault_Handler
tag
сообщение Dec 15 2011, 14:03
Сообщение #1


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

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Осваиваю STM32VLDISCOVERY. Запустил RTC и пытаюсь разрешить прерывания:




Код
    NVIC_InitTypeDef NVIC_InitStructure;
    
    // Enable the RTC Interrupt.
    NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 10;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 10;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);






При вызове NVIC_Init() процессор вываливается в HardFault_Handler. Посмотрел пошагово эту функцию, при выполнении строки:

Код
tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;


я сразу же попадаю в HardFault_Handler. В чём может быть причина?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Dec 16 2011, 06:57
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (tag @ Dec 15 2011, 16:03) *
при выполнении строки:
Спуститесь еще на уровень ниже. Поройдите по дизассемблированному коду и определите - на какой конкретно команде происходит прокол и что находится в используемых регистрах.
[тут ерунду написал, удалил]
В указанной вами строке используется чтение SCB->AIRCR, надо смотреть - действительно ли по этому адресу производится чтение и если нет - разбираться почему.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
tag
сообщение Dec 16 2011, 08:15
Сообщение #3


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

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(Сергей Борщ @ Dec 16 2011, 09:57) *
Спуститесь еще на уровень ниже. Поройдите по дизассемблированному коду и определите - на какой конкретно команде происходит прокол и что находится в используемых регистрах.
[тут ерунду написал, удалил]
В указанной вами строке используется чтение SCB->AIRCR, надо смотреть - действительно ли по этому адресу производится чтение и если нет - разбираться почему.





спустился ниже:





Код
       123:     tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
0x08000568 4C1B      LDR      r4,[pc,#108] ; @0x080005D8 <- Вылетает здесь
0x0800056A 6824      LDR      r4,[r4,#0x00]
0x0800056C F40464E0  AND      r4,r4,#0x700
0x08000570 F5C464E0  RSB      r4,r4,#0x700
0x08000574 EA4F2114  LSR      r1,r4,#8


Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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