2016-12-23 5 views
1

私は、Kinetisプロセッサを使用するプロジェクト用にいくつかのコードを書いています。これらのプロセッサは、特定のアドレスのフラッシュに格納されるフラッシュ構成フィールドを有する。そのフィールドに間違った値が書き込まれた場合、自分のチップから自分自身をロックして良い状態にすることができます。LDはアドレスのデータにアクセスできますか?

私のコードは、パックされた構造体、.flashConfigセクションを指定するインスタンス、構造体が必要なサイズであることを保証するいくつかの静的なアサート、およびFSECフィールドに書き込まれる#define(重要なもの)は期待通りです。リンカスクリプトでは、そのセクションがフラッシュの正しいビットに格納されています。さらに、私はそのセクションに正しい量のデータがあるかどうかを確認するためにASSERTを持っています。

これはすべてかなり良いですが、私はまだ緊張しています(私はこれらのチップが今やいくつかの機会にロックされているのを見ました)。私がしたいのは、リンカスクリプトに追加のアサーションを追加することです。

ASSERT(BYTE_AT(0x40C) == 0xBE); 

これは可能ですか?

私は、ビルド後の手順で.binからobjdump/objcopyを使用してこれをダンプすることを検討しました。しかし、私はWindows上でこれを構築しているので、素敵で簡単なgrep/awkはありません。他の人もこれを構築しなければならないので、私はインストールされているcygwinや、インストールされていないものに依存したくありません。これはリンカよりも少しだけ削除されているので、誰かがpost_buildスクリプトを削除すると簡単に逃すことができます。

答えて

1

cygwinがインストールされているかどうかに頼りたくありません。

は同じチェック objdumpを実行し、 grepが行われていたCプログラムを書きます。

これはリンカよりも少し削除されているため、誰かがpost_buildスクリプトを削除すると簡単に逃すことができます。

検証プログラムがリンカを起動し、結果を確認します。それは代わりにこれを行う

${LD} -o foo.bin ${LDFLAGS} ${OBJS} && ./post_build foo.bin 

で、次のとおりです。まともなオプションのように思える

./build_and_verify -o foo.bin ${LDFLAGS} ${OBJS} 
+0

おかげで、。 –

関連する問題