gpt4 book ai didi

c - 远程上传 exe 代码和嵌入式目标的动态链接功能

转载 作者:行者123 更新时间:2023-12-02 11:41:33 24 4
gpt4 key购买 nike

我正在开发一个用于嵌入式 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() 远程替换的函数,因为系统可能无法访问。这类似于应用程序的在线修补,但应用程序必须在目标中运行才能执行自修补。

所以我的要求是稍后在操作阶段使用附加功能更新可执行文件(以满足不可预见的情况)。如何编译 c 函数 function2() 并将可执行文件上传到 dummy_function()?

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

最佳答案

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

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

关于c - 远程上传 exe 代码和嵌入式目标的动态链接功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13880571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com