Embedded 处理可远程升级嵌入式系统的版本号

Embedded 处理可远程升级嵌入式系统的版本号,embedded,versioning,Embedded,Versioning,我目前正在开发一系列嵌入式产品,这些产品可以通过手机与PC进行信息交换。目前,不同的家庭成员以不同的方式存储和交换信息,但任何特定类型的单元都只能以单一格式存储和交换信息。PC能够为任何远程设备提供新固件,该固件将在下次远程设备重新启动时加载(PC可以请求重新启动) 目前,当一个单元打电话进来时,它会报告一个单元类型(字符串)、版本号(每次构建的增量)和构建日期;PC将在数据库中查找设备类型,并检查数据库固件是否比设备中的固件更新。如果是这样,它会将数据库固件加载到单元中,并要求它重新启动和回拨

我目前正在开发一系列嵌入式产品,这些产品可以通过手机与PC进行信息交换。目前,不同的家庭成员以不同的方式存储和交换信息,但任何特定类型的单元都只能以单一格式存储和交换信息。PC能够为任何远程设备提供新固件,该固件将在下次远程设备重新启动时加载(PC可以请求重新启动)

目前,当一个单元打电话进来时,它会报告一个单元类型(字符串)、版本号(每次构建的增量)和构建日期;PC将在数据库中查找设备类型,并检查数据库固件是否比设备中的固件更新。如果是这样,它会将数据库固件加载到单元中,并要求它重新启动和回拨(重新启动将断开连接)

这个方案可行,但似乎有点做作。在某些bug修复之前禁止使用固件版本可能是可取的,但我不确定应该如何最好地编码。应用程序的每个版本是否都应该有每个硬件类型的最低可接受固件转速的硬编码列表?如果较新的固件版本添加了新的内存字段或通信包样式,那么互操作性应该如何处理?说“如果FirmwareRev>1.23458,那么Mem(29)=BeeperFrequency,否则Mem(29)=0”似乎相当粗鲁

我的一个想法是固件版本描述包含各种功能的位掩码,但我不知道如何合理地分配这些位,以避免使用过多的位来指定最终总是在一起的功能(从而耗尽位)或者使用一个位来控制后来被分离的特性


还有其他人处理过这样的问题吗?如何最好地解决这些问题?

我会让这些单位报告他们的MAC地址,该地址与您的其他信息一起保证是唯一的,然后在服务器上保留一个小数据库,让它管理升级决策。您可能希望降级和升级,以便我将smarts保留在服务器上。

我只需要让设备报告其MAC地址,该地址与您的其他信息一起保证是唯一的,然后在服务器上保留一个小数据库,让它管理升级决策。您可能希望降级和升级,以便我将smarts保留在服务器上。

我不确定您要解决的问题是什么-您希望现场的设备能够继续运行旧版本的软件,同时仍然能够与后端通信,而不是被迫升级吗?我也很困惑--前几段只谈到固件,但在第三段中,你突然想到如何处理“应用程序”。这个应用程序是什么,它是如何更新的,为什么它与固件不同?今晚我将重写这个问题,以便更清楚。这里有一个典型的“二维变化”问题。一方面,您希望至少有几个版本的服务器接口代码可以用于不同版本的客户端。另一方面,如果您在服务器中发现一个bug,您希望能够只修复一次,而不是在每个版本特定的实例中修复它。。。把所有东西都做成一个版本会很好,但可能不现实;你可能有客户对某个特定版本进行了验收测试,但无法升级,除了稳定版本之外,你可能还需要一个beta测试版本,你可能有定制版本…@Chris:这是问题的一部分。我将尝试重新编辑该问题,以便更好地解释更详细的内容。我不确定您要解决的问题是什么-您是否希望现场的单位能够继续运行旧版本的软件,同时仍然能够与后端通信,而不是被迫升级?我也很困惑--前几段只谈到固件,但在第三段中,你突然想到如何处理“应用程序”。这个应用程序是什么,它是如何更新的,为什么它与固件不同?今晚我将重写这个问题,以便更清楚。这里有一个典型的“二维变化”问题。一方面,您希望至少有几个版本的服务器接口代码可以用于不同版本的客户端。另一方面,如果您在服务器中发现一个bug,您希望能够只修复一次,而不是在每个版本特定的实例中修复它。。。把所有东西都做成一个版本会很好,但可能不现实;你可能有客户对某个特定版本进行了验收测试,但无法升级,除了稳定版本之外,你可能还需要一个beta测试版本,你可能有定制版本…@Chris:这是问题的一部分。我会试着重新编辑这个问题,以便更详细地解释问题。我同意。在服务器上处理升级决策可以在决策过程发生变化时提供更大的灵活性/可维护性。根据您所在的行业,客户可能不会授权您强制升级他们的设备。我同意。在服务器上处理升级决策可以在决策过程发生变化时提供更大的灵活性/可维护性。根据您所在的行业,客户可能不会授权您强制升级其设备。