学习笔记:一种更正粒子翻转的校验方法:三取二校验

前言

粒子翻转现象一般常出现在航天领域中,粒子翻转现象出现的诱因是当航天航空的设备在高(太)空环境下运转时,其敏感节点可能会遭到因太阳活动所产生的能量粒子的撞击,造成存储单元状态发生改变。当然若是设备是用于日常生活的环境中,除非甲方有明确需求,否则是在研发过程中是不需要考虑这种现象的。这里介绍一种检验并更正粒子翻转的方法:三取二校验。

原理

三取二校验的原理就是将需要校验的程序(数据)备份成三份(算原程序)存储到不同的地址中,两两对比程序同一位的数据,若所有数据相同,则证明该地址内的程序内容正确。若某一位出现数据不同,则说明该位的数据内容发生偏移或改变,需要校正数据,将该位置的(三个)数据先进行按位与再将得出的三个数据进行按位或,最后得出的数据即是修正后的数据,将修正后的数据内容重新写入对应的存储地址中。

三取二校验流程

这里以笔者的一个项目为例作为示范:该项目中程序主要分为两个部分:BootLoader和APP,将两部分的程序分别备份为三份,存储在不同的flash地址内(即BootLoader1、2、3和APP1、2、3)上电后程序由BootLoader1启动,启动后程序会判断是否需要对APP进行3取2校验,若需要校验且校验结果错误,则对APP程序进行更正,若校验结果正常或不需校验,则跳转到APP1程序,当APP1正常运行后,每经过50ms校验1k的数据(先校验BootLoader后校验APP)。校验时若BootLoader程序校验结果中存在错误,则直接对错误内容进行更正,更正后继续进行校验直到本次校验结束。当BootLoader部分全部校验完成后,开始校验自身APP部分程序,若校验结果正常,则等待下一次新校验;若校验结果出现错误,首先需要判断出错部分是否包括APP1;若APP1无问题则直接对APP2和APP3出错部分进行更正;若APP1自身出现错误,则先更正APP2和APP3出错部分,待全部程序校验并更正完成后跳转回BootLoader1程序对APP1程序进行更正,更正并校验正确后再跳转回APP1程序再次进行上述循环,具体校验流程见下图。

三取二校验功能的c语言实现

/*****************************************************
//功能:3取2内容更正函数 
//pA:比较内容A
//pB:比较内容B
//pC:比较内容C
//返回值:比较后的正确结果
*****************************************************/
u8 Content_Correct(u8 *pA, u8 *pB, u8 *pC) 
{
    u8 uitemp1;
    u8 uitemp2;
    u8 uitemp3;
    u8 uiresult;

	/* 三区比较 */
    if (((*pA) == *pB) && ((*pA) == (*pC)))
    {
    	/* 相等则直接使用 */
        uiresult = (*pA);
    }
    else
    {
    	/* 按位与,再按位或 */
        uitemp1 = (*pA) & (*pB);
        uitemp2 = (*pA) & (*pC);
        uitemp3 = (*pB) & (*pC);
        uiresult = uitemp1 | uitemp2 | uitemp3;
    }
    return uiresult;
}

具体的学习代码可见笔者上传的对应的工程文件。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值