当公司更新产品的嵌入式C代码应用程序固件(通过微控制器上的引导加载程序或JTAG等)时,它们通常会刷新一个包含新特性+旧软件的全新..hex/..bin文件吗?因此,彻底废除旧的程序?或者通过单独的..hex/..bin文件进行部分应用程序更新是标准的吗?
我问这个问题是因为我想知道发布不同嵌入式软件包的最佳行业实践。理想情况下,在不更新整个程序内存的情况下,能够为项目的一个特性刷新特定的更新是很好的。
例如:让我们假设您的项目的嵌入式C软件有三个特性:
handling
如果您有许多软件版本的每个功能,并想测试不同版本的组合,您能有单独的..hex/..bin为每个特性闪烁到MCU?
发布于 2022-07-07 07:01:58
除非您将程序的某些部分设计为独立于位置的代码,然后将这些部分从固定地址链接起来,否则您不能真正地部分更新程序。这是可以做到的,但在设计过程中增加了额外的复杂性。
否则,如果您没有像这样设计您的程序,机器代码将充满绝对地址,并跳转到错误的地方。
通常的方法是立即更新整个程序(可能不包括当前的任何引导加载器部分)。并可选择地分别更新数据闪存/eeprom。
发布于 2022-07-07 06:49:44
它取决于操作系统、体系结构和系统的需求。
如果所有部件都是独立的,则可以部分更新
发布于 2022-07-07 07:02:47
部分更新非常常用,但使用的方式与您所描述的不同。
最常见的用例是您有一个bootloade+application,并且只有应用程序被更新。
当应用程序完全分离时,这种方法是合适的。
您所描述的情况意味着每个特性都需要彼此或与主应用程序进行通信。在这种情况下,尝试将这些特性分离为单独的闪存区域会带来太大的麻烦。
您必须为每个“功能”提供一个单独的闪存段,从而产生空白(浪费空间),同时希望您的特性不会超过分配的空间。此外,您还必须考虑如何实现不同功能之间的通信、维护兼容性等。
只要把所有的东西连接在一起,并立即更新所有的东西。
https://stackoverflow.com/questions/72891210
复制相似问题