打印
[经验分享]

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

[复制链接]
2069|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等。

使用特权

评论回复
5
mickit| | 2024-1-6 19:26 | 只看该作者
类似于指针越界,数组越界也是常见的错误来源。

使用特权

评论回复
6
10299823| | 2024-1-6 21:15 | 只看该作者
如果检测到错误,可以根据实际情况采取相应的处理措施,如重传数据、忽略错误数据或采取其他纠正措施。

使用特权

评论回复
7
sanfuzi| | 2024-1-6 22:05 | 只看该作者
程序在运行过程中,需要对可能出现的错误进行提前预判和处理。

使用特权

评论回复
8
houjiakai| | 2024-1-6 22:57 | 只看该作者
CRC多项式决定了CRC的生成方式。不同的应用场景可能需要不同的CRC多项式。选择合适的CRC多项式可以提高检测错误的能力。

使用特权

评论回复
9
updownq| | 2024-1-7 21:28 | 只看该作者
在接收端,对接收到的数据进行同样的CRC计算,并与附加的CRC值进行比较。如果两者不一致,则说明数据传输过程中出现了错误。

使用特权

评论回复
10
sesefadou| | 2024-1-7 21:36 | 只看该作者
CRC的初始化值(Initial Value,IV)是一个重要的参数,它影响了CRC的生成。正确的初始化值可以提高CRC检测错误的能力。

使用特权

评论回复
11
hilahope| | 2024-1-7 22:02 | 只看该作者
在系统运行过程中,可以记录系统日志,以便在系统出现异常时进行分析。同时,可以设置监控机制,实时监控系统运行状态,及时发现异常行为。

使用特权

评论回复
12
cemaj| | 2024-1-7 22:45 | 只看该作者
当CRC检测到错误时,应该有一套明确的错误处理机制,比如重试、日志记录、警报等,以确保系统的稳定性和数据的完整性。

使用特权

评论回复
13
pentruman| | 2024-1-8 13:21 | 只看该作者
在系统启动过程中,或者定期执行CRC检查的例行程序,可以简单地验证这个值是否依然匹配,从而提供了一种快速确定系统状态的方法。

使用特权

评论回复
14
qiufengsd| | 2024-1-8 15:01 | 只看该作者
在开发过程中,应该对应用程序的CRC功能进行自动化测试,确保在不同的数据和状态下CRC都能正确工作。

使用特权

评论回复
15
timfordlare| | 2024-1-8 15:39 | 只看该作者
编译器可以检查出许多潜在的问题,利用这一工具可以提高代码的质量。

使用特权

评论回复
16
pentruman| | 2024-1-8 16:22 | 只看该作者
CRC是一种常用的错误检测方法,它通过在数据块中添加额外的数据,使其能够在接收端被正确地检测和纠正错误。

使用特权

评论回复
17
mickit| | 2024-1-8 16:53 | 只看该作者
在系统启动阶段,可以计算存储在闪存或EEPROM中的固件或配置数据的CRC,并与预先计算好的校验值进行比较。如果两者不匹配,则表明固件或数据可能已损坏,需要重新加载或者恢复到安全状态。

使用特权

评论回复
18
mikewalpole| | 2024-1-8 17:43 | 只看该作者
为系统日志文件添加CRC校验码,用于验证日志记录是否完整无误。这对于故障诊断和数据分析至关重要,防止由于意外断电或其他问题导致的日志信息丢失或损坏。

使用特权

评论回复
19
ingramward| | 2024-1-8 18:26 | 只看该作者
在系统启动时,或者在长时间运行过程中定期进行,将应用程序的CRC校验和与当前运行的应用程序进行比对。如果校验和与应用程序不匹配,说明应用程序可能出现了异常行为,此时可以采取相应的措施,例如重启系统、切换到备用应用程序等。

使用特权

评论回复
20
averyleigh| | 2024-1-9 20:00 | 只看该作者
CRC检查背后的原理是通过生成一个特定的数值,这个数值是根据应用程序的内容计算出来的。当系统启动时,它会重新计算这个数值,并将其与之前保存的CRC值进行比较。如果两个值不相符,那么可以断定在某个时刻应用程序可能已经遭受了数据损坏。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

426

帖子

1

粉丝