線137 hal.c你會看到它的作用:如何使用變量但從未在C中定義變量?
SPDR = data;
的hal_spi_write()函數中
。
SPDR定義在哪裏?
我已經下載了整個source code並完成了「SPDR」的搜索,但沒有運氣。
希望瞭解的專家之一,從社區請權衡。
線137 hal.c你會看到它的作用:如何使用變量但從未在C中定義變量?
SPDR = data;
的hal_spi_write()函數中
。
SPDR定義在哪裏?
我已經下載了整個source code並完成了「SPDR」的搜索,但沒有運氣。
希望瞭解的專家之一,從社區請權衡。
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頁)。
但是這個寄存器名稱是由編譯器隱式聲明的嗎? –
@DrewMcGowen:它在特定於所用零件的系統頭文件中定義。 (例如,它在ATmega168的'
嗯,有OP的答案;) –
這可能是包含在一個頭文件中的某個地方。在更高級的場景中,您會看到由鏈接器和加載器提供的變量。
畢竟,一切都只是對象文件的符號。只要您使用extern
關鍵字告訴編譯器關於它的信息,您可以參考使用nm(1)
之類的工具在二進制文件中找到的大多數變量。
最糟糕的是在make文件中定義並在命令行中傳遞的符號。 –
Jeez。我忘了那些。 :) – sholsapp
您是否搜索.h文件? –
提示:它可能是'#define SPDR(*(volatile uint8_t *)0x000f3c00)'...... – 2013-07-08 21:58:25
它使用隱式的'int'嗎? –