|
Stm32 HardFault_Handler |
|
|
|
Dec 15 2011, 14:03
|
Частый гость
 
Группа: Свой
Сообщений: 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. В чём может быть причина?
|
|
|
|
|
 |
Ответов
|
Dec 16 2011, 06:57
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Dec 16 2011, 08:15
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 16 2011, 12:29
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561

|
Цитата(AHTOXA @ Dec 16 2011, 14:47)  Тогда проверьте значение, расположенное по указанному адресу (0x080005D8). Должно быть 0xE000ED00. Если это так, то всё, кранты - в ваш процессор забыли положить ядро  по указанному адресу (0x080005D8) значение 0xE000ED0С
|
|
|
|
|
Dec 16 2011, 15:28
|

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

|
А, ну да, правильно, я забыл смещение. Короче, в указанных строчках всё в порядке, ищите ошибку в другом месте. Обрезайте проект понемногу, ловите момент, когда ошибка пропадёт. Или наоборот, начните с пустого проекта и добавляйте помаленьку.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
tag Stm32 HardFault_Handler Dec 15 2011, 14:03 Pat Цитата(tag @ Dec 15 2011, 16:03) Кодtmppr... Dec 15 2011, 14:18 tag Цитата(Pat @ Dec 15 2011, 17:18) Скорее в... Dec 16 2011, 06:39 AHTOXA Вот эти строчки неверны:
Цитата(tag @ Dec 15 ... Dec 16 2011, 09:50 tag Исправил, результат тот же. Впрочем, так и должно ... Dec 16 2011, 10:11 chan Проверьте константу RTC_IRQn на всякий случай
/... Dec 16 2011, 15:59 tag Цитата(chan @ Dec 16 2011, 18:59) Проверь... Dec 19 2011, 09:09 tag Всем спасибо за участие. Проблема разрешилась, пра... Dec 20 2011, 13:12 Dron_Gus Видимо, доступ к соответствующим регистрам разреше... Dec 20 2011, 15:46 esaulenka Цитата(Dron_Gus @ Dec 20 2011, 19:46) Вид... Dec 22 2011, 15:31
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|