我正在为使用 Kinetis 处理器的项目编写一些代码。这些处理器有一个闪存配置字段,存储在闪存中的特定地址。如果错误的值被写入该字段,您可以将自己永远锁定在芯片之外。
我的代码包括一个压缩结构、一个指定 .flashConfig 部分的实例、一些静态断言以确保该结构是所需的大小,以及写入 FSEC 字段的 #define(重要的一个)正如预期的那样。然后在链接描述文件中,我将该部分存储在闪存的正确位中。此外,我还有一个 ASSERT 来查看该部分中的数据量是否正确。
一切都很好,但我仍然很紧张(我已经多次看到这些筹码自己被锁住)。我想要做的是向链接描述文件添加一个额外的断言,例如:
ASSERT(BYTE_AT(0x40C) == 0xBE);
这可能吗?
我考虑过在后期构建步骤中使用 objdump/objcopy 从 .bin 中转储它。但是我是在 Windows 上构建它的,所以没有 grep/awk 这会很好也很容易。其他人也必须构建它,所以我不想依赖安装或不安装 cygwin。此外,它比链接器稍微移除了一点,因此如果有人移除了 post_build 脚本,很容易被遗漏。
最佳答案
I don't want to rely on cygwin being installed or what not.
编写一个 C 程序来执行与 objdump
和 grep
相同的检查。
Plus this is a little more removed than the linker, and therefore could easily be missed if someone removes the post_build script.
让验证程序调用链接器,然后验证结果。也就是说,代替
${LD} -o foo.bin ${LDFLAGS} ${OBJS} && ./post_build foo.bin
这样做:
./build_and_verify -o foo.bin ${LDFLAGS} ${OBJS}
关于LD可以访问某个地址的数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41305086/