替换C中的大指针

问题描述 投票:0回答:1

我目前正在开展一个项目,需要用 RX 系列的新微控制器替换现有的 M16C 系列微控制器。在 M16C 微控制器的旧代码中,我定义了以下内存限定符:

#define CHIPDATA huge

extern byte CHIPDATA Mode4Reg[1];

我的目标是过渡到 RX 系列,同时保留 CHIPDATA 属性的使用。然而,“巨大”的内存限定符并不直接适用于 RX 系列,我需要对其进行适应新环境。

您能否提供有关如何用 RX 系列微控制器的适当等效项替换“巨大”内存限定符的指导?我想在代码中保留 CHIPDATA 的使用。

我已尝试以下方法,但不起作用:

#pragma section = "MyExternalMemorySection"

#define CHIPDATA __root
c pointers embedded renesas-rx
1个回答
0
投票

M16C 对于 13、16 和 20 位寻址具有不同的内存模型。 RX 是 32 位哈佛架构 MCU,相同的内存模型不适用。您很可能不需要对 RX 地址执行任何特殊操作,只需定义并清空宏即可:

#define CHIPDATA

如果您希望能够跨平台构建相同的代码库,那么:

#if defined __M16C__
    #define CHIPDATA huge
#else
    #define CHIPDATA
#endif

然而,您实际上似乎试图在新平台上将

CHIPDATA
限定符用于不同的目的,这使得这是一个 X-Y 问题。提出一个关于如何定义宏以将特定数据定位到链接器部分的新问题(如果这就是您想要做的)。如果您选择重用现有代码,则可以调用该宏
CHIPDATA
。这些方法必然是特定于工具链的,因此您需要指定。这样的宏作为声明的前缀而不是后缀是否有效可能是一个问题。也许无法实现你想要的,但在弄清楚你真正想要什么之前,很难说。

© www.soinside.com 2019 - 2024. All rights reserved.