【发布时间】:2012-01-21 00:11:06
【问题描述】:
在调试器中,我看到指针具有我想要的正确地址和变量
UBRR_VAL、val1、val2 保存传入的值。唯一的问题是结构内的变量_UBRRH、_UBRRL、_UCSRA 和_UCSRB 没有改变。您将在下面找到代码 sn-ps 以供参考。谢谢。
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对象的指针。 -
以下划线和大写字母开头的标识符保留给实现;你不应该在你自己的代码中使用 then。
-
您的问题提到了
_UBRRH,但结构中没有任何内容与之对应。你怎么知道没有设置值?你能从你写入的UART地址中读取吗? UART 是否需要时间来响应您写入不同的内存位置? -
您应该发布您的解决方案作为答案并接受它。你被允许这样做,它使问题看起来得到了回答和解决。