|
Ошибка UsageFault_Handler в STM32F103RE |
|
|
|
May 20 2015, 07:09
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 11-04-09
Пользователь №: 47 508

|
Использую процессор STM32F103, среда IAR 6.21. Пытаюсь на нем запустить GUI STemWin. Как будто уже заработало, но никак не могу избавиться от досадной ошибки. Обнаружил, что при иннициализации GUI процессор вылетает в ошибку CMSIS UsageFault_Handler. Отладчиком прошел и обнаружил, на какой именно команде вылетает - ассемблерная команда BLX R1, и что интересно, если в отладчике поставить брэйкпойнт на эту команду, а после остановки запустить выполнение программы дальше, программа в ошибку не вылетает, иннициализация GUI проходит и дальше все работает. Загружал уже много примеров из GUI, начал делать свое приложение. Но ошибка никуда не делась, программа остается нерабочей, запустить можно только с дебаггером. При вылете в UsageFault_Handler в регистре CFSR устанавливается флаг ошибки INVSTATE. Вот тут http://badembed.ru/hard-fault-memmanage-fa...ault-cortex-m3/ прочитал, что это может происходить при некорректном переходе из режима Thumb в ARM при выполенении команды безусловного перехода BLX, из-за неправильной установки младшего бита в команде из-за разности выравнивания по границе слова при переходе из 16-битного в 32-битный режим. При проходе отладчиком ничего некорректного не обнаружил (ну да оно и не зависает при пошаговой отладке этого места). Самое главное, что что-то изменить в этом коде я не могу, так как не имею исходников GUI, а подключаю откомпилированию библиотеку, скаченную с сайта st.com, и кусок ассемблерного кода с зависанием оттуда. Размеры и адреса памяти у меня вроде заданы правильно, увеличение размера стека не помогает. Также как и попытки методом тыка поменять опции проекта и настройки компилятора. Я понимаю, что наверное мало кто работал именно с emWin, и может быть это какой-то баг GUI, но уж точно кто-то сталкивался с такой ошибкой или просто хорошо разбирается, и подскажут что можно сделать
Эскизы прикрепленных изображений
|
|
|
|
|
May 20 2015, 08:16
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 11-04-09
Пользователь №: 47 508

|
Значение R1 0x08004C30, да, ноль Получается ошибка? А как исправить?
Сообщение отредактировал lehacheb - May 20 2015, 08:19
|
|
|
|
|
May 20 2015, 11:54
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 11-04-09
Пользователь №: 47 508

|
Да вот пытаюсь что-то найти, в настройках компилятора есть переключатель ARM/Thumb, но при выборе ядра Cortex M3 он (как выяснилось логично  ) становится недоступным и встает в режим Thumb.
|
|
|
|
|
May 20 2015, 12:13
|

Знающий
   
Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663

|
Цитата(lehacheb @ May 20 2015, 15:54)  Да вот пытаюсь что-то найти, в настройках компилятора есть переключатель ARM/Thumb, но при выборе ядра Cortex M3 он (как выяснилось логично  ) становится недоступным и встает в режим Thumb. Может надо не обобщённое ядро M3 выбирать, а конкретно контроллер STM32F…? Версия GUI последняя, свежая, стабильная?
--------------------
Пролетарий умственного труда.
|
|
|
|
|
May 20 2015, 12:27
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 11-04-09
Пользователь №: 47 508

|
Нет, я конечно выбираю контроллер STM32F10XXE. Версия GUI не самая последняя - июль 2013, но эта та версия, которая в свободном достипе на сайте stm. А самую последнюю с исходниками покупать надо
|
|
|
|
|
Jun 4 2015, 05:23
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 11-04-09
Пользователь №: 47 508

