1

実行中のマイクロコントローラ システムのテキスト セグメントに、実行時に C 関数とそのデータをロードする方法があるかどうか疑問に思います。関数がテキスト セグメントに配置され、データがデータ セグメントに格納されると、新しくロードされた関数への関数ポインタがメイン アプリケーションで呼び出されます。機能は、起動前にバイナリ全体をロードすることを除いて、ブートローダーに似ています。リンカのスキャッタローディング関数を使用して、関数ポインタを固定アドレスに配置したり、セクションのアラインメントを変更したりできることを知っています。これが可能かどうか、そうでない場合はその理由を知っている人はいますか?

どうもありがとう

4

1 に答える 1

1

技術的には可能です。どのソリューションも非標準であり、移植性がなく、非常に扱いにくいことに注意してください。

多くのコントローラは、読み取り専用メモリからのみコードを実行する可能性があり、動的ロードの概念全体が問題になります。

  • 最初にページ全体を消去し、ロード中にアプリケーションの他の部分がこのページにアクセスしないようにする必要があります。

  • 命令キャッシュをフラッシュする必要があります (繰り返しますが、多くのコントローラーは常に有効な命令キャッシュに依存しています)。

いずれにせよ、置き換えられる関数にスタック フレームが関連付けられていないことを確認する必要があります。マルチスレッド システムで強制するのは非常に困難です。

特定のアーキテクチャでは、より多くのトラップが提供される場合があります。

于 2015-03-19T17:19:55.497 に答える