c - 在特定内存位置嵌入常量
问题描述
我正在为 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。我已关闭优化,因此编译器不应删除未使用的常量。
解决方案
是的,可以在特定的内存地址找到一个常量。有不同的方法可以实现这一点,如何做到这一点的细节因工具链而异。一种方法是在源代码定义中使用特定于编译器的语句#pragma
或_attribute_
语句来指定常量应位于的内存地址。另一种方法是通过在所需的内存地址创建一个特殊的内存部分来自定义链接器指令(也称为链接器脚本或分散加载)文件。然后#pragma
在代码或其他链接器指令中使用 a 将常量放入自定义内存部分。有关详细信息,请参阅您的工具链文档。
推荐阅读
- ssh - SSH 控制台在按回车键时打印 ^H
- android - 防止配置更改后通知 onFocus 侦听器?
- php - 该站点无法访问 CodeIgniter 框架
- python - Pygame 窗口不加载图像
- r - 如何在R中找到数据集中缺失值的位置?
- javascript - 警告 findDomNode
- python - Python groupby 单行 if else 语句
- javascript - 如何在不先解构的情况下等待数组中返回的承诺?
- c# - 如何处理 .net MVC Core 中的动态错误页面?
- phpunit - 需要用于登录、注销重定向的 phpunit 测试用例(不在 laravel 中)