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

 
 
> ошибка компилятора mspgcc при использовании мат. ф-ий
_VoRoN_
сообщение Nov 7 2006, 07:24
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 3-07-06
Из: Россия, Краснодар
Пользователь №: 18 530



Проблема состоит в следующем:
возникла необходимость использования функции возведения в степень pow из стандартной библиотеки math.h. Однако при сборке проекта (проект называется PowerMeter), компилятор ругается:

msp430-gcc -mmcu=msp430x1101 -o PowerMeter.elf main.o -lm -L./lib
/cygdrive/i/mspgcc/bin/../lib/gcc-lib/msp430/3.2.3/../../../../msp430/bin/msp430-ld: region text is full (PowerMeter.elf section .text)
/cygdrive/i/mspgcc/bin/../lib/gcc-lib/msp430/3.2.3/../../../../msp430/bin/msp430-ld: section .vectors [0000ffe0 -> 0000ffff] overlaps section .text [0000fc00 -> 00010471]
/cygdrive/i/mspgcc/bin/../lib/gcc-lib/msp430/3.2.3/../../../../msp430/bin/msp430-ld: PowerMeter.elf: section .vectors lma 0xffe0 overlaps previous sections
main.o: In function `preobraz':
/cygdrive/i/я77777710я77777761я77777765я77777756я77777744я77777755я77777750я77777752я7777775
0/MSP430/PowerMeter/main.c:30: undefined reference to `pow'
make: *** [PowerMeter.elf] Error 1

функция используется в след. виде:

void preobraz (void)
{
Uc=pow(count,5);
}

Если у кого-нибудь было подобное, подскажите плиз.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
diwil
сообщение Nov 7 2006, 09:28
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Цитата(_VoRoN_ @ Nov 7 2006, 10:24) *
Проблема состоит в следующем:
возникла необходимость использования функции возведения в степень pow из стандартной библиотеки math.h. Однако при сборке проекта (проект называется PowerMeter), компилятор ругается:

msp430-gcc -mmcu=msp430x1101 -o PowerMeter.elf main.o -lm -L./lib
/cygdrive/i/mspgcc/bin/../lib/gcc-lib/msp430/3.2.3/../../../../msp430/bin/msp430-ld: region text is full (PowerMeter.elf section .text)
/cygdrive/i/mspgcc/bin/../lib/gcc-lib/msp430/3.2.3/../../../../msp430/bin/msp430-ld: section .vectors [0000ffe0 -> 0000ffff] overlaps section .text [0000fc00 -> 00010471]
/cygdrive/i/mspgcc/bin/../lib/gcc-lib/msp430/3.2.3/../../../../msp430/bin/msp430-ld: PowerMeter.elf: section .vectors lma 0xffe0 overlaps previous sections
main.o: In function `preobraz':
/cygdrive/i/я77777710я77777761я77777765я77777756я77777744я77777755я77777750я77777752я7777775
0/MSP430/PowerMeter/main.c:30: undefined reference to `pow'
make: *** [PowerMeter.elf] Error 1

функция используется в след. виде:

void preobraz (void)
{
Uc=pow(count,5);
}

Если у кого-нибудь было подобное, подскажите плиз.


... не хватает места для функции...
дело в том, что все стандартные функции здесь реализованы "в лоб" - взяты из стандартной сановской библиотеки и просто скомпилированы. Они занимают очень много места и в 2к не влезают. Необходимо так же помнить, что сами по себе функции работы с плавающей точкой тоже занимают очень много места. Лучше их вообще не использовать на таких маленьких контроллерах. Если необходимость все-же есть, то можно использовать libfp (-lfp). В этом случае стандартная 754 библиотека подменяется такой же, но несколько оптимизированной и без проверки исключений и переполнений.

Что же касается кода, то умножить 5 раз число будет быстрее, чем возводить его в степень.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:41
Рейтинг@Mail.ru


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