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



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

У меня scmRTOS v5.0 прекрасно работает на STM32F051.
u37
Благодарю за помощь!
Начал причесывать проект после 3-х дней "издевательств" и обнаружил замечательную наведенную ошибку. Теперь всё работает.
В начальной инициализации, перед main, существует вставка "__libc_init_array". По заверению , эта "фича" избыточна, т.к. выхода из main не существует. В других моих проектах ее наличие/отсутствие никак не сказывается, вот я ее и убрал. Не люблю оставлять в коде то, что не является нужным, вылезет доком. Увы, "вылезло", минус 3 дня. ((
Извините.
Сергей Борщ
QUOTE (u37 @ Jun 21 2016, 10:49) *
В начальной инициализации, перед main, существует вставка "__libc_init_array". По заверению , эта "фича" избыточна, т.к. выхода из main не существует.
Вы читаете невнимательно - там это писалось про __libc_fini_array. __libc_init_array не нужен, если вы пишете на "голом" C и у вас нет функций с атрибутом "constructor".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.