基于ARMcortex-M内核的存储器检测方法技术

技术编号:37315939 阅读:15 留言:0更新日期:2023-04-21 22:57
本发明专利技术属于存储器领域,涉及基于ARM cortex

【技术实现步骤摘要】
基于ARM cortex

M内核的存储器检测方法


[0001]本专利技术属于存储器领域,涉及基于ARM cortex

M内核的存储器检测方法。

技术介绍

[0002]现有的基于ARM cortex

M内核的MCU(包括但不限于GD32F4系列、STM32系列)的片内SRAM自检测一般采用固定地址的整数浮点数的读写、加减乘除、移位等操作进行自检测。
[0003]缺点:只能固定地址检测,自检测不能覆盖全部SRAM存储空间(包括堆栈空间),没有采用存储器行业内常用的检测算法(如MarchC算法),不能对所有SRAM空间做初始化赋零值的操作,不能有效检测SRAM存储器的故障异常位置,故障率识别率极低。

技术实现思路

[0004]专利技术目的:解决对ARM cortex

M内核的MCU(包括但不限于GD32F4系列、STM32系列)的片内SRAM的全部SRAM空间(包括所有堆栈空间)进行快速有效的自检测。
[0005]技术方案:
[0006]一种基于ARM cortex

M内核的存储器检测方法,包括:
[0007]采用符合ARM汇编指令集的编码规范进行编码,使用汇编代码作为算法检测的框架,并使用存储器业界通用检测算法,能够在上电并配置完毕系统主频时钟后执行检测。
[0008]所述采用符合ARM汇编指令集的编码规范进行编码,使用汇编代码作为算法检测的框架,并使用存储器业界通用检测算法,能够在上电并配置完毕系统主频时钟后执行检测,包括:
[0009]获取SRAM第一次自检的结果;
[0010]依据第一次自检的结果,判断上电启动是冷启动还是热启动;
[0011]若是冷启动,获取存储SRAM自检结果的地址偏移量;
[0012]若地址偏移量小于或等于预设值,则获取SRAM自检结果的存储区域的起始地址和区域大小;
[0013]获取起始堆栈指针;
[0014]对起始堆栈指针之后的SRAM空间进行自检;
[0015]若第二次自检通过,则备份全部栈数据,向前移动堆栈指针;
[0016]对起始堆栈指针之前的SRAM空间进行自检;
[0017]若第三次自检通过,则还原全部栈数据,存储三次自检结果。
[0018]所述方法还包括:
[0019]若是热启动,或地址偏移量大于预设值,则结束整个流程。
[0020]所述方法还包括:
[0021]若第二次自检未通过,则存储第二次自检错误现场相关信息。
[0022]所述方法还包括:
[0023]若第三次自检未通过,则存储第三次自检错误现场相关信息,并还原全部栈数据。
[0024]预设值为16个字节。
[0025]当前将要备份全部栈数据的长度=起始堆栈指针

当前SP指针。
[0026]当前SP指针=当前SP指针+0x200。
[0027]有益效果:对所有的SRAM空间进行自检测,包括软件所用所有堆栈空间,能有效检测SRAM存储器的故障异常位置,故障率识别率很高,保证自检测完成后所有SRAM空间均赋零值,同时具备检测MCU冷热启动的功能,自检测时间短(通常不超过几十毫秒),只需经过简单修改配置即可适用于全系类ARM cortex

M内核的MCU的片内SRAM自检测。
附图说明
[0028]图1为一种基于ARM cortex

