3

組み込み DSP ターゲット (どの OS でもサポートされていない) 用のアプリケーションを開発しており、開発は C を使用して実行されます。次のように、初期化と無限ループを持つ単純なアプリケーションがあります。

 #include <>
 main (){

 initialize ;

 while (1){

   poll_timer_for_scheduling (); // use for timing 
   remote_link_to_receive_data();  // used to receive data 
   remote_link_to_transmit_data(); // used to transmit data

   switch (sel) {
    case '1':
           function1();
    case '2':
           dummy_function(); // to be replaced by function2() later
    }


   }

 } // end of main

//-------------------------
 function1()
 {

 // some code

 }

//--------------------------
dummy_function()
{

 // NO code; just an empty function to be replaced later by function2()
}

ここで、実行可能ファイルをコンパイルして DSP ターゲットにダンプします。DSP ターゲットは完全に実行されます。システムにアクセスできない可能性があるため、dummy_function() は後でリモートで function2() に置き換えたい関数です。これは、アプリケーションのオンライン パッチ適用に似ていますが、セルフ パッチ適用を実行するには、アプリケーションをターゲットで実行する必要があります。

したがって、私の要件は、後で運用段階で (予期しない状況に対応するために) 追加機能で実行可能ファイルを更新することです。ac 関数 function2() をコンパイルし、実行可能ファイルを dummy_function() にアップロードするにはどうすればよいですか?

アプリケーションの動的リンク機能の簡略化されたバージョンを探しています。これを達成するための簡単なメカニズムはありますか?

4

1 に答える 1

4

関数へのポインターを使用して、後で安全かつアトミックな方法で実装を切り替えることができます。したがって、最初はすべてのポインターが同じ単一のノーオペレーション ダミー関数を指している可能性があります。更新中に、新しい関数のコードをメモリにロードし、新しくロードされたコード内の関数の場所を指すようにポインターを切り替える必要があります。

トリッキーな部分は、関数のパッチではなく、後でロードできるようにその関数をコンパイルすることだと思います。ほとんどのデスクトップ プラットフォームでは、コードを動的にロードするということは、再配置などを実行することを意味します。この点でDSPがどのように機能するかわかりません。しかし、単純にプロジェクト全体を再コンパイルして、そこから変更を抽出するのは現実的ではないかもしれません。

于 2012-12-14T14:57:16.490 に答える