如何使用变量但从未在C中定义?

时间:2013-07-08 21:54:45

标签: c

hal.c的第137行,你会看到它:

SPDR = data;

在hal_spi_write()函数中。

SPDR在哪里定义?

我已经下载了整个source code并搜索了“SPDR”,但没有运气。

非常感谢来自社区的一位专家请进行评估。

2 个答案:

答案 0 :(得分:7)

SPDR不是一个变量 - 它是一个硬件寄存器。具体来说,它是Atmel AVR处理器上的SPI数据寄存器:

  

19.5.3。 SPDR - SPI数据寄存器

  Bit             7     6     5     4     3     2     1     0
  0x2E (0x4E)  | MSB |     |     |     |     |     |     | LSB |  SPDR
  Read/write     R/W   R/W   R/W   R/W   R/W   R/W   R/W   R/W
  Initial value   X     X     X     X     X     X     X     X     undefined
     

SPI数据寄存器是一个读/写寄存器,用于寄存器文件和SPI移位寄存器之间的数据传输。写入寄存器会启动数据传输。读取寄存器会导致读取移位寄存器接收缓冲区。

有关更多信息,请参阅您正在使用的CPU的数据表。上面的代码段来自ATmega48/88/168 datasheet,例如(第170页)。

答案 1 :(得分:0)

它可能包含在某个头文件中。在更高级的场景中,您将看到链接器和加载器提供的变量。

毕竟,一切都只是对象文件的符号。您可以使用nm(1)之类的工具来参考二进制文件中可以找到的大多数变量,只要您使用extern关键字告诉编译器。