M内核的存储器检测方法的流程图。
具体实施方式
[0029]本专利技术采用符合ARM汇编指令集的编码规范进行编码,使用汇编代码作为算法检测的框架,并使用存储器业界通用检测算法,能够在上电并配置完毕系统主频时钟后执行检测,具有检测速度快(可以以最高主频运行检测算法)、故障识别率高(采用MarchC算法)、使用范围广泛(适配全系类ARM cortex

M内核的MCU的片内SRAM自检测)等优点,SRAM自检测的汇编代码架构流程图见图1。
[0030]图1软件框架是该专利技术的汇编语言代码实现的,图中提到的对SRAM空间进行自检时均需调用MarchC算法。
[0031]第一步为“获取SRAM自检结果”,是首先根据获取的自检结果来判断是否为冷启动或热启动;
[0032]第二步的判定逻辑为,如果SRAM自检结果为通过,则可直接判定为热启动,否则为冷启动(即为初次上电运行);
[0033]第三步为“获取储存自检结果的地址偏移量”;
[0034]第四步的判定逻辑为如果储存自检结果的地址偏移量小于0x10(即4个字的大小,等于16个字节大小,因为后续储存的相关自检结果的内容至少会是16个字节),则直接退出此子程序,否则,继续执行后续的自检逻辑;
[0035]第五步为“获取SRAM区域的起始地址和区域的大小”,它取决于硬件平台的配置,例如GD32F4系列、STM32系列的SRAM区域的起始地址一般为0x20000000,但是SRAM区域的大小一般均不一样,由具体的MCU决定;
[0036]第六步为“获取起始堆栈指针”,此值在所有的ARM cortex

M内核的MCU内均在同一个位置,即程序代码的第一个字;
[0037]第七步为“对起始堆栈指针之后的SRAM区域进行自检”,由于所有的ARM cortex

M内核的MCU的内存栈区均采用递减储存,故程序首先使用的是起始堆栈指针之前的区域,所有可对起始堆栈指针之后的SRAM区域首先进行自检,此处将调用MarchC算法进行存储器检测;
[0038]第八步为对起始堆栈指针之后的SRAM区域进行自检后且自检通过后,继续执行后续的自检逻辑,否则储存SRAM区域1自检错误现场相关信息(即起始堆栈指针之后的SRAM区域产生自检故障等位置信息);
[0039]第九步为“备份全部栈数据”,由于已经对起始堆栈指针之后的SRAM区域进行自检后且自检通过,故把程序内当前栈内的所有数据先备份到起始堆栈指针之后的SRAM区域内(其备份全部栈数据的的结束地址由以下公式计算得出,备份全部栈数据的的结束地址=“SRAM区域的起始地址”(第五步中的)+“SRAM区域的大小(第五步中的)
‑“
获取储存自检结果的地址偏移量(第三步中的)),当前将要备份全部栈数据的长度=起始堆栈指针

当前SP指针;
[0040]第十步为“移动栈指针”,具体的操作为当前SP指针=当前SP指针+0x200(当前堆栈指针的值向后移动512字节);
[0041]第十一步为“对起始堆栈指针之前的SRAM区域进行自检,之后立即恢复栈指针”,由于起始堆栈指针之前的SRAM区域内的全部栈数据及当前的栈指针已经备用和移动到安全的区域,故现可对起始堆栈指针之前的SRAM区域进行自检,再执行此次SRAM区域自检后本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于ARM cortex

M内核的存储器检测方法,其特征在于,包括:采用符合ARM汇编指令集的编码规范进行编码,使用汇编代码作为算法检测的框架,并使用存储器业界通用检测算法,能够在上电并配置完毕系统主频时钟后执行检测。2.根据权利要求1所述的方法,其特征在于,所述采用符合ARM汇编指令集的编码规范进行编码,使用汇编代码作为算法检测的框架,并使用存储器业界通用检测算法,能够在上电并配置完毕系统主频时钟后执行检测,包括:获取SRAM第一次自检的结果;依据第一次自检的结果,判断上电启动是冷启动还是热启动;若是冷启动,获取存储SRAM自检结果的地址偏移量;若地址偏移量小于或等于预设值,则获取SRAM自检结果的存储区域的起始地址和区域大小;获取起始堆栈指针;对起始堆栈指针之后的SRAM空间进行自检;若第二次自检通过,则备份全...

【专利技术属性】
技术研发人员:李文军丰新龙宣晓刚
申请(专利权)人:太原航空仪表有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1