我想知道是否有一种方法可以在运行时将C函数及其数据加载到正在运行的微控制器系统的文本段中。在函数被放置在文本段中并且数据被存储在数据段中之后,指向新加载的函数的函数指针在主应用程序中被调用。除了在启动前加载整个二进制文件之外,该功能与引导加载程序类似。我知道您可以使用链接器的分散加载函数将函数指针放置在固定地址或更改节中的对齐方式。有人知道这是否可能吗?如果不可能,为什么?
非常感谢
从技术上讲,这是可能的。请记住,任何解决方案都是非标准的、不可移植的,而且非常棘手。
许多控制器可能只从只读存储器执行代码,这使得动态加载的整个概念存在问题:
-
您需要先擦除整个页面,确保在加载过程中应用程序的其他部分不会访问此页面;
-
您需要刷新指令缓存(同样,许多控制器依赖于指令缓存始终有效)。
在任何情况下,你都需要确保被替换的函数没有与之相关的堆栈帧。在多线程系统中很难强制执行。
任何特定的体系结构都可能提供更多的陷阱。