【发布时间】:2019-05-02 17:13:51
【问题描述】:
我想创建一个软件,稍后可以在我的微控制器上对某些功能(或块)进行编程,而无需再次重新刷新整个软件(闪存将由通信接口完成,例如 SPI)。新块都将具有相同的 API(例如,5 个字节作为参数,1 个字节返回)。
内存架构将如下图所示进行组织: memory architecture
总而言之,FBL 和 APPL 模块将在 MCU 上仅编程 1 次。在这个过程的后期,我希望有可能在创建的块中编程或更改一些功能(BLOCK 1,BLOCK 2 ...)
对于每个块,我都有:
- 2 段 flash(一段用于 init 函数,一段用于“任务”函数)。
- 我可以在其中放置静态变量的 1 个 RAM 部分。
目前,我的问题是我无法创建一个包含我函数的所有内容的单个内存块。例如,如果我想在我的新块中使用 math.h 中的函数,链接器会将 math.h 函数放置在我的 APPL 扇区中,而不是放在专门为此块分配的内存扇区中。但正如我所说,我的 APPL 扇区不应该改变,因为它只会被编程 1 次。所以我想知道如何写一些“独立”的块......
非常感谢!
【问题讨论】:
-
这不是一个好主意。相反,您应该以某种标准格式(如 S-record 或 Intel hex)生成二进制文件,然后在进行程序更新时,运行差异工具并查看发生了什么变化。然后只编程那部分,而不是整个事情。不幸的是,现代程序闪存具有可笑的大擦除大小,因此无论如何它都不会有效。也许您可以考虑获得一个带有大型 eeprom/数据闪存的零件,它可以从那里执行代码。
-
此功能的目的与任何闪存加载优化(时间或单元寿命)无关,而是与仅可更改功能而无需更新应用程序代码(用于验证目的)的软件架构有关)
标签: c memory architecture iar