根据内存位置的特定值定义值

Defining value according a specific value at memory location

我在根据内存位置的特定值定义值时遇到问题。

基本上我想在特定内存位置读取一个值并从该值创建一个定义。然后在编译代码时使用同一个定义根据第一个定义值再次定义一个新值。

这是我的例子:

#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

感谢您的帮助。

你不能那样解决这个问题,C 不是那样工作的。事实上,这是没有意义的,因为你期望在同一个地方有两段不同的代码(一个使用 0x08080000 和一个使用 0x08081000)。

您将必须:

  1. 构建两个不同的二进制文件,并对开发板进行相应的编程。这将了解哪个板需要哪个二进制文件的责任推到了软件之外
  2. 在 运行 时检查,然后在代码的硬编码替代方案之间进行选择,或者干脆使访问动态化。

我的偏好是动态 运行 时间访问,这应该没问题,除非这是代码中对性能最关键的部分。

因此,您将创建一个变量:

volatile uint32_t *eeprom_base;

然后只需添加代码以将其设置为 运行-time:

if (*(uint32_t *) 0x800c200 < 0x200)
  eeprom_base = (uint32_t *) 0x8080000;
else
  eeprom_base = (uint32_t *) 0x8081000;

然后通过变量而不是预处理器符号进行访问,或者将后者更改为:

#define EEPROM_BASE    eeprom_base

当然,您还必须确保该变量在所有使用它的地方都有一个可见的声明。