gpt4 book ai didi

c - 将定义传递给函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:52:27 24 4
gpt4 key购买 nike

我正在使用 AVR 进行编程,我正在尝试创建一个函数来将引脚设置为输出。我制作了一个结构来保存注册和 Pin 号码,如下所示:

typedef struct Pin{
uint8_t pinNo;
volatile uint8_t* pinReg;
};

然后我有这个功能来设置一个引脚输出。

void pin_output(struct Pin pin){
//DDRA |= _BV(DDA6);
*(pin.pinReg) |= _BV(pin.pinNo);
}

这样调用:

struct Pin pin6;
pin6.pinNo = DDA6;
pin6.pinReg = DDRA;
pin_output(pin6);

这工作正常,但 LED 亮度非常暗。如果我这样设置输出:

DDRA |= _BV(DDA6);

该引脚处于其预期亮度,比具有该功能的亮度高 3-5 倍。导致亮度问题的功能丢失了什么?

最佳答案

显然,宏 DDRA 隐藏了某种与某些硬件寄存器相关的左值。更改该左值会更改寄存器和亮度。如果该左值的实际类型是 uint8_t,那么为了通过您的 struct Pin 传递它,您应该将结构的相应成员初始化为

pin6.pinReg = &DDRA; 

注意 & 运算符。

您的代码中的 pin6.pinReg = DDRA 甚至不应该编译,或者至少应该为赋值中的不兼容类型产生警告。

关于c - 将定义传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com