我在根据内存位置的特定值定义值时遇到问题。
基本上我想读取特定内存位置的值并从该值创建一个定义。然后使用相同的define在编译代码时根据第一个定义值再次定义一个新值。
以下是我的例子:
#define MY_DEFINE_VALUE (*(uint32_t *)0x0800C200)
// 8 kBytes of EEPROM
// First section base address is 0x08080000
// Second section base address is 0x08081000
#if ( MY_DEFINE_VALUE < 0x0200 )
#define EEPROM_BASE ((uint32_t)0x08080000)
#else
#define EEPROM_BASE ((uint32_t)0x08081000)
#endif
感谢您的帮助。
答案 0 :(得分:2)
你不能以这种方式解决这个问题,C不能那样工作。实际上它没有任何意义,因为你期望在同一个地方有两个不同的代码片段(一个使用0x08080000
,另一个使用0x08081000
)。
你将不得不:
我的偏好是动态运行时访问,这应该没问题,除非这是代码中性能最关键的一部分。
所以,你要做一个变量:
volatile uint32_t *eeprom_base;
然后只需添加代码即可在运行时设置它:
if (*(uint32_t *) 0x800c200 < 0x200)
eeprom_base = (uint32_t *) 0x8080000;
else
eeprom_base = (uint32_t *) 0x8081000;
然后通过变量而不是预处理器符号进行访问,或者将后者更改为:
#define EEPROM_BASE eeprom_base
当然,你必须确保变量在所有使用它的地方都有一个可见的声明。