2016-05-14 23 views
2

なぜexternシンボルがリンカで定義されているRAMの終わりに等しいのか分かりません。RAMの最後に自動的に割り当てられるExternシンボル値

は特に、私は以下のRTEMSコードでそのような場合を参照してください。

extern symbol "rdb_start" definition - start.S - line 155 -157

例えば

extern symbol "rdb_start" usage - bspgetworkarea.c - line 23-41

、あなたはリンカであなたのRAMサイズ0x800000を定義して、あなたのエントリアドレスを取るとき、 0x40000000の場合、rdb_startの値は自動的に0x407FFFF0に対応します。 rdb_startに似たシンボルを定義し、それをrdb_startとしてグローバルにすると、同じ結果が表示されます。その値は自動的に407FFFF0に割り当てられます。

なぜですか?

答えて

2

LEON3プロセッサでRTEMSを実行しようとしているときに同様の質問がありました。 Gaisler(LEON3を製造している人)に質問したところ、rdb_start startは「リモートデバッガの起動」の略で、外部設定シンボルです。これは、プログラムがリモートデバッガ(GRMON)を介してRAMに直接ロードされるとき、またはPROMからブートローダ(すなわちmkprom)を介してアンパックされるときに、スタックポインタを設定するために使用されるものである。

スタックポインタは、通常、メモリの最後に設定する必要があります - 1ワード。たとえば、8MBのRAMを搭載したLEON3プロセッサのメモリ空間は、通常、0x40000000〜0x407FFFFFの間であり、スタックポインタは0x407FFFF0に設定されます。

-stackオプションをmkprom2に渡し、GRMON内でstackコマンドを使用して新しいスタックポインタの値を設定することで、rdb_startの値を変更できました。

これは、RTEMSのコンテキストでrdb_startが何であるか把握しようとする次の人に役立つことを願っています!

+0

あなたの回答は、「年」ではなく、質問されてからわずか4ヶ月後に届きました。とにかく、あなたが言うように、それは役に立つと思われるので、謝罪のスペースを無駄にする必要はありません。 –

+0

あなたの答えavislashに感謝して、それは非常に便利です。 – RedArrow

関連する問題