STM32, IAR и прерывания
Re: STM32, IAR и прерывания
А таблица прерываний в свою очередь описана в 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 - ветка на ту же тему
Если попадает в 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 - ветка на ту же тему
Re: STM32, IAR и прерывания
Galizin писал(а):Особое внимание нужно обратить на Illegal unaligned load or store. Данные должны быть выравнены на свою длину. То есть адрес перемененной длиной 2 байта должен быть кратен 2. 4 байта - 4. Эта особенность arm не всем известна.
Начиная с ARMv6 не должны.
Re: STM32, IAR и прерывания
Обычно хардфаюлт просто - в таблице прерываний мусор или паддинг, разрешается прерывание, по таблицы попадает мимо памяти -)))
-
bishop-strip
- Открыл глаза
- Сообщения: 71
- Зарегистрирован: Чт окт 28, 2010 11:20:39
Re: STM32, IAR и прерывания
Товарищи, так почему сий код работает в атоллике, а в IAR нет?!
Скажите как я могу решить проблему?
Может есть какие-нибудь волшебные настройки проекта?
Скажите как я могу решить проблему?
Может есть какие-нибудь волшебные настройки проекта?
-
bishop-strip
- Открыл глаза
- Сообщения: 71
- Зарегистрирован: Чт окт 28, 2010 11:20:39
Re: STM32, IAR и прерывания
Satyr писал(а):Обычно хардфаюлт просто - в таблице прерываний мусор или паддинг, разрешается прерывание, по таблицы попадает мимо памяти -)))
Тогда как мне очистить этот мусор?
Re: STM32, IAR и прерывания
Посмотри, что там в самом начале памяти при дебаге ?
Да проще - в мапе линкера посмотри, функция обработки прерывания твоя вобще пошла в бинарник ? ))
Да проще - в мапе линкера посмотри, функция обработки прерывания твоя вобще пошла в бинарник ? ))
Re: STM32, IAR и прерывания
bishop-strip писал(а):Товарищи, так почему сий код работает в атоллике, а в IAR нет?!
Не код, а обрывок кода
Хоче, клади тут ИАРный проект, ща заценим
-
bishop-strip
- Открыл глаза
- Сообщения: 71
- Зарегистрирован: Чт окт 28, 2010 11:20:39
Re: STM32, IAR и прерывания
Satyr писал(а):bishop-strip писал(а):Товарищи, так почему сий код работает в атоллике, а в IAR нет?!
Не код, а обрывок кода![]()
Хоче, клади тут ИАРный проект, ща заценим
Да дело в том, что пустой проект, есть только маин и эти функции)))
У меня возникла идея
Возможно не хватало файла startup_stm32f4xx.s, где описана таблица векторов прерываний?
как мне его(файл) подключить в IAR??
возможно нужен какой-то INCLUDE???
Re: STM32, IAR и прерывания
добавь в проект.
это обычный файл на асме
это обычный файл на асме
-
bishop-strip
- Открыл глаза
- Сообщения: 71
- Зарегистрирован: Чт окт 28, 2010 11:20:39
Re: STM32, IAR и прерывания
Satyr писал(а):добавь в проект.
это обычный файл на асме
Добавлял уже, ругается на все строчки, видимо компилятор не понимает АСМ, может есть настройки проекта для асма?
пишет на все строки - error[40]: Bad instruction
Re: STM32, IAR и прерывания
bishop-strip писал(а):Satyr писал(а):добавь в проект.
это обычный файл на асме
Добавлял уже, ругается на все строчки, видимо компилятор не понимает АСМ, может есть настройки проекта для асма?
пишет на все строки - error[40]: Bad instruction
Конечно.
глянул начало тему - у тебя ж STM32F101V8
этот файл под stm32f4xx
поищи правильный стартап файл под свой процессор.
там вначале в окмментах написано под какие.
-
bishop-strip
- Открыл глаза
- Сообщения: 71
- Зарегистрирован: Чт окт 28, 2010 11:20:39
Re: STM32, IAR и прерывания
Мораль сей басни такова, что ATOLLIC'у хорошо, IAR'у - смерть!
Итак, проблема была такова, не хватало файла startup_stm32f4xx.s, в котором описаны вектора прерываний.
Из АТОЛЛЛИКовского проекта я взял, который работал там, но он оказался не подходящим для IAR.
Из примеров, arm\examples\ST\STM32F4xx\, я нашел эти файлы, вставил в проект и всё заработало!
Всем еще раз огромное спасибо!

