2012-01-21 10 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

関数プロトタイプの 'volatile'オブジェクトへのポインタに' pointer'という名前のパラメータを修飾する必要があります。 – ouah

+1

アンダースコアと大文字で始まる識別子は実装に予約されています。あなた自身のコードでそれを使うべきではありません。 –

+1

あなたの質問には '_UBRRH'と書かれていますが、構造内の何もそれに対応していません。値が設定されていないことをどのように知っていますか?あなたが書いたUARTアドレスから読むことができますか? UARTが様々なメモリ位置に書き込むのに時間がかかりますか? –

答えて

0

私はこの質問に感謝します。それは問題を絞り込んで最終的に解決しました。私は構造体内の変数を間違った順番で持っていました。私はその問題を今修正しました。この問題を解決してくれてありがとう、ありがとう!

関連する問題