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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32, SourceryG++, FreeRTOS., Ошибка линковки. Нид хелп!
MrYuran
сообщение Oct 5 2011, 11:58
Сообщение #1


Беспросветный оптимист
******

Группа: Свой
Сообщений: 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 sad.gif
Может, ещё где можно взять?

PS: если что, я только учусь sm.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 5 2011, 14:30
Сообщение #2


фанат дивана
******

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



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

Да, судя по шапкам - это не lite.
Но это не страшно, для сборки примера FreeRtos наворотов не-lite и не нужно.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 6 2011, 04:06
Сообщение #3


Беспросветный оптимист
******

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



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

А что нужно?
Если беру стандартный стартап из CMSIS, то "undefined reference to _init" и ещё чего-то в этом духе.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
dimka76
сообщение Oct 6 2011, 04:33
Сообщение #4


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



А где вы этот проект взяли ?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 6 2011, 05:17
Сообщение #5


Беспросветный оптимист
******

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



Цитата(dimka76 @ Oct 6 2011, 08:33) *
А где вы этот проект взяли ?

Ой, где только не взял... Сборная солянка.
Ещё раз вопрос задам: что же такое "hosted" и "unhosted"?
мне вообще-то нужно что-то типа "standalone", то есть резидентно во флеше


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 6 2011, 05:22
Сообщение #6


фанат дивана
******

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



Как я понимаю, hosted = с операционной системой, unhosted = программа всё делает сама.
Для старта советую взять пример от scmRTOS, там всё достаточно понятно.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
msalov
сообщение Oct 6 2011, 06:09
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(AHTOXA @ Oct 6 2011, 08:22) *
Как я понимаю, hosted = с операционной системой, unhosted = программа всё делает сама.

hosted - работа с отладчиком, когда вызовы write, read, ioctl и других передаётся десктопной ОС
unhosted - все обработчики локализованы в МК.
То есть в случае hosted программы - вызов printf напечатает на компьютере к которому подключен отладчик (если не подключён - хз).
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 6 2011, 06:45
Сообщение #8


Беспросветный оптимист
******

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



Спасибо, я тоже как-то в этом духе себе представлял.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 6 2011, 10:54
Сообщение #9


Беспросветный оптимист
******

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



Вот ещё:
Цитата
arm-none-eabi/lib/thumb2\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text+0x12): undefined reference to `_sbrk'

что за фокусы?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 6 2011, 11:03
Сообщение #10


фанат дивана
******

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



А это значит, что программе понадобилось динамическое распределение памяти. См. здесь.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 6 2011, 11:30
Сообщение #11


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 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, или чтото похожее.

Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 6 2011, 11:39
Сообщение #12


Беспросветный оптимист
******

Группа: Свой
Сообщений: 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 =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 6 2011, 17:50
Сообщение #13


фанат дивана
******

Группа: Свой
Сообщений: 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) *
Подставил, теперь нужен правильный скрипт сборки.

Я уже предложил вариант с правильным скриптом и всем прочимsm.gif
Ещё вот тут выкладывал чисто сишный вариант, с printf и malloc. Makefile там такой, что хватает всё, что лежит в папке src.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
alx2
сообщение Oct 7 2011, 08:52
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 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 вывести данные) то тут пудет превеД.
Что, не будет работать? Почему вдруг? sm.gif

Цитата(klen @ Oct 6 2011, 16:30) *
1. используемая (в данном случае это скорее всего libc ) среда не портирована в достаточной степени для эмбеддед. Я подозреваю что среда тупо использует newlib.
Я применял newlib в целой куче разных эмбеддед проектов. printf там прекрасно работает и с int, и с float, и с long long...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 10 2011, 07:45
Сообщение #15


Беспросветный оптимист
******

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



В общем, решил для начала упростить задачу, взял готовый пример от 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, то собирается, но не работает (по крайней мере, на экране ничего нет).

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


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:49
Рейтинг@Mail.ru


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