将定义传递给函数
Posted
技术标签:
【中文标题】将定义传递给函数【英文标题】:Passing defines to function 【发布时间】:2013-10-03 21:05:33 【问题描述】:我正在使用 AVR 进行编程,并且正在尝试创建一个函数来将引脚设置为输出。我制作了一个结构来保存寄存器和密码,如下所示:
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 倍。函数中丢失了什么导致亮度问题?
【问题讨论】:
【参考方案1】:显然宏DDRA
隐藏了某种与某些硬件寄存器相关的左值。更改该左值会更改寄存器和亮度。如果该左值的实际类型是uint8_t
,那么为了通过您的struct Pin
传递它,您应该将结构的相应成员初始化为
pin6.pinReg = &DDRA;
注意&
运算符。
代码中的pin6.pinReg = DDRA
甚至不应该编译,或者至少应该为赋值中的不兼容类型产生警告。
【讨论】:
抱歉,遗留了一些调试代码。我更新了问题。我按你说的分配了 pin6.pinReg 但亮度仍然很暗。 @Nick:没有理由不工作。添加&
后,它应该可以工作了。
对不起,我很笨。我更新了问题代码,只是假设我更新了实际代码并且没有……哈哈。谢谢现在很好用。以上是关于将定义传递给函数的主要内容,如果未能解决你的问题,请参考以下文章