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

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

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

Сообщение 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.
viewtopic.php?f=59&t=91156&start=0 - ветка на ту же тему
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

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

Сообщение Satyr »

Galizin писал(а):Особое внимание нужно обратить на Illegal unaligned load or store. Данные должны быть выравнены на свою длину. То есть адрес перемененной длиной 2 байта должен быть кратен 2. 4 байта - 4. Эта особенность arm не всем известна.

Начиная с ARMv6 не должны.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

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

Сообщение Satyr »

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

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

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

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

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

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

Satyr писал(а):Обычно хардфаюлт просто - в таблице прерываний мусор или паддинг, разрешается прерывание, по таблицы попадает мимо памяти -)))

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

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

Сообщение Satyr »

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

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

Сообщение Satyr »

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

Не код, а обрывок кода :)))

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

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

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

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

Не код, а обрывок кода :)))

Хоче, клади тут ИАРный проект, ща заценим


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

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

Сообщение Satyr »

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

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

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

Satyr писал(а):добавь в проект.
это обычный файл на асме

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

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

Сообщение Satyr »

bishop-strip писал(а):
Satyr писал(а):добавь в проект.
это обычный файл на асме

Добавлял уже, ругается на все строчки, видимо компилятор не понимает АСМ, может есть настройки проекта для асма?
пишет на все строки - error[40]: Bad instruction

Конечно.

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

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

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

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

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

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

Сообщение Satyr »

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

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

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

Сообщение dosikus »

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



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

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

Сообщение Satyr »

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

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

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

Сообщение dosikus »

Satyr писал(а):Дело не в компиляторах.
Я так понимаю, атоллик он там с визардами и прочей помощью.


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

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

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

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

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

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

Сообщение Chip115 »

dm#2 писал(а):
Проблема решилась переключением языка компилятора с "C++" на "C" в настройках проекта (Project -> Options... -> C/C++ compiler -> Language 1 -> галочку на "С").


Ай, спасибо тебе за это сообщение! Я вторые сутки голову ломал, почему же ничего не работает! Как вообще это могло повлиять на работу программы?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

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

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

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

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

Сообщение Chip115 »

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

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

extern "C" {
    void EXTI0_IRQHandler(void);
}

Спасибо за разъяснение ))
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Ответить

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