u37 0 20 июня, 2016 Опубликовано 20 июня, 2016 · Жалоба Попробовал поставить scmRTOS v5.1 на STM32F030 под GCC - программа компилируется но дает неправильный результат. При выполнении первой же инструкции в asm последовательности следует HardFault. Компилятор arm-eabi (кажется 5.3.0) Но это не всё. Если заменить MCU на STM32F103, то тот-же (аналогично собранный) проект работает сразу, без какого либо вмешательства. По картинке - (на STM32F030) Инструкция, на которой следует зависание, будет исполняться "сейчас": Вариант под Keil v4.0 под CortexM0 у меня есть, он нормально работает, но мне нужно под GСС. Если не затруднит, подскажите, как это исправить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 21 июня, 2016 Опубликовано 21 июня, 2016 · Жалоба По картинке - (на STM32F030) Инструкция, на которой следует зависание, будет исполняться "сейчас":А какой объем ОЗУ у вашего процессора? Эта инструкция будет грузить R2 из адреса 0x20001038. При этом указатель стрека (в котором на этом этапе находится адрес, близкий к концу ОЗУ) содержит меньший адрес 0x20000FE0. Похоже в вашем скрипте линкера неверно указан размер ОЗУ или еще каким-то образом неправильно распределена память и в этой команде получается обращение за границу ОЗУ. Если сами не разберетесь - выложите архив с полным проектом, посмотрим. У меня scmRTOS v5.0 прекрасно работает на STM32F051. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
u37 0 21 июня, 2016 Опубликовано 21 июня, 2016 (изменено) · Жалоба Благодарю за помощь! Начал причесывать проект после 3-х дней "издевательств" и обнаружил замечательную наведенную ошибку. Теперь всё работает. В начальной инициализации, перед main, существует вставка "__libc_init_array". По заверению , эта "фича" избыточна, т.к. выхода из main не существует. В других моих проектах ее наличие/отсутствие никак не сказывается, вот я ее и убрал. Не люблю оставлять в коде то, что не является нужным, вылезет доком. Увы, "вылезло", минус 3 дня. (( Извините. Изменено 21 июня, 2016 пользователем u37 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 21 июня, 2016 Опубликовано 21 июня, 2016 · Жалоба В начальной инициализации, перед main, существует вставка "__libc_init_array". По заверению , эта "фича" избыточна, т.к. выхода из main не существует.Вы читаете невнимательно - там это писалось про __libc_fini_array. __libc_init_array не нужен, если вы пишете на "голом" C и у вас нет функций с атрибутом "constructor". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться