Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32, SourceryG++, FreeRTOS.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
MrYuran
В общем, почти всё собрал, исходники скомпилились, дошло дело до линкера.

Ошибка Нр раз:
в файле линковки есть вкрапление "INCLUDE stm32f10cl-names.inc", которого в проекте нет.
Может, это что-то стандартное? Где взять?
Если закомментировать, далее идёт "arm-none-eabi/bin/ld.exe: cannot find -lcs3stm32f10cl"

На всякий случай, вот что прилагается к проекту.
Нажмите для просмотра прикрепленного файла

Ещё вот картинку откопал:
Нажмите для просмотра прикрепленного файла

Hosted и Unhosted - это что значит?

Сдается мне, все это надо искать в Sourcery, но не Lite sad.gif
Может, ещё где можно взять?

PS: если что, я только учусь sm.gif
AHTOXA
Цитата(MrYuran @ Oct 5 2011, 17:58) *
Сдается мне, все это надо искать в Sourcery, но не Lite sad.gif

Да, судя по шапкам - это не lite.
Но это не страшно, для сборки примера FreeRtos наворотов не-lite и не нужно.
MrYuran
Цитата(AHTOXA @ Oct 5 2011, 18:30) *
Но это не страшно, для сборки примера FreeRtos наворотов не-lite и не нужно.

А что нужно?
Если беру стандартный стартап из CMSIS, то "undefined reference to _init" и ещё чего-то в этом духе.
dimka76
А где вы этот проект взяли ?
MrYuran
Цитата(dimka76 @ Oct 6 2011, 08:33) *
А где вы этот проект взяли ?

Ой, где только не взял... Сборная солянка.
Ещё раз вопрос задам: что же такое "hosted" и "unhosted"?
мне вообще-то нужно что-то типа "standalone", то есть резидентно во флеше
AHTOXA
Как я понимаю, hosted = с операционной системой, unhosted = программа всё делает сама.
Для старта советую взять пример от scmRTOS, там всё достаточно понятно.
msalov
Цитата(AHTOXA @ Oct 6 2011, 08:22) *
Как я понимаю, hosted = с операционной системой, unhosted = программа всё делает сама.

hosted - работа с отладчиком, когда вызовы write, read, ioctl и других передаётся десктопной ОС
unhosted - все обработчики локализованы в МК.
То есть в случае hosted программы - вызов printf напечатает на компьютере к которому подключен отладчик (если не подключён - хз).
MrYuran
Спасибо, я тоже как-то в этом духе себе представлял.
MrYuran
Вот ещё:
Цитата
arm-none-eabi/lib/thumb2\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text+0x12): undefined reference to `_sbrk'

что за фокусы?
AHTOXA
А это значит, что программе понадобилось динамическое распределение памяти. См. здесь.
klen
Цитата(AHTOXA @ Oct 6 2011, 15:03) *
А это значит, что программе понадобилось динамическое распределение памяти. См. здесь.


сдается мне что не "программе" нужен _sbrk_r а какойнибудь функции из libc. настоятельно не рекомендую доводить до такого сотояния когда дизайн проги требует такие вещи.
Пример. Даю 50% гарантию что в данном случае прога вызывает что то типа printf. такая функция тянет за собой кучу дряни вплоть до распределения памяти. хуже всего то что это не всегда вылазит - если засунуть в printf в качестве аргумента int то скомпилится и даже работать будет. а вот если float или double (ну типа нада на LCD вывести данные) то тут пудет превеД.

отсюда выводы которые я делаю в таких случаях
1. используемая (в данном случае это скорее всего libc ) среда не портирована в достаточной степени для эмбеддед. Я подозреваю что среда тупо использует newlib.
2. необходимо самому реализовать или взять готовую "легкую" версию функционала из библиотек. например dietl ibc, или чтото похожее.

MrYuran
Цитата(AHTOXA @ Oct 6 2011, 15:03) *
А это значит, что программе понадобилось динамическое распределение памяти. См. здесь.

Подставил, теперь нужен правильный скрипт сборки.
Цитата
./stf_syscalls_minimal.o: In function `_write':
...\STM32_FREERTOS_LWIP/stf_syscalls_minimal.c:71: undefined reference to `putChar'
./stf_syscalls_minimal.o: In function `_sbrk':
...\STM32_FREERTOS_LWIP/stf_syscalls_minimal.c:130: undefined reference to `_heap'
...\STM32_FREERTOS_LWIP/stf_syscalls_minimal.c:130: undefined reference to `_eheap'

