【发布时间】:2020-07-27 04:10:15
【问题描述】:
我想制作一个预处理器宏,它将表示地址的整数转换为指针。这是用于 MCU 开发的。
例如,寄存器是这样定义的
#define SOME_REGISTER 0x05 // This the the address of SOME_REGISTER
所以我定义了以下宏:
#define REG_ADDR(reg) (*((volatile uint8_t*) reg))
当我不想使用它时
volatile uint8_t * reg_ptr = REG_ADDR(SOME_REGISTER)
当然,我收到了makes pointer from integer without a cast [-Wint-conversion] 警告
有没有干净的方法来做到这一点?
提前致谢
【问题讨论】:
-
我认为应该删除
REG_ADDR定义中的第一个星号。这不是取消引用您刚刚通过转换reg创建的指针吗?这不是你想要做的,是吗? -
您要访问什么寄存器,您使用的是什么 AVR?如果您在程序顶部包含
avr/io.h,您的 AVR 工具链是否已经为寄存器提供了定义?
标签: pointers macros embedded avr