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

时间:2015-03-19 14:48:36

标签: c microcontroller bootloader segments dynamic-function

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

非常感谢

1 个答案:

答案 0 :(得分:1)

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

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

  • 您需要先删除整页,确保在加载过程中应用程序的其他任何部分都不会访问此页面;

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

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

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