我有这种奇怪的情况。我正在尝试取消一些覆盆子 pic 库函数的前缀。例如,我希望 bcm2835_delay() 为 delay()。我有两个文件,pi.h 和 pic.c。当我用gcc -lm pi.c -c
我的去前缀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);
和 pic
#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
在这里你可以看到我所有的函数定义都很好地进入了符号表,除了 delay() 函数。在符号表中,它显示为 bcm2835_delay。如果我将 delay() 更改为 my_delay() ,它会以 my_delay() 的形式进入符号表中。这里发生了什么?