我正在努力改进我的嵌入式编码实践.下面的代码将值0写入内存位置0x80001000.
#define MemoryWrite(A,V) *(volatile unsigned long*)(A)=(V)
#define FLAG 2147487744 //0x80001000
uint32_t reset_value = 0;
int main(void)
{
MemoryWrite(FLAG, reset_value);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
为了使用MemoryWrite我必须转换0x80001000为的宏2147487744.我认为这使得代码不清楚.有没有办法只使用十六进制值才能做到这一点?
我定义reset_value为uint32_t.如果我使用它会改变什么#define?
- 为了使用我必须转换
0x80001000为的MemoryWrite宏2147487744.我认为这是不好的做法,也不清楚.有没有办法只使用十六进制值才能做到这一点?
#define FLAG 0x80001000u
Run Code Online (Sandbox Code Playgroud)
当ufor unsigned不存在并且因为你在32位机器上有4个字节时,编译器假定该值是有符号的并且0x80001000 = -2147479552
- 我不确定是否定义
reset_value为uint32_t良好做法.我可以这样做吗#define?
你当然可以写#define RESET_VALUE 0.但是在这样简单的代码中,有用性并不明显.这取决于您是否要在将来修改该值.对于这10行示例,编译器肯定会以相同的方式对其进行优化.