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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> YAGARTO и math
Атмег
сообщение Jul 24 2009, 17:41
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787



Здравствуйте, уважаемые, помогите советом!

Начинаю работать с ARM, установил YAGARTO.
Как только пытаюсь использовать функции типа sin, cos - линкер выдает undefined reference to `sin'
в math.h они объявлены external:

extern double cos _PARAMS((double));
extern double sin _PARAMS((double));

То есть в стандартной библиотеке не реализованы матфункции? Что я не понимаю?
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 24 2009, 18:22
Сообщение #2


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

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



Цитата(Атмег @ Jul 24 2009, 21:41) *
Здравствуйте, уважаемые, помогите советом!

Начинаю работать с ARM, установил YAGARTO.
Как только пытаюсь использовать функции типа sin, cos - линкер выдает undefined reference to `sin'
в math.h они объявлены external:

extern double cos _PARAMS((double));
extern double sin _PARAMS((double));

То есть в стандартной библиотеке не реализованы матфункции? Что я не понимаю?


добавте при линковке ключик -lm
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 24 2009, 18:22
Сообщение #3


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

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



Надо указать линкеру, чтоб линковал математическую библиотеку. Ключ -lm.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jul 24 2009, 19:11
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Гарантировать правильную работу floating point должен адеквтный стартап, но для того, чтобы перестал ругаться линкер отредактируйте в мэйкфайле строчку

MCFLAGS = -mcpu=$(MCU) -lm

Это заставит компилятор добавить к списку библиотечных файлов еще
arm-elf\lib\libm.a


ps: ой, уже натовечали... А вопрошавший может сказать про то, заработало ли без поддержки стартапа?
Как я понял, при компиляции для freestanding environment приходится свой собственный стартап подсовывать (я, во всяком случае, поступил именно так).

pps: успел сам проверить... коллосаль! у меня с моим стартапом заработало! Во всяком случае, функция sin (не в прерывании) работает... Правда, добавило 10 килобайт.

Сообщение отредактировал Genadi Zawidowski - Jul 24 2009, 19:46
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 24 2009, 20:31
Сообщение #5


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

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



стартап то тут причем?
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jul 25 2009, 01:21
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Скорее всего стартап в данном случае непричем... Просто во всех остальных компиляторах, что я встречал (и использовал для embedded) стартап участвовал в настройках FP калькулятора и/или режимов сопроцессора где он был (в x86).
С тем как это в gcc для arm устроено я еще не успел разобраться.

Сообщение отредактировал Genadi Zawidowski - Jul 25 2009, 01:22
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jul 25 2009, 05:04
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Genadi Zawidowski @ Jul 25 2009, 04:21) *
Скорее всего стартап в данном случае непричем... 

Если для плавучки использовать коды операции из множества undefined instruction, то в стартапе надо прописАть адрес обработчика соотв. исключения. А более стартап никаким макаком... 
Go to the top of the page
 
+Quote Post
SergeiCh
сообщение Jul 25 2009, 06:54
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 22-03-07
Из: Novosibirsk
Пользователь №: 26 415



Цитата(klen @ Jul 25 2009, 01:22) *
добавте при линковке ключик -lm
Причем ключик должен быть обязательно после, а не до объектных файлов, в которых используются библиотечные функции.
Go to the top of the page
 
+Quote Post
Атмег
сообщение Jul 27 2009, 07:23
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787



Огромное спасибо!
С ключом -lm все линкуется как надо.
И, действительно, только когда ключ стоит после объектных файлов. (Если не сложно, объясните, почему так? Ведь если поменять порядок объектных файлов при линковке ничего не меняется?..)

Остался, правда, еще один непонятный момент еще на этапе компиляции:
main.c: In function 'main':
main.c:550: warning: implicit declaration of function 'sin'
main.c:550: warning: incompatible implicit declaration of built-in function 'sin'

такая реакция на вызов функции, хотя я ее не определяю, просто вызываю, x=sin(y);
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 27 2009, 07:38
Сообщение #10


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

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



Цитата(Атмег @ Jul 27 2009, 11:23) *
такая реакция на вызов функции, хотя я ее не определяю, просто вызываю, x=sin(y);

а math.h сверху подключен?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
etoja
сообщение Jul 27 2009, 07:40
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Используйте Rowley Crosstudio. Это оболочка + gcc.
Оболочка формирует нужные ключи.

30-дневная версия здесь: http://www.rowley.co.uk/arm/
Ну и местные закрома, ясное дело.
Go to the top of the page
 
+Quote Post
Атмег
сообщение Jul 27 2009, 07:48
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787



да, туплю, закомментирован был)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 27 2009, 08:53
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Атмег @ Jul 27 2009, 10:23) *
И, действительно, только когда ключ стоит после объектных файлов. (Если не сложно, объясните, почему так? Ведь если поменять порядок объектных файлов при линковке ничего не меняется?..)
потому что библиотека - это не объектный файл, а архив объектных файлов. И именно такой порядок описан в документации:
Цитата
-lnamespec
--library=namespec
...
The linker will search an archive only once, at the location where it is specified on the command line. If the archive defines a symbol which was undefined in some object which appeared before the archive on the command line, the linker will include the appropriate file(s) from the archive. However, an undefined symbol in an object appearing later on the command line will not cause the linker to search the archive again.
...


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Атмег
сообщение Jul 27 2009, 09:18
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787



Понятно, спасибо
Go to the top of the page
 
+Quote Post
Атмег
сообщение Jul 27 2009, 16:07
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787



Появился еще ряд вопросов)

Увеличиваю частоту на выходе фапч с 200 до 240 МГц. Ожидаю, что время выполнения моего кода должно пропорционально сократиться. Однако сокращается оно не на 20, а на доли процента... Рассчитывается преобразование фурье, работа алгоритма с периферией никак не связана.

На данный момент у меня на 200Мгц на вычисление sin тратится в среднем 50 мкс, то есть 10000 циклов... Не много ли это? От чего зависит скорость работы с fp помимо оптимизации самого кода, что бы почитать на эту тему? В документации на Newlib (http://sources.redhat.com/newlib/) ничего интересного не нашел =/

Главное, чтоб знать в каком направлении двигаться: может быть Newlib не самая лучшая библиотека для работы с fp или переход на другую ничего не даст?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:03
Рейтинг@Mail.ru


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