реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Зависание при запуске процедуры os_start на CortexM0 (GCC)
u37
сообщение Jun 20 2016, 23:51
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 8-09-10
Пользователь №: 59 379



Попробовал поставить scmRTOS v5.1 на STM32F030 под GCC - программа компилируется но дает неправильный результат. При выполнении первой же инструкции в asm последовательности следует HardFault.
Компилятор arm-eabi (кажется 5.3.0)
Но это не всё. Если заменить MCU на STM32F103, то тот-же (аналогично собранный) проект работает сразу, без какого либо вмешательства.
По картинке - (на STM32F030) Инструкция, на которой следует зависание, будет исполняться "сейчас":



Вариант под Keil v4.0 под CortexM0 у меня есть, он нормально работает, но мне нужно под GСС.
Если не затруднит, подскажите, как это исправить.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 21 2016, 05:59
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (u37 @ Jun 21 2016, 02:51) *
По картинке - (на STM32F030) Инструкция, на которой следует зависание, будет исполняться "сейчас":
А какой объем ОЗУ у вашего процессора? Эта инструкция будет грузить R2 из адреса 0x20001038. При этом указатель стрека (в котором на этом этапе находится адрес, близкий к концу ОЗУ) содержит меньший адрес 0x20000FE0. Похоже в вашем скрипте линкера неверно указан размер ОЗУ или еще каким-то образом неправильно распределена память и в этой команде получается обращение за границу ОЗУ. Если сами не разберетесь - выложите архив с полным проектом, посмотрим.

У меня scmRTOS v5.0 прекрасно работает на STM32F051.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
u37
сообщение Jun 21 2016, 07:49
Сообщение #3





Группа: Участник
Сообщений: 5
Регистрация: 8-09-10
Пользователь №: 59 379



Благодарю за помощь!
Начал причесывать проект после 3-х дней "издевательств" и обнаружил замечательную наведенную ошибку. Теперь всё работает.
В начальной инициализации, перед main, существует вставка "__libc_init_array". По заверению , эта "фича" избыточна, т.к. выхода из main не существует. В других моих проектах ее наличие/отсутствие никак не сказывается, вот я ее и убрал. Не люблю оставлять в коде то, что не является нужным, вылезет доком. Увы, "вылезло", минус 3 дня. ((
Извините.

Сообщение отредактировал u37 - Jun 21 2016, 07:50
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 21 2016, 12:20
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (u37 @ Jun 21 2016, 10:49) *
В начальной инициализации, перед main, существует вставка "__libc_init_array". По заверению , эта "фича" избыточна, т.к. выхода из main не существует.
Вы читаете невнимательно - там это писалось про __libc_fini_array. __libc_init_array не нужен, если вы пишете на "голом" C и у вас нет функций с атрибутом "constructor".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 20:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016