在运行时替换微控制器上函数指针后面的函数

Replace function behind a function pointer on microcontroller at runtime

我想知道是否有办法在运行时将 C 函数及其数据加载到 运行 微控制器系统的文本段。在函数被放置在文本段中并且数据被存储在数据段中之后,指向新加载函数的函数指针在主应用程序中被调用。除了在启动前加载整个二进制文件之外,该功能类似于引导加载程序。我知道您可以使用链接器的分散加载函数将函数指针放置在固定地址或更改段中的对齐方式。有谁知道这是否可能,如果不可能,为什么?

非常感谢

从技术上讲这是可能的。请记住,任何解决方案都是非标准的、不可移植的并且非常棘手。

许多控制器可能只从只读存储器执行代码,这使得动态加载的整个概念有问题:

  • 您需要先擦除整个页面,确保应用程序的其他部分在加载期间没有访问该页面;

  • 您需要刷新指令缓存(同样,许多控制器依赖指令缓存始终有效)。

在任何情况下,您都需要确保被替换的函数没有与之关联的堆栈帧。在多线程系统中很难执行。

任何特定的体系结构都可能提供更多陷阱。