|
STM32, SourceryG++, FreeRTOS., Ошибка линковки. Нид хелп! |
|
|
|
Oct 5 2011, 11:58
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
В общем, почти всё собрал, исходники скомпилились, дошло дело до линкера. Ошибка Нр раз: в файле линковки есть вкрапление "INCLUDE stm32f10cl-names.inc", которого в проекте нет. Может, это что-то стандартное? Где взять? Если закомментировать, далее идёт "arm-none-eabi/bin/ld.exe: cannot find -lcs3stm32f10cl" На всякий случай, вот что прилагается к проекту.
STM32_FREERTOS_LWIP.zip ( 3.44 килобайт )
Кол-во скачиваний: 101Ещё вот картинку откопал:
Hosted и Unhosted - это что значит? Сдается мне, все это надо искать в Sourcery, но не Lite  Может, ещё где можно взять? PS: если что, я только учусь
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 16)
|
Oct 6 2011, 05:17
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(dimka76 @ Oct 6 2011, 08:33)  А где вы этот проект взяли ? Ой, где только не взял... Сборная солянка. Ещё раз вопрос задам: что же такое "hosted" и "unhosted"? мне вообще-то нужно что-то типа "standalone", то есть резидентно во флеше
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Oct 6 2011, 06:09
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(AHTOXA @ Oct 6 2011, 08:22)  Как я понимаю, hosted = с операционной системой, unhosted = программа всё делает сама. hosted - работа с отладчиком, когда вызовы write, read, ioctl и других передаётся десктопной ОС unhosted - все обработчики локализованы в МК. То есть в случае hosted программы - вызов printf напечатает на компьютере к которому подключен отладчик (если не подключён - хз).
|
|
|
|
|
Oct 6 2011, 11:30
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
Цитата(AHTOXA @ Oct 6 2011, 15:03)  А это значит, что программе понадобилось динамическое распределение памяти. См. здесь. сдается мне что не "программе" нужен _sbrk_r а какойнибудь функции из libc. настоятельно не рекомендую доводить до такого сотояния когда дизайн проги требует такие вещи. Пример. Даю 50% гарантию что в данном случае прога вызывает что то типа printf. такая функция тянет за собой кучу дряни вплоть до распределения памяти. хуже всего то что это не всегда вылазит - если засунуть в printf в качестве аргумента int то скомпилится и даже работать будет. а вот если float или double (ну типа нада на LCD вывести данные) то тут пудет превеД. отсюда выводы которые я делаю в таких случаях 1. используемая (в данном случае это скорее всего libc ) среда не портирована в достаточной степени для эмбеддед. Я подозреваю что среда тупо использует newlib. 2. необходимо самому реализовать или взять готовую "легкую" версию функционала из библиотек. например dietl ibc, или чтото похожее.
|
|
|
|
|
Oct 6 2011, 11:39
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(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' ну, путчар не в счёт...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Oct 6 2011, 17:50
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(klen @ Oct 6 2011, 17:30)  сдается мне что не "программе" нужен _sbrk_r а какойнибудь функции из libc. настоятельно не рекомендую доводить до такого сотояния когда дизайн проги требует такие вещи. Насколько я помню, там банально один из аллокаторов во FreeRtos использует стандартные malloc и free. Хотя могу и путать, смотрел мельком. Цитата(MrYuran @ Oct 6 2011, 17:39)  Подставил, теперь нужен правильный скрипт сборки. Я уже предложил вариант с правильным скриптом и всем прочим  Ещё вот тут выкладывал чисто сишный вариант, с printf и malloc. Makefile там такой, что хватает всё, что лежит в папке src.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Oct 7 2011, 08:52
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(klen @ Oct 6 2011, 16:30)  сдается мне что не "программе" нужен _sbrk_r а какойнибудь функции из libc. настоятельно не рекомендую доводить до такого сотояния когда дизайн проги требует такие вещи. Я не согласен с тем, что динамическое распределение памяти - однозначное зло. Это вполне имеющее право на существование средство, которое успешно работает в миллионах самых разных программ. У динамического управления памяти, как и у любого другого, есть свои преимущества и свои недостатки. Их просто надо знать и учитывать при проектировании программы. Цитата(klen @ Oct 6 2011, 16:30)  Пример. Даю 50% гарантию что в данном случае прога вызывает что то типа printf. такая функция тянет за собой кучу дряни вплоть до распределения памяти. хуже всего то что это не всегда вылазит - если засунуть в printf в качестве аргумента int то скомпилится и даже работать будет. а вот если float или double (ну типа нада на LCD вывести данные) то тут пудет превеД. Что, не будет работать? Почему вдруг?  Цитата(klen @ Oct 6 2011, 16:30)  1. используемая (в данном случае это скорее всего libc ) среда не портирована в достаточной степени для эмбеддед. Я подозреваю что среда тупо использует newlib. Я применял newlib в целой куче разных эмбеддед проектов. printf там прекрасно работает и с int, и с float, и с long long...
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Oct 12 2011, 21:47
|

Знающий
   
Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828

|
Цитата(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++
|
|
|
|
|
Oct 13 2011, 07:24
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(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.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|