Raspberry PI中的幂函数

时间:2014-06-17 08:52:55

标签: c function raspberry-pi pow

我在Raspberry PI中遇到pow()问题。我使用它,只需像这样转动gpio引脚:

*((unsigned int *)(GPIO_PIN_ON)) = ( 1 * pow(2,16) ); // 1 << 16

GPIO_PIN_ON是我定义在顶部的常量。这很好用。我甚至不需要包含“Math.h”,但是当我在其他文件中创建“GPIOsetFunction()”并使用pow()时甚至使用“math.h”库它会给我这个错误:

gpio.c:(.text+0x38): undefined reference to `__aeabi_i2d'
gpio.c:(.text+0x48): undefined reference to `__aeabi_i2d'
>> gpio.c:(.text+0x64): undefined reference to `pow'
gpio.c:(.text+0x80): undefined reference to `__aeabi_dmul'
gpio.c:(.text+0x94): undefined reference to `__aeabi_d2iz'

这里表明pow()是未定义的。有人可以帮帮我吗。

P.S:我正在将BakingPI教程从Assembly转换为C,我不想使用Shift运算符。

下面是我没有“math.h”而没有“-lm”成功运行的代码,如果“-lm”是解决方案,我怎么能运行它? (这是BAKING-PI教程的OK-02的完整代码)

P.S2:我正在使用YAGARTO编译器。

#include <sys/types.h>

void main(void);

#define GPIO_BASE 538968064 //0x20200000
#define GPIO_PIN_FUNC (GPIO_BASE+4)
#define GPIO_PIN_ON (GPIO_BASE+28)
#define GPIO_PIN_OFF (GPIO_BASE+40)

void main(void) {
register int counter = 0;
*((unsigned int *)(GPIO_PIN_FUNC)) = ( 1 * pow(2,18) ); //1 << 18
while (1 == 1) {    // forever
    *((unsigned int *)(GPIO_PIN_OFF)) = ( 1 * pow(2,16) ); //1 << 16
    counter = 4128768; //0x3f0000;
    while (counter--);
    *((unsigned int *)(GPIO_PIN_ON)) = ( 1 * pow(2,16) ); // 1 << 16
    counter =  4128768; //0x3f0000;
    while (counter--);
}
// should never get here
}   

1 个答案:

答案 0 :(得分:1)

您必须与数学库链接。将-lm附加到编译(链接)命令行。