2016-11-15 15 views
1

私はマイクロコントローラ用の低レベルソフトウェアを書くことを学び始めています。リンカスクリプトを勉強し始めました。リンカスクリプトで「ENTRY」とは何を意味していますか?

私は実際にこのコンテキストでENTRYコマンドの意味を理解しません。ほとんどのマイクロコントローラは所定のアドレスで実行を開始するので、リンカスクリプトではどのエントリポイントを選択するのですか?

答えて

1

ENTRY()はELF機能で、基本的にプログラムのエントリアドレスを実行可能ファイルのELFヘッダーに設定します。このアドレスはバイナリの最初の実行可能セグメントの開始アドレスと異なる場合があります(ENTRY()を定義していない場合は、デフォルトの実行アドレスとなります)。

この情報が使用されているかどうか(つまり、最初のコードセグメントアドレスまたはENTRY()で実行が開始されるかどうかは、ELFローダーの可用性と機能に完全に依存するため、リンカの制御範囲外です。

通常、マイクロコントローラにこのようなことはないので、ENTRY()は実際には役に立たず、そのままではステートメントを省略することもできます。

+0

ありがとうございました!ベアメタルMCUアプリケーション用の多くのリンカスクリプトでは、まだエントリポイントの定義がわかっているので、私が到着した結論はかなりわかりましたが、それはわかりませんでした。 – joseCM

+0

"load"を使用できるようにgdbリモート拡張デバッグセッションを取得する必要はありませんか?私はその機能が動作するために必要なことを発見しました(デベロッパーにとっては非常に便利です)。 – aselle

1

エントリポイントは、のの開始点を定義します。もちろんこれは非常に良い情報です。この方法でフラッシュツールはどこにフラッシュあなたのコードとデバッグツールがどこにシンボルがあるか知っている知っている。

+0

私はそれが有用な情報だと思います。ただし、コードをどこにフラッシュするかをツールが知るためのリンカースクリプトの目的は全部ではありませんか?エントリポイントを指定しても、プログラムが完全に素朴な方法でプログラミングされている場合や、何か不足している場合は、プログラムの開始点は変更されません。 – joseCM

+0

これは間違いなく、リンカスクリプトはMCUがコードの実行を開始するアドレスに影響を及ぼしたりすることはできません。リンカースクリプトは、プログラムをどのようにリンクさせるのか、どこに行くのかを指示します。それがその主な目的です。 – staringlizard

+0

私の質問はまだ立っています。この文脈では、それは必要か、あるいはエントリーポイントを定義する有用な理由がありますか? – joseCM

関連する問題