3

我正在为嵌入式 DSP 目标(不受任何操作系统支持)开发应用程序,并且使用 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 目标中。dummy_function() 是我想稍后用 function2() 远程替换的函数,因为系统可能无法访问。这类似于应用程序的在线修补,但应用程序必须在目标中运行才能执行自我修补。

所以我的要求是在运行阶段后期更新可执行文件,使其具有额外的功能(以满足不可预见的条件)。如何编译 ac 函数 function2() 并将可执行文件上传到 dummy_function()?

我正在寻找应用程序中动态链接功能的简化版本。是否有一些简单的机制来实现这一点?

4

1 回答 1

4

您可以使用指向函数的指针稍后以安全和原子的方式切换实现。所以最初这些指针可以都指向同一个无操作虚拟函数。在更新期间,您必须将新函数的代码加载到内存中,然后将指针切换到指向新加载代码中函数的位置。

我想棘手的部分可能不是函数的修补,而是编译该函数以便以后可以加载它。在大多数桌面平台上,动态加载代码意味着执行重定位和类似的事情。不确定您的 DSP 在这方面是如何工作的。但是简单地重新编译整个项目并从中提取更改可能是不可行的。

于 2012-12-14T14:57:16.490 回答