ну, путчар не в счёт...
AHTOXA
Цитата(klen @ Oct 6 2011, 17:30) *
сдается мне что не "программе" нужен _sbrk_r а какойнибудь функции из libc. настоятельно не рекомендую доводить до такого сотояния когда дизайн проги требует такие вещи.

Насколько я помню, там банально один из аллокаторов во FreeRtos использует стандартные malloc и free. Хотя могу и путать, смотрел мельком.
Цитата(MrYuran @ Oct 6 2011, 17:39) *
Подставил, теперь нужен правильный скрипт сборки.

Я уже предложил вариант с правильным скриптом и всем прочимsm.gif
Ещё вот тут выкладывал чисто сишный вариант, с printf и malloc. Makefile там такой, что хватает всё, что лежит в папке src.
alx2
Цитата(klen @ Oct 6 2011, 16:30) *
сдается мне что не "программе" нужен _sbrk_r а какойнибудь функции из libc. настоятельно не рекомендую доводить до такого сотояния когда дизайн проги требует такие вещи.
Я не согласен с тем, что динамическое распределение памяти - однозначное зло. Это вполне имеющее право на существование средство, которое успешно работает в миллионах самых разных программ. У динамического управления памяти, как и у любого другого, есть свои преимущества и свои недостатки. Их просто надо знать и учитывать при проектировании программы.

Цитата(klen @ Oct 6 2011, 16:30) *
Пример. Даю 50% гарантию что в данном случае прога вызывает что то типа printf. такая функция тянет за собой кучу дряни вплоть до распределения памяти. хуже всего то что это не всегда вылазит - если засунуть в printf в качестве аргумента int то скомпилится и даже работать будет. а вот если float или double (ну типа нада на LCD вывести данные) то тут пудет превеД.
Что, не будет работать? Почему вдруг? sm.gif

Цитата(klen @ Oct 6 2011, 16:30) *
1. используемая (в данном случае это скорее всего libc ) среда не портирована в достаточной степени для эмбеддед. Я подозреваю что среда тупо использует newlib.
Я применял newlib в целой куче разных эмбеддед проектов. printf там прекрасно работает и с int, и с float, и с long long...
MrYuran
В общем, решил для начала упростить задачу, взял готовый пример от STM - AN3241.
ЧистаГУИ без всяких РТОС.
Вроде все родное, стартап, скрипт...
А все равно:
../arm-none-eabi/lib/thumb2\libc.a(lib_a-init.o): In function `__libc_init_array':
init.c:(.text+0x38): undefined reference to `_init'

Собираю (пытаюсь) с такими параметрами:
LINKER_FLAGS= -mcpu=cortex-m3 -Xlinker -oRTOSDemo.axf -Xlinker -M -Xlinker -Map=rtosdemo.map -Xlinker --gc-sections

Если убираю -nostartfiles, то собирается, но не работает (по крайней мере, на экране ничего нет).

Где бы порыться...
Make_Pic
Цитата(MrYuran @ Oct 10 2011, 10:45) *
В общем, решил для начала упростить задачу, взял готовый пример от STM - AN3241.
ЧистаГУИ без всяких РТОС.
Вроде все родное, стартап, скрипт...
А все равно:
../arm-none-eabi/lib/thumb2\libc.a(lib_a-init.o): In function `__libc_init_array':
init.c:(.text+0x38): undefined reference to `_init'

Собираю (пытаюсь) с такими параметрами:
LINKER_FLAGS= -mcpu=cortex-m3 -Xlinker -oRTOSDemo.axf -Xlinker -M -Xlinker -Map=rtosdemo.map -Xlinker --gc-sections

Если убираю -nostartfiles, то собирается, но не работает (по крайней мере, на экране ничего нет).

Где бы порыться...


файл стартап имеет расширение *.s или *.S ? Последнее - большая S правильно для Sourcery G++
msalov
Цитата(Make_Pic @ Oct 13 2011, 00:47) *
файл стартап имеет расширение *.s или *.S ? Последнее - большая S правильно для Sourcery G++

http://labor-liber.org/en/gnu-linux/development/extensions
Цитата
.s Assembler code.
.S Assembler code which must be preprocessed.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.