Re: STM32, IAR и прерывания
bishop-strip писал(а):Мораль сей басни такова, что ATOLLIC'у хорошо, IAR'у - смерть!![]()
Не скажу за атоллик, хотя сильно подозреваю -))
Но IAR - выпускает профессиональные компиляторы, дающие абсолютную гибкость в реализации абсолютно любых действий и настроек.
Очевидная обратная сторона медали - он ничего не делает за тебя.
Re: STM32, IAR и прерывания
bishop-strip писал(а):Мораль сей басни такова, что ATOLLIC'у хорошо, IAR'у - смерть!![]()
Если Вы и далее будете совершать ритуальные танцы вместо планомерного изучения , Вас ожидает еще масса удивительных "открытий".
Изначально же ясно что компиляторы у сабжей разные .
Re: STM32, IAR и прерывания
Дело не в компиляторах.
Я так понимаю, атоллик он там с визардами и прочей помощью.
IAR - это выгрузка в чистом поле, но с любыми существующими в природе инструментами -))
Еще и открытый насквозь - сам можешь описания, лодеры к любым новым чипам писать. К отладчику плагины и т.д. и т.п. Можно ВСЁ
Я так понимаю, атоллик он там с визардами и прочей помощью.
IAR - это выгрузка в чистом поле, но с любыми существующими в природе инструментами -))
Еще и открытый насквозь - сам можешь описания, лодеры к любым новым чипам писать. К отладчику плагины и т.д. и т.п. Можно ВСЁ
Re: STM32, IAR и прерывания
Satyr писал(а):Дело не в компиляторах.
Я так понимаю, атоллик он там с визардами и прочей помощью.
А толку от этих визардов ?
Вот натыкавшись визардов пациент не может создать проект в IAR , а в поставке IAR есть все что нужно.
И CMSIS и хэдеры периферии и стартап.
Re: STM32, IAR и прерывания
Недавно столкнулся с подобной проблемой: прерывание генерируется (флаг прерывания установлен), однако в функцию-обработчик прерывания программа не попадает, застревает в стартап фаиле в строчке с названием этои функции-обработчика (в моем случае "B EXTI0_IRQHandler").
Все необходимые фаилы (стартап, system_stm32f10x), предлагаемые в этои теме были добавлены в проект, но безрезультатно.
Проблема решилась переключением языка компилятора с "C++" на "C" в настройках проекта (Project -> Options... -> C/C++ compiler -> Language 1 -> галочку на "С").
Все необходимые фаилы (стартап, system_stm32f10x), предлагаемые в этои теме были добавлены в проект, но безрезультатно.
Проблема решилась переключением языка компилятора с "C++" на "C" в настройках проекта (Project -> Options... -> C/C++ compiler -> Language 1 -> галочку на "С").
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: STM32, IAR и прерывания
dm#2 писал(а):
Проблема решилась переключением языка компилятора с "C++" на "C" в настройках проекта (Project -> Options... -> C/C++ compiler -> Language 1 -> галочку на "С").
Ай, спасибо тебе за это сообщение! Я вторые сутки голову ломал, почему же ничего не работает! Как вообще это могло повлиять на работу программы?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
Re: STM32, IAR и прерывания
Потому что забыли сказать компилятору, что это Си функция
Код: Выделить всё
extern "C" {
void EXTI0_IRQHandler(void);
}
Иван Сусанин - первый полупроводник 
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: STM32, IAR и прерывания
Myp3ik писал(а):Потому что забыли сказать компилятору, что это Си функцияКод: Выделить всё
extern "C" {
void EXTI0_IRQHandler(void);
}
Спасибо за разъяснение ))
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн