2014-03-05 54 views
0

我有这种奇怪的情况继续。我正在尝试去掉树莓派的一些库函数。例如,我希望bcm2835_delay()为delay()。我有两个文件,pi.h和pi.c.当我用gcc -lm pi.c -c编译这两个时,我的de-prefixed delay()变为bcm2835_delay()。以下是我的两个文件和objdump -t pi.o的输出。编译器更改函数名称

pi.h

#include <bcm2835.h> 

#define PIN05 RPI_V2_GPIO_P1_05 
#define PIN07 RPI_V2_GPIO_P1_07 
#define PIN08 RPI_V2_GPIO_P1_08 
#define PIN10 RPI_V2_GPIO_P1_10 
#define PIN11 RPI_V2_GPIO_P1_11 
#define PIN12 RPI_V2_GPIO_P1_12 
#define PIN13 RPI_V2_GPIO_P1_13 
#define PIN15 RPI_V2_GPIO_P1_15 
#define PIN16 RPI_V2_GPIO_P1_16 
#define PIN18 RPI_V2_GPIO_P1_18 
#define PIN19 RPI_V2_GPIO_P1_19 
#define PIN21 RPI_V2_GPIO_P1_21 
#define PIN22 RPI_V2_GPIO_P1_22 
#define PIN23 RPI_V2_GPIO_P1_23 
#define PIN24 RPI_V2_GPIO_P1_24 
#define PIN26 RPI_V2_GPIO_P1_26 

#define INPUT BCM2835_GPIO_FSEL_INPT 
#define OUTPUT BCM2835_GPIO_FSEL_OUTP 

// rename the delay function given already 
void delay(unsigned int millis); 

// rename the microsecond delay function 
void delay_micro(uint64_t micros); 

// set the pinout to low, check that the pin is output 
void set_low(uint8_t pin); 

// ease the input setting 
void set_input(uint8_t pin); 

// ease the output setting 
void set_output(uint8_t pin); 

和pi.c

#include <bcm2835.h> 
#include "pi.h" 

// rename the delay function given already 
void delay(unsigned int millis) { 
    bcm2835_delay(millis); 
} 

// rename the microsecond delay function 
void delay_micro(uint64_t micros) { 
    bcm2835_delayMicroseconds(micros); 
} 

// set the pinout to low, check that the pin is output 
void set_low(uint8_t pin) { 

} 

// ease the input setting 
void set_input(uint8_t pin) { 
    bcm2835_gpio_fsel(pin, INPUT); 
} 

// ease the output setting 
void set_output(uint8_t pin) { 
    bcm2835_gpio_fsel(pin, OUTPUT); 
} 

输出

pi.o:文件格式ELF32-littlearm

SYMBOL TABLE: 
00000000 l df *ABS* 00000000 pi.c 
00000000 l d .text 00000000 .text 
00000000 l d .data 00000000 .data 
00000000 l d .bss 00000000 .bss 
00000000 l d .note.GNU-stack 00000000 .note.GNU-stack 
00000000 l d .comment 00000000 .comment 
00000000 l d .ARM.attributes 00000000 .ARM.attributes 
00000000 g  F .text 00000020 bcm2835_delay 
00000020 g  F .text 00000020 delay_micro 
00000000   *UND* 00000000 bcm2835_delayMicroseconds 
00000040 g  F .text 00000020 set_low 
00000060 g  F .text 0000002c set_input 
00000000   *UND* 00000000 bcm2835_gpio_fsel 
0000008c g  F .text 0000002c set_output 

在这里你可以看到我所有的函数定义m除了delay()函数之外,它符合符号表。在符号表中它显示为bcm2835_delay。如果我将delay()更改为my_delay(),它会将它作为my_delay()放入符号表中。这里发生了什么?

+1

在#includes后加上'#undef delay',然后重试。 –

+2

它可能正在自动内联。 – jeremycole

+0

#undef delay是正确的答案,你能解释一下这是怎么回事吗? – user1629458

回答

0

编译器将您的函数视为内联函数。