|
Пробовал компилировать в разных версия IAREW ARM (6.50, 7.40). В принципе ничего не меняется. В зависимости от кода, опций компилятора и еще непонятно чего вылетает в разных местах кода, ошибки разные (HardFault_Handler, BusFault_Handler, UsageFault_Handler), биты в регистре CFSR выскакивают тоже разные (INVSTATE, IACCVIOL, PRECISERR, IMPRECISERR, BFARVALID). Никакое изменение опций проекта не помогает. Взял все настройки из примера проекта, который идет с библиотекой, не помогло. Кроме младшего бита 0 в команде BLX программа может также вылетать по команде перехода по адресу, превышающему размеры FLASH (больше 0x807 FFFF). Как такое может быть? Может кто-нибудь подскажет, куда обратиться за техподдержкой?
|
|
|
|
|
Jun 6 2015, 07:44
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Вылетать fault из-за попытки переключения в ARM-режим может например если у Вас есть функция в asm-файле и перед ней Вы забыли указать директиву THUMB. По дефолту IAR скомпилит функцию в ARM-режим и при попытке её вызова и будет означенный fault. Цитата(lehacheb @ Jun 4 2015, 11:23)  ошибки разные (HardFault_Handler, BusFault_Handler, UsageFault_Handler), биты в регистре CFSR выскакивают тоже разные (INVSTATE, IACCVIOL, PRECISERR, IMPRECISERR, BFARVALID). ... Кроме младшего бита 0 в команде BLX программа может также вылетать по команде перехода по адресу, превышающему размеры FLASH (больше 0x807 FFFF). Как такое может быть? Из-за тысячи причин. Например: внутри функции разрушаете стек и при попытке возврата из функции происходит переход по левому адресу. Очевидно Вам следует заняться отладкой своего кода и поиском багов в нём.
|
|
|
|
|
Jun 8 2015, 04:37
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 11-04-09
Пользователь №: 47 508

|
Цитата(jcxz @ Jun 6 2015, 10:44)  Вылетать fault из-за попытки переключения в ARM-режим может например если у Вас есть функция в asm-файле и перед ней Вы забыли указать директиву THUMB. По дефолту IAR скомпилит функцию в ARM-режим и при попытке её вызова и будет означенный fault.
Из-за тысячи причин. Например: внутри функции разрушаете стек и при попытке возврата из функции происходит переход по левому адресу. Очевидно Вам следует заняться отладкой своего кода и поиском багов в нём. Так я же объясняю, у меня нет исходников GUI, я подключаю в проекте библиотеку STemWin522_CM3_IAR.a, внутри при выполнении GUI_Init() зависает.
|
|
|
|
|
Jun 8 2015, 12:38
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(lehacheb @ Jun 8 2015, 10:37)  Так я же объясняю, у меня нет исходников GUI, я подключаю в проекте библиотеку STemWin522_CM3_IAR.a, внутри при выполнении GUI_Init() зависает. Вы что пытаетесь сказать? Библиотека кри вая и поэтому глючит? Тогда выкиньте её - ничего всё равно не добьётесь. Если же всё-таки считаете, что библиотека рабочая - ищите ошибки у себя. Выясните хотя-бы - откуда у Вас берётся адрес с 0 в мл. бите в BLX? Воспользуйтесь отладчиком. Возможно библиотеку взяли не для того ядра. Хотя, если у Вас там разные fault-ы сыпятся, то тут какая-то системная ошибка, может что-то разрушаете . Оглядите весь остальной код (кроме работы с библиотекой). Цитата(Obam @ Jun 8 2015, 12:34)  На удачу, может письмишко в ST написать? За спрос денег не возьмут. Проигнорят и правильно сделают.
|
|
|
|
|
Jun 9 2015, 04:49
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 11-04-09
Пользователь №: 47 508

|
Цитата(Golikov A. @ Jun 8 2015, 20:02)  не проигнорят, ответят что разберутся, и вот тогда проигнорят... Только если проблема такая только у вас, то ответа будете ждать очень долго.... Нет, не только у меня! Вот у товарища Muhammadа такая же проблема, товарищ Хайзенберг хотел ему помочь, но все заглохло, а мне не отвечают. https://my.st.com/public/STe2ecommunities/m...currentviews=84А вообще планирую попробовать перейти на CooCox
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|