我正在为使用Kinetis处理器的项目编写一些代码。这些处理器具有闪存配置字段,该字段存储在特定地址的闪存中。如果将错误的值写入该字段,您可以将自己锁定在芯片之外。
我的代码包括一个压缩结构,一个指定.flashConfig部分的实例,一些静态断言以确保结构是所需的大小,以及#define被写入FSEC字段(重要的一个)如预期的那样。然后在链接器脚本中,我将该部分存储在正确的闪存位中。另外,我有一个ASSERT来查看该部分中是否有正确的数据量。
这一切都很不错,但我仍然感到紧张(我已经看过这些芯片现在被锁定了几次)。我想要做的是在链接器脚本中添加一个额外的断言,例如:
ASSERT(BYTE_AT(0x40C) == 0xBE);
这可能吗?
我考虑使用objdump / objcopy在后期构建步骤中从.bin转储。但是我在Windows上构建它,所以没有grep / awk会很好也很容易。其他人也必须建立这个,所以我不想依赖cygwin安装或不安装。此外,这比链接器稍微删除一些,因此如果有人删除了post_build脚本,很容易错过。
答案 0 :(得分:1)
我不想依赖cygwin安装或不安装。
编写一个C程序,执行相同的检查objdump
和grep
。
另外,这比链接器要多一点,因此如果有人删除了post_build脚本,很容易错过。
使验证程序调用链接器,然后验证结果。也就是说,而不是
${LD} -o foo.bin ${LDFLAGS} ${OBJS} && ./post_build foo.bin
这样做:
./build_and_verify -o foo.bin ${LDFLAGS} ${OBJS}