Цитата(diwil @ Nov 7 2006, 12:28)

Цитата(_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 раз число будет быстрее, чем возводить его в степень.
На самом деле выражение более сложно

но, от его сложности кол-во ошибок не зависит.
Я попробывал, и вот что получается: компилятор ругается на все мат. ф-ии Си, например:
void preobraz (void)
{
Uc=sqrt(4);
}
сообщение компилятора:
msp430-gcc -mmcu=msp430x1101 -o PowerMeter.elf main.o -lm -L -lfp./lib
main.o: In function `preobraz':
/cygdrive/i/я77777710я77777761я77777765я77777756я77777744я77777755я77777750я77777752я7777775
0/MSP430/PowerMeter/main.c:32: undefined reference to `sqrt'
make: *** [PowerMeter.elf] Error 1
Может я что-нибудь, где-нибудь забыл прописать?