【发布时间】:2010-10-27 22:40:27
【问题描述】:
我正在处理嵌入式代码并尝试将大量内存映射寄存器分配转换为 get()/set() 函数调用。我想知道是否有可能维护散布在整个代码中的地址分配,但更改#defines 以便它们将分配作为函数参数。
老路:
#define MOTOR_REG (*(volatile unsigned char *)(0xFEE002)); //a memory-mapped register
MOTOR_REG = value; //sets value into the memory-mapped register
想要的新方式:
#define MOTOR_REG( set_motor_reg(value); )
void set_motor_reg(unsigned char)
{
//logic to set the motor register
}
MOTOR_REG = value; //value should be passed in to MOTOR_REG macro
那么,这种情况可以用 C 宏实现吗?感谢您的想法!
【问题讨论】:
-
为什么要这样做?这段代码有什么问题?
-
@Adam Rosenfield - 我怀疑 OP 必须更新现有代码库以使用不同的代码来设置注册表值(可能首先添加一些验证)并且希望以最少的干预来完成。跨度>
-
@Franci Penov - 正确,如果可以简单地更改#define,我希望避免大量的查找+替换操作。
标签: c c-preprocessor memory-mapping