0
在調試器中,我看到指針有我想要的正確地址,變量 UBRR_VAL
,val1
,val2
保存傳入的值。唯一的問題是結構_UBRRH
,_UBRRL
,_UCSRA
和_UCSRB
內部的變量沒有變化。下面你會找到代碼片段供參考。謝謝。爲什麼結構中的變量沒有被賦值?
這是怎麼struct
定義
typedef uint8_t volatile DEVICEREGISTER;
typedef struct
{
DEVICEREGISTER _UDR;
DEVICEREGISTER _UCSRA;
DEVICEREGISTER _UCSRB;
DEVICEREGISTER _UBRRL;
} uart_register_t;
#define _USART (uart_register_t*) 0x2C
這是我如何調用該函數。
uart_init(UBRR_VAL, 0, (1<<_TXC)|(1<<_RXC), _USART); // initialize the uart for outputting and inputting.
以下是函數定義。
void uart_init(uint8_t UBRR_VAL, uint8_t val1, uint8_t val2, uart_register_t *pointer)
{
pointer->_UBRRL = UBRR_VAL;
pointer->_UCSRA = val1;
pointer->_UCSRB = val2;
}
您應該限定名爲'pointer'的參數,以指向函數原型中的volatile對象。 – ouah
以下劃線和大寫字母開頭的標識符保留給實現;你不應該在你自己的代碼中使用。 –
你的問題提到'_UBRRH',但沒有任何結構符合它。你怎麼知道這些值沒有設置?你可以從你寫的UART地址讀取嗎?是否需要時間讓UART對您寫入各種內存位置做出反應? –