我有这种奇怪的情况。我试图取消一些raspberry pi c库函数的前缀。例如,我希望bcm2835_delay()是delay()。我有两个文件,pi.h和pi.c.当我使用gcc -lm pi.c -c
编译两个时,我的前缀延迟()变为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
在这里你可以看到除了delay()函数之外,我的所有函数定义都使符号表正常。在符号表中,它显示为bcm2835_delay。如果我将delay()更改为my_delay(),它会将其作为my_delay()放入符号表中。这是怎么回事?
答案 0 :(得分:0)
编译器已将您的函数视为内联函数。