2014-06-17 5 views
0

라즈베리 PI의 pow() 문제가 있습니다. 나는 이것을 사용하여 간단히 GPIO 핀을 다음과 같이 바꿨다.라즈베리 PI의 전원 기능

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

GPIO_PIN_ON은 맨 위에 정의한 상수이다. 이것은 잘 작동합니다.

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' 
: 나는 심지어 "math.h"과) 다른 파일 및 사용 펑 (에서 "GPIOsetFunction()"할 때조차 "Math.h"를 포함 할 필요가 있지만하지 않는 라이브러리 그것은 나에게 오류를 제공합니다

여기서 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 
} 
+0

'ld'을 (를) 사용하여 프로그램을 직접 연결 하시겠습니까? ouah에 의한 응답 외에'gcc'를 사용하여 링크하십시오. – nos

+1

왜 비트 시프트를 사용하지 않으시겠습니까? – ouah

+0

비트 단위 이동을 사용하지 않아야한다는 요구 사항입니다. 나는 그것을 성공적으로했다. 더 많은 질문을 추가하십시오. –

답변

1

수학 라이브러리와 연결해야합니다. -lm을 편집 (링크) 명령 행에 추가하십시오.