c - 在运行时替换微 Controller 上函数指针后面的函数

标签 c microcontroller bootloader segments dynamic-function

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

非常感谢

最佳答案

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

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

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

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

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

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

关于c - 在运行时替换微 Controller 上函数指针后面的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29147720/

相关文章:

startup - 如何在服务器启动时自动启动cloud9 ide

assembly - 第二个扇区无法加载到引导文件中

assembly - 在传统 BIOS 引导加载程序中打印特殊(非拉丁)字符

c - 微 Controller 编程 - 程序不退出循环

c - 如何在 Makefile 中实现 "make install"?

c - 这个程序的输出是什么意思?

c - 使用文本解释器和 execl 打印 agruments

c - 在 ISR 内部处理协议(protocol)以避免原子性

在 while 循环中计数 3 秒

计算进程的 cpu 使用率在内核空间中的百分比