1

基本的に、システムの実行中に、ユーザーに新しいコードを SD カードに ftp で転送してもらい、新しい関数を動的にロードして、システムで実行するタスクを作成してもらいたいと考えています。これは Linux では正常です。たとえば、SO をコンパイルして、メモリに動的にロードできます。

uC/OS II または III でそれを行う方法は?

4

1 に答える 1

2

これは、uC/OS-II または uC/OS-III だけで提供できるサービスではありません。

ELF ファイルを読み取り、指定されたロード アドレスに従って関連するセクション (.text、.rodata など) をメモリにコピーし、初期化されていないメモリ セクションにメモリを割り当てることができるプログラム ローダーが必要です。その後、新しい uC/OS タスクを作成し、ELF エントリ ポイントに対応する関数ポインタを渡すことができます。

ほとんどの組み込みシステムにはメモリ管理ユニット (MMU) がないため、リンク プロセスに特別な注意を払って、これらのセクションがターゲットで既に実行されているコードと重複しないようにする必要があります。ツールチェーンによっては、リンカー スクリプトを慎重に作成する必要があります。

メモリ空間のオーバーラップの可能性の問題を回避する別のオプションは、位置に依存しないコードを生成できるツールチェーンを使用し、ELF をメイン アプリケーションのヒープ、またはによって割り当てられた他の割り当てられた使用可能なメモリ空間にロードすることです。あなたの主なアプリケーション。

さらに別のオプションは、再配置可能なコードを生成し、アップロードされたコードをロードするときに、実行時に再配置を処理できるプログラム リンカーを使用または構築することです。

于 2014-10-22T22:34:53.473 に答える