首页 > 解决方案 > 在特定内存位置嵌入常量

问题描述

我正在为 NXP S12ZVL32 上的嵌入式应用程序编写引导加载程序。我需要应用程序知道引导加载程序的版本(主要、次要、构建)。是否可以在引导加载程序源中的特定位置声明常量,以便应用程序可以找到它们?

我尝试在#pragma 部分的开头声明常量,以便知道它从哪里开始。

#pragma CODE_SEG SHADOW_ROM
const UINT8 VER_MAJOR = 0xFE;
const UINT8 VER_MINOR = 0xED;
const UINT16 VER_BUILD = 0xCEFA;

S12 是小端,所以我希望能够在生成的 .sx 文件中搜索 FEEDFACE,但甚至找不到 FEED 或 FACE。我已关闭优化,因此编译器不应删除未使用的常量。

标签: cembedded

解决方案


是的,可以在特定的内存地址找到一个常量。有不同的方法可以实现这一点,如何做到这一点的细节因工具链而异。一种方法是在源代码定义中使用特定于编译器的语句#pragma_attribute_语句来指定常量应位于的内存地址。另一种方法是通过在所需的内存地址创建一个特殊的内存部分来自定义链接器指令(也称为链接器脚本或分散加载)文件。然后#pragma在代码或其他链接器指令中使用 a 将常量放入自定义内存部分。有关详细信息,请参阅您的工具链文档。


推荐阅读