[经验分享] 确保系统更加可靠地运行并捕获异常行为的技巧-检查应用程序的CRC

[复制链接]
3517|59
 楼主| 菜鸟的第一步 发表于 2023-12-15 10:43 | 显示全部楼层 |阅读模式

对嵌入式工程师来说一个很大的好处是,我们的IDE和工具链可以自动产生应用程序或内存空间校验和(Checksum),从而根据这个校验和验证应用程序是否完好。有趣的是,在许多这些案例中,只有在将程序代码加载到设备时,才会用到校验和。

然而,如果CRC或校验和保持在内存中,那么验证应用程序在启动时(或甚至对长时间运行的系统定期验证)是否仍然完好是确保意外之事不会发生的极好途径。现在一个编程过的应用程序发生改变的概率是很小的,但考虑每年交付的数十亿个微控制器以及可能恶劣的工作环境,医疗仪器应用程序崩溃的机会并不是零。更有可能的是,系统中的一个缺陷可能导致某一扇区发生闪存写入或闪存擦除,从而破坏应用程序的完整性。


pixhw 发表于 2024-1-6 16:49 | 显示全部楼层
在应用程序加载到设备时,也可以使用CRC校验和来验证应用程序是否完好。这可以确保在应用程序传输过程中没有出现错误。
robincotton 发表于 2024-1-6 17:46 | 显示全部楼层
看门狗定时器是一种可以用来检测系统异常的硬件设备。在系统正常运行过程中,程序需要定期向看门狗定时器发送信号。如果程序未能在规定时间内发送信号,看门狗定时器会触发一个中断,从而提醒系统可能出现异常。
claretttt 发表于 2024-1-6 18:34 | 显示全部楼层
常见的CRC算法包括CRC-32、CRC-16等。
mickit 发表于 2024-1-6 19:26 | 显示全部楼层
类似于指针越界,数组越界也是常见的错误来源。
10299823 发表于 2024-1-6 21:15 | 显示全部楼层
如果检测到错误,可以根据实际情况采取相应的处理措施,如重传数据、忽略错误数据或采取其他纠正措施。
sanfuzi 发表于 2024-1-6 22:05 | 显示全部楼层
程序在运行过程中,需要对可能出现的错误进行提前预判和处理。
houjiakai 发表于 2024-1-6 22:57 | 显示全部楼层
CRC多项式决定了CRC的生成方式。不同的应用场景可能需要不同的CRC多项式。选择合适的CRC多项式可以提高检测错误的能力。
updownq 发表于 2024-1-7 21:28 | 显示全部楼层
在接收端,对接收到的数据进行同样的CRC计算,并与附加的CRC值进行比较。如果两者不一致,则说明数据传输过程中出现了错误。
sesefadou 发表于 2024-1-7 21:36 | 显示全部楼层
CRC的初始化值(Initial Value,IV)是一个重要的参数,它影响了CRC的生成。正确的初始化值可以提高CRC检测错误的能力。
hilahope 发表于 2024-1-7 22:02 | 显示全部楼层
在系统运行过程中,可以记录系统日志,以便在系统出现异常时进行分析。同时,可以设置监控机制,实时监控系统运行状态,及时发现异常行为。
cemaj 发表于 2024-1-7 22:45 | 显示全部楼层
当CRC检测到错误时,应该有一套明确的错误处理机制,比如重试、日志记录、警报等,以确保系统的稳定性和数据的完整性。
pentruman 发表于 2024-1-8 13:21 | 显示全部楼层
在系统启动过程中,或者定期执行CRC检查的例行程序,可以简单地验证这个值是否依然匹配,从而提供了一种快速确定系统状态的方法。
qiufengsd 发表于 2024-1-8 15:01 | 显示全部楼层
在开发过程中,应该对应用程序的CRC功能进行自动化测试,确保在不同的数据和状态下CRC都能正确工作。
timfordlare 发表于 2024-1-8 15:39 | 显示全部楼层
编译器可以检查出许多潜在的问题,利用这一工具可以提高代码的质量。
pentruman 发表于 2024-1-8 16:22 | 显示全部楼层
CRC是一种常用的错误检测方法,它通过在数据块中添加额外的数据,使其能够在接收端被正确地检测和纠正错误。
mickit 发表于 2024-1-8 16:53 | 显示全部楼层
在系统启动阶段,可以计算存储在闪存或EEPROM中的固件或配置数据的CRC,并与预先计算好的校验值进行比较。如果两者不匹配,则表明固件或数据可能已损坏,需要重新加载或者恢复到安全状态。
mikewalpole 发表于 2024-1-8 17:43 | 显示全部楼层
为系统日志文件添加CRC校验码,用于验证日志记录是否完整无误。这对于故障诊断和数据分析至关重要,防止由于意外断电或其他问题导致的日志信息丢失或损坏。
ingramward 发表于 2024-1-8 18:26 | 显示全部楼层
在系统启动时,或者在长时间运行过程中定期进行,将应用程序的CRC校验和与当前运行的应用程序进行比对。如果校验和与应用程序不匹配,说明应用程序可能出现了异常行为,此时可以采取相应的措施,例如重启系统、切换到备用应用程序等。
averyleigh 发表于 2024-1-9 20:00 | 显示全部楼层
CRC检查背后的原理是通过生成一个特定的数值,这个数值是根据应用程序的内容计算出来的。当系统启动时,它会重新计算这个数值,并将其与之前保存的CRC值进行比较。如果两个值不相符,那么可以断定在某个时刻应用程序可能已经遭受了数据损坏。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

459

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部