【问题标题】:Why are variables inside a struct not being assigned any value?为什么结构内的变量没有被分配任何值?
【发布时间】:2012-01-21 00:11:06
【问题描述】:

在调试器中,我看到指针具有我想要的正确地址和变量 UBRR_VALval1val2 保存传入的值。唯一的问题是结构内的变量_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 是否需要时间来响应您写入不同的内存位置?
  • 您应该发布您的解决方案作为答案并接受它。你被允许这样做,它使问题看起来得到了回答和解决。

标签: c variables struct


【解决方案1】:

感谢大家对此问题的反馈。它帮助我缩小了问题范围并最终解决了它。事实证明,我在结构中的变量顺序错误。我现在解决了这个问题。非常感谢您帮我解决这个问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2013-03-20
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多