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;
}
関数プロトタイプの 'volatile'オブジェクトへのポインタに' pointer'という名前のパラメータを修飾する必要があります。 – ouah
アンダースコアと大文字で始まる識別子は実装に予約されています。あなた自身のコードでそれを使うべきではありません。 –
あなたの質問には '_UBRRH'と書かれていますが、構造内の何もそれに対応していません。値が設定されていないことをどのように知っていますか?あなたが書いたUARTアドレスから読むことができますか? UARTが様々なメモリ位置に書き込むのに時間がかかりますか? –