C 程序中的功能块体系结构

Function block architecture in a C program

我想创建一个软件,稍后可以在我的微控制器上对某些功能(或块)进行编程,而无需再次刷新整个软件(闪存将通过通信接口完成,例如 SPI)。 新块都将具有相同的 API(例如 5 个字节作为参数,返回 1 个字节)。

内存架构将如下图所示组织:Block architecuture。

目前,如果我只在新函数中使用局部变量,我没有发现任何问题,因为变量将被压入堆栈,并且不会在 .bss 段中初始化。但是如果我想在我的函数中添加一个静态变量,我会遇到一些麻烦,因为启动代码不会在.bss(或.data)段中初始化这个变量。

我的问题是,该事件是否可以在 C 代码中实现类似这样的体系结构?如果是,我如何调整我的启动代码来初始化我的新变量?你认为 C++ 更适合做这类事情吗?

非常感谢!

在 API 中包含一个初始化块的函数。宿主必须在块的任何其他函数之前调用此函数。

此外,请记住,如果这样做,您还必须为块保留部分 RAM(除了闪存),主机不得触及。这些变量通常被标记为 __no_init 或类似的东西,以防止链接器甚至尝试为 .data 放置生成初始化数据。

您使用的语言(C 或 C++)很可能无关紧要。内存放置不是任何一种语言的特性,而是通过编译器扩展和链接器特性完成的,它们是特定于工具链的。