1

HCS08 ファミリーのマイクロコントローラー用の USB ベースのブートローダーを開発しています。アセンブリにブートローダー コードがあります (シリアル通信で正常に動作します)。このアセンブリ コードから USB 通信用の C 関数 (Terminal<>Micro controller) を呼び出しています。しかし、これらの C 関数はプロテクト エリア ROM に配置されていないようです。これは project.map で確認できます。ブートローダー コードと連続していません。つまり、ブートローダー コードは F003 で始まりますが、これらの USB 関数はいくつかの位置にあります。 〜1000〜2000。私の質問は、これらの C 関数を ROM の bootloader.asm コードで続行するにはどうすればよいかということです。

プログラム フローは次のとおりです。 電源投入時に bootloader.asm にジャンプする C のメイン関数があります。ただし、bootloader.asm は正常に動作しますが、保護されていないプログラム ROM 領域の USB ルーチンが原因で、これらも消去され、その後ブートローダーが端末と通信できなくなります。

この点に関する提案は本当に役に立ちます。

ありがとう

4

2 に答える 2

1

組み込みシステム用のコードを作成する場合、通常はリンカだけでなく「リンカ/ロケータ」を使用します。「ロケータ」部分は、メモリを配置するアドレスを示すパラメータを設定できることを意味します。残念ながら、使用しているツールセットでそれを指定する方法を正確に説明することはできません。そのツールセットを教えていただければ、おそらく (私とは異なり) 使用したことのある人なら、使用しているロケーターのアドレス指定の詳細を知っているでしょう。

于 2010-10-28T00:09:39.027 に答える
0

gcc+binutils を使用している場合、必要なのはカスタムリンカー スクリプトです。これにより、リンクされたプログラムがメモリ内でどのように配置されるかを明示的に制御できます。いくつかの変更を加えるだけの場合は、プラットフォームの標準スクリプトを見つけるのが難しい部分です。スクリプトは、ld (binutils の一部) をビルドしてから ld に埋め込むと生成されます。strings ld多くの場合、「セクション」またはその他の一般的なリンカ スクリプト キーワードで検索して見つけることができます。

ストック リンカー スクリプトは、デバッグ、C++ 静的初期化子、読み取り専用データ、再配置など、GCC のすべての機能をサポートするために非常に複雑になる場合があります。

于 2010-10-28T00:29:13.463 に答える