STM32, IAR и прерывания

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Сообщение Galizin »

А таблица прерываний в свою очередь описана в startup файле (что нибудь типа startup_stm32f10x_ld.s). Названия в этом файле и название функции обработчика должны совпадать.
Если попадает в hard fault exeption обработчик, то это и означает что этот самый hard fault exeption случился. Скорее всего название функции прерывания здесь ни при чем.
Нужно почитать документацию на cortex ядро. Там есть регистр(ы). который расшифровывает в каком именно месте этот самый hard fault exeption случился и по какой причине.
STM32F10xxx Cortex-M3 programming manual
PM0056
Programming manual
2.4 Fault handling
Особое внимание нужно обратить на Illegal unaligned load or store. Данные должны быть выравнены на свою длину. То есть адрес перемененной длиной 2 байта должен быть кратен 2. 4 байта - 4. Эта особенность arm не всем известна.
Работающий пример вроде должен лежать в библиотеке в каталоге Project/Examples/EXTI.
http://radiokot.ru/forum/viewtopic.php? ... 56&start=0 - ветка на ту же тему
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

Galizin писал(а): Особое внимание нужно обратить на Illegal unaligned load or store. Данные должны быть выравнены на свою длину. То есть адрес перемененной длиной 2 байта должен быть кратен 2. 4 байта - 4. Эта особенность arm не всем известна.
Начиная с ARMv6 не должны.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

Обычно хардфаюлт просто - в таблице прерываний мусор или паддинг, разрешается прерывание, по таблицы попадает мимо памяти -)))
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Сообщение bishop-strip »

Товарищи, так почему сий код работает в атоллике, а в IAR нет?!
Скажите как я могу решить проблему?
Может есть какие-нибудь волшебные настройки проекта? :shock:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Сообщение bishop-strip »

Satyr писал(а):Обычно хардфаюлт просто - в таблице прерываний мусор или паддинг, разрешается прерывание, по таблицы попадает мимо памяти -)))
Тогда как мне очистить этот мусор? :idea:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

Посмотри, что там в самом начале памяти при дебаге ?
Да проще - в мапе линкера посмотри, функция обработки прерывания твоя вобще пошла в бинарник ? ))
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

bishop-strip писал(а):Товарищи, так почему сий код работает в атоллике, а в IAR нет?!
Не код, а обрывок кода :)))

Хоче, клади тут ИАРный проект, ща заценим
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Сообщение bishop-strip »

Satyr писал(а):
bishop-strip писал(а):Товарищи, так почему сий код работает в атоллике, а в IAR нет?!
Не код, а обрывок кода :)))

Хоче, клади тут ИАРный проект, ща заценим
Да дело в том, что пустой проект, есть только маин и эти функции)))
У меня возникла идея :idea:
Возможно не хватало файла startup_stm32f4xx.s, где описана таблица векторов прерываний?
как мне его(файл) подключить в IAR??
возможно нужен какой-то INCLUDE???
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

добавь в проект.
это обычный файл на асме
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Сообщение bishop-strip »

Satyr писал(а):добавь в проект.
это обычный файл на асме
Добавлял уже, ругается на все строчки, видимо компилятор не понимает АСМ, может есть настройки проекта для асма?
пишет на все строки - error[40]: Bad instruction
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

bishop-strip писал(а):
Satyr писал(а):добавь в проект.
это обычный файл на асме
Добавлял уже, ругается на все строчки, видимо компилятор не понимает АСМ, может есть настройки проекта для асма?
пишет на все строки - error[40]: Bad instruction
Конечно.

глянул начало тему - у тебя ж STM32F101V8
этот файл под stm32f4xx
поищи правильный стартап файл под свой процессор.
там вначале в окмментах написано под какие.
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Сообщение bishop-strip »

:idea: Всё, решил проблему! ВСЕМ СПАСИБО ОГРОМНОЕ!!!! :idea:
Мораль сей басни такова, что ATOLLIC'у хорошо, IAR'у - смерть! :)))
Итак, проблема была такова, не хватало файла startup_stm32f4xx.s, в котором описаны вектора прерываний. :?
Из АТОЛЛЛИКовского проекта я взял, который работал там, но он оказался не подходящим для IAR. :o
Из примеров, arm\examples\ST\STM32F4xx\, я нашел эти файлы, вставил в проект и всё заработало! :beer:

Всем еще раз огромное спасибо! :beer:
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

bishop-strip писал(а): Мораль сей басни такова, что ATOLLIC'у хорошо, IAR'у - смерть! :)))
Не скажу за атоллик, хотя сильно подозреваю -))
Но IAR - выпускает профессиональные компиляторы, дающие абсолютную гибкость в реализации абсолютно любых действий и настроек.
Очевидная обратная сторона медали - он ничего не делает за тебя.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

bishop-strip писал(а): Мораль сей басни такова, что ATOLLIC'у хорошо, IAR'у - смерть! :)))

Если Вы и далее будете совершать ритуальные танцы вместо планомерного изучения , Вас ожидает еще масса удивительных "открытий".
Изначально же ясно что компиляторы у сабжей разные .
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

Дело не в компиляторах.
Я так понимаю, атоллик он там с визардами и прочей помощью.
IAR - это выгрузка в чистом поле, но с любыми существующими в природе инструментами -))

Еще и открытый насквозь - сам можешь описания, лодеры к любым новым чипам писать. К отладчику плагины и т.д. и т.п. Можно ВСЁ
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Satyr писал(а):Дело не в компиляторах.
Я так понимаю, атоллик он там с визардами и прочей помощью.
А толку от этих визардов ?
Вот натыкавшись визардов пациент не может создать проект в IAR , а в поставке IAR есть все что нужно.
И CMSIS и хэдеры периферии и стартап.
Родился
Сообщения: 1
Зарегистрирован: Ср авг 21, 2013 19:57:51

Сообщение dm#2 »

Недавно столкнулся с подобной проблемой: прерывание генерируется (флаг прерывания установлен), однако в функцию-обработчик прерывания программа не попадает, застревает в стартап фаиле в строчке с названием этои функции-обработчика (в моем случае "B EXTI0_IRQHandler").
Все необходимые фаилы (стартап, system_stm32f10x), предлагаемые в этои теме были добавлены в проект, но безрезультатно.

Проблема решилась переключением языка компилятора с "C++" на "C" в настройках проекта (Project -> Options... -> C/C++ compiler -> Language 1 -> галочку на "С").
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

dm#2 писал(а):
Проблема решилась переключением языка компилятора с "C++" на "C" в настройках проекта (Project -> Options... -> C/C++ compiler -> Language 1 -> галочку на "С").
Ай, спасибо тебе за это сообщение! Я вторые сутки голову ломал, почему же ничего не работает! Как вообще это могло повлиять на работу программы?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Потому что забыли сказать компилятору, что это Си функция

Код: Выделить всё

extern "C" {
    void EXTI0_IRQHandler(void);
}
Иван Сусанин - первый полупроводник :solder:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Myp3ik писал(а):Потому что забыли сказать компилятору, что это Си функция

Код: Выделить всё

extern "C" {
    void EXTI0_IRQHandler(void);
}
Спасибо за разъяснение ))
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Ответить

Вернуться в «ARM»