2012-01-21 66 views
0

在調試器中,我看到指針有我想要的正確地址,變量 UBRR_VALval1val2保存傳入的值。唯一的問題是結構_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; 
} 
+1

您應該限定名爲'pointer'的參數,以指向函數原型中的volatile對象。 – ouah

+1

以下劃線和大寫字母開頭的標識符保留給實現;你不應該在你自己的代碼中使用。 –

+1

你的問題提到'_UBRRH',但沒有任何結構符合它。你怎麼知道這些值沒有設置?你可以從你寫的UART地址讀取嗎?是否需要時間讓UART對您寫入各種內存位置做出反應? –

回答

0

我很感謝大家對這個問題的反饋。它幫助我縮小了問題並最終解決了問題。事實證明,我有錯誤的順序順序結構中的變量。我現在解決了這個問題。非常感謝您幫助我解決這個問題!

相關問題