2

GNU ARM Eclipseプラグインによって生成され、セミホスティングが有効になっている STM32f4xx プロジェクト テンプレートを見ています。main関数はargcとパラメータの両方で定義されargvますが、これは独立した組み込みプログラムではほとんど役に立ちませんが、セミホスト型のデバッグされたプログラムの場合、何らかのメカニズムを使用して渡すことができます。だから私の質問は、このメカニズムにどのようにアクセスするのですか? 現在、テンプレートとプロジェクト設定に変更を加えていない場合、argv[0]equals は string と同じですが、"foobar"どこから来たのかわかりません。そして、他の文字列を渡す方法がわかりません。詳細情報:
- IDE: Eclipse + GNU Arm Eclipse プラグイン
- ツールチェーン: GCC ARM Embedded
- デバッグ: ツールチェーンからの Eclipse + OpenOCD + GDB
- ハードウェア: STM32f401vC

更新:定数がnewlibコードの奥深くに埋め込まれているのではないかと疑い始めています。args の読み取りがトリガーされた場所 ( にあります_syscals.c)はわかりますが、どこcall_host (SEMIHOSTING_SYS_GET_CMDLINE, &cmdBlock);で処理されているのかわかりません。次に、に変換され、bkpt 0xABそこから失われます。

4

2 に答える 2

0

利用可能なすべてのソースファイルを掘り下げた後、それを理解しました。OpenOCD はデバッグ サーバーとして使用されるため、ホスト呼び出し要求を処理します。SEMIHOSTING_SYS_GET_CMDLINE (0x15)リクエストの場合、OpenOCDソース ファイルで確認できるargvハードコードされた文字列でバッファを埋めています。foobarsrc/arm_semihosting.c

于 2015-09-15T20:22:25.970 に答える