mbedとLPCXpressoを見分ける方法

現在mbedで開発中のMiMicですが、単体動作中のLPCXpressoでLocalFileSystemを開こうとすると、ARMのセミホスティングが実行できなくてフリーズします。

MiMicは以前からネットワークペリフェラルの種類から2つのプラットフォームを見分けることをしてましたが、これはネットワークが起動するまでプラットフォームを見分けられませんでした。

今回はネットワークの起動前に見分ける必要があったので、いろいろと調べました。

で、試行錯誤してみた結果、どうやらCore debug registersの辺りを調べてプラットフォームを認識できそうなことがわかりました。

以下のダンプはMiMicのメモリダンプを使って取ったCore debug registersの値です。

mbed(Standalone-mbed compiler)

Memory dump result:
start address: 0xe000edf0 4blocks(16byte)
----------
0xe000edf0: 0x01010001
0xe000edf4: 0x00000000
0xe000edf8: 0x0000f21c
0xe000edfc: 0x00000000

LPCXPresso(Standalone-mbed compiler)

Memory dump result:
start address: 0xe000edf0 4blocks(16byte)
----------
0xe000edf0: 0x01010001
0xe000edf4: 0x00000000
0xe000edf8: 0x00000000
0xe000edfc: 0x01000000

LPCXpresso(LPCLinkDebug-LPCXpressoIDE)

Memory dump result:
start address: 0xe000edf0 4blocks(16byte)
----------
0xe000edf0: 0x01010001
0xe000edf4: 0x00000000
0xe000edf8: 0x00000000
0xe000edfc: 0x010007f1

LPCXPresso(Disconnected-LPCXpressoIDE)

Memory dump result:
start address: 0xe000edf0 4blocks(16byte)
----------
0xe000edf0: 0x01010001
0xe000edf4: 0x00000000
0xe000edf8: 0x02000000
0xe000edfc: 0x01000000

LPCXPresso(Standalone-LPCXpressoIDE)

Memory dump result:
start address: 0xe000edf0 4blocks(16byte)
----------
0xe000edf0: 0x03010001
0xe000edf4: 0x00000000
0xe000edf8: 0x02000000(power ONの時は不定)
0xe000edfc: 0x01000000

mbed(Standalone-LPCXpressoIDE)

Memory dump result:
start address: 0xe000edf0 4blocks(16byte)
----------
0xe000edf0: 0x01010001
0xe000edf4: 0x00000000
0xe000edf8: 0x00000000(power ONの時は不定)
0xe000edfc: 0x00000000

セミホスティングが聞いているときは、0xe000edf8にマトモな値が入っている傾向があります。

コレを元にmbedとLPCXpressoの判別が出来そうです。
判定機能を作ったらまた公開します。

Comments are closed, but trackbacks and pingbacks are open.