gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:04 26 4
gpt4 key购买 nike

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

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

这是我的例子:

#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;

然后只需添加代码以在运行时设置它:

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

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

#define EEPROM_BASE    eeprom_base

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

关于c - 根据内存位置的特定值定义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46521586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com