1

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

非常感谢

4

1 回答 1

1

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

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

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

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

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

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

于 2015-03-19T17:19:55.497 回答