0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GD32F527无故进入NMI,真凶竟然是劳苦功高的它 | 技术集结

RT-Thread官方账号 2026-05-28 13:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

文章背景

在使用RT-Thread GD32F527 的 BSP 时添加 RW007 软件包做联网测试以及添加 RT-Thread LVGL 软件包做 LVGL 示例时都会无缘无故的进入 NMI 中断,这个问题很引人思考,对于一个稳定的系统来说,这种不清不楚进入 NMI 的中断的现象是不可以接受的,所以这个问题有必要一探究竟。

启动代码分析

在启动文件会存在下述部分启动代码:

IMPORT |Image$$RW_IRAM1$$RW$$Base|
LDR R0, =|Image$$RW_IRAM1$$RW$$Base| ADD R1, R0,#0x8000 LDR R2, =0x0MEM_INIT STRD R2, R2, [R0] ,#8 CMP R0, R1 BNE MEM_INIT

接下来逐步分析上述代码:


IMPORT |Image$$RW_IRAM1$$RW$$Base|
LDR R0, =|Image$$RW_IRAM1$$RW$$Base|


上述代码表示引用一个来自外部文本的符号,该符号是由链接器生成,并将其加载至 R0 寄存器


ADD R1, R0, #0x8000LDR R2, =0x0


然后将 R0 偏移 0x8000 字节赋值给 R1 寄存器,并将 R0 寄存器初始化为 0 值,此时 R1 保存着待初始化区域的结束地址。


MEM_INIT STRD R2, R2, [ R0 ] ,#8 CMP R0, R1 BNE MEM_INIT


上述代码是最关键的一步,(1)行代码表示将俩字数据存储至 R0 地址指向的地方,然后将地址+ 8 字节。

然后比较 R0 与 R1 的值,如果不相等则再次跳转至MEM_INIT 符号执行。

上述代码的作用就是将 RAM1 区域的起始 0x8000 字节的数据清空。

为什么需要这么做?

不这么做会有什么问题呢?

带着问题我们去看一下数据手册。

我们搜索一个 ECC 的词发现其与 RAM 和 ROM 都有相关的配置。

aa793582-5a59-11f1-ab55-92fbcf53809c.png

继续往下看会有这样的一段描述:

aa829af0-5a59-11f1-ab55-92fbcf53809c.png

上述描述有几个关键词:ECC, 读操作,校验。

那这里简洁的描述关键部分:ECC 可以纠正存储单比特的错误以及发现双比特的错误,但是无法发现双比特无法纠正的问题时就会触发 NMI 中断,数据手册中的描述如下:

aa8f9caa-5a59-11f1-ab55-92fbcf53809c.png

问题根源与解决方案

现在回到一开始的问题,为什么添加一些软件包后就会触发 NMI 中断呢?事情到这也逐步清晰了,肯定是和上述描述有关。

这里还有一个背景知识,RAM 在刚启动时其数据是不确定的。

由于在写的行为下才会写入 ECC 的校验码,读取时会和该校验码进行对比校验,由于 RAM 中的数据是不确定且未生成正确校验码,如果直接读取数据就会校验失败触发 NMI 中断。

那么上述问题如何解决呢,可以修改链接脚本上述清空的区域,将其范围改大或者直接清空整块 RAM。

比如上述问题社区的其它小伙伴也遇到类似问题,所以特此写下该文章。

aaa63adc-5a59-11f1-ab55-92fbcf53809c.png


问题原帖:

https://club.rt-thread.org/ask/question/82c4ca58f7662af0.html


ECC功能的价值

当然 ECC 功能是一个非常有用的功能,在一些极端电磁环境,比如有些工业机器人工作在大电压且电磁环境复杂的场景,ECC 在这个时候就能体现它的作用了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • BSP
    BSP
    +关注

    关注

    1

    文章

    109

    浏览量

    28165
  • RT-Thread
    +关注

    关注

    32

    文章

    1662

    浏览量

    45504
  • NMI
    NMI
    +关注

    关注

    0

    文章

    9

    浏览量

    10207
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于兆易创新GD32F527系列MCU的多媒体门禁系统解决方案

    基于GD32F527系列MCU的多媒体门禁系统,主控GD32F527系列MCU,具备摄像头采集图像(DMA直接到SDRAM),保存照片,查看照片。DCI数字图像接口、TLI接口驱动TFT-LCD屏幕
    的头像 发表于 10-29 11:37 1.1w次阅读
    基于兆易创新<b class='flag-5'>GD32F527</b>系列MCU的多媒体门禁系统解决方案

    基于RT-Thread与兆易创新GD32F527的工业级网络-CAN透传网关设计与实现 | 技术集结

    目录系统概述RT-Thread使用情况硬件框架软件架构软件模块详解功能展示链接地址1系统概述本系统是一个基于GD32F527I_EVAL和RT-Thread实时操作系统开发的工业级网络-CAN总线透
    的头像 发表于 02-10 16:05 1.7w次阅读
    基于RT-Thread与兆易创新<b class='flag-5'>GD32F527</b>的工业级网络-CAN透传网关设计与实现 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    N9H20 GPIO上电竟然是高电平,有没有办法解决?

    一直很纳闷,GPIO上电竟然是高电平。有没有办法解决,是不是要改动启动程序才能解决问题?
    发表于 01-17 08:27

    [转帖]这样的建站程序,竟然是免费的!

    这样的建站程序,竟然是免费的!废话就不多说了,大家看了图再发表意见吧![/url][url=http://b86.net]这样的程序,只需要,购买耐思尼克www.b86.net/?s=cartoon
    发表于 05-22 16:06

    影响PCB价格的因素竟然是这些,表示都忽略了

    影响PCB价格的因素竟然是这些,表示都忽略了
    发表于 04-09 19:41

    PoE交换机供电过程中的损耗有多大?

    作为一种颇为“出名”的安防电源供电设备,PoE交换机可谓是“劳苦功高”,不仅要传输数据,还要传输电力。一般标称的供电功率,可能并没有那么大喔。PoE供电的标准:af和at,前者规定每个端口的供电
    发表于 11-29 15:43

    【NUCLEO-F412ZG试用体验】Nucleo412竟然是6层板

    本帖最后由 zpzdd 于 2017-2-28 09:37 编辑 看了板子的图纸才知道Nucleo412竟然是6层板,ST真是大手笔啊
    发表于 02-28 09:36

    你不知道的FPC,的发展史竟然是这样的!

    你不知道的FPC,的发展史竟然是这样的!
    的头像 发表于 11-15 10:48 2716次阅读

    GD32F527xx数据表

    电子发烧友网站提供《GD32F527xx数据表.pdf》资料免费下载
    发表于 01-17 14:09 1次下载
    <b class='flag-5'>GD32F527</b>xx数据表

    GD32F527的设备限制

    电子发烧友网站提供《GD32F527的设备限制.pdf》资料免费下载
    发表于 01-17 15:54 2次下载
    <b class='flag-5'>GD32F527</b>的设备限制

    UPS(不间断电源)故障频发?原因竟然是这样

    UPS(不间断电源)故障频发?原因竟然是这样
    的头像 发表于 04-19 13:53 2189次阅读
    UPS(不间断电源)故障频发?原因<b class='flag-5'>竟然是</b>这样

    【直播预告】GD32F527高性能MCU全方位解析,与RT-Thread的全栈开发实战 | 博观讲堂

    10月10日晚20:00,RT-Thread携手兆易创新专家团队,带来GD32F527芯片深度解读。在工业控制、能源电力等应用领域,工程师面临着性能、安全和开发效率的多重挑战。GD32F527芯片
    的头像 发表于 10-07 10:03 1076次阅读
    【直播预告】<b class='flag-5'>GD32F527</b>高性能MCU全方位解析,与RT-Thread的全栈开发实战 | 博观讲堂

    基于RT-Thread与GD32F527I-EVAL的多媒体门禁系统 | 技术集结

    兆易创新本月正式推出GD32F503/505高性能系列32位通用微控制器,新品将全面支持RT-Thread平台。GD32F503/505高性能系列显著扩大了基于ArmCortex-M33内核的产品
    的头像 发表于 11-25 18:31 1402次阅读
    基于RT-Thread与<b class='flag-5'>GD32F527</b>I-EVAL的多媒体门禁系统 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    基于RT-Thread和兆易创新GD32F527系列MCU的健康监测站 | 技术集结

    本项目为RT-Thread嵌入式大赛获奖作品,基于RT-Thread和兆易创新GD32F527I-EVAL的健康监测站。目录项目概述系统硬件框架结构基础驱动程序实现整体驱动实现工程效果演示视频及代码演示
    的头像 发表于 01-20 17:37 8708次阅读
    基于RT-Thread和兆易创新<b class='flag-5'>GD32F527</b>系列MCU的健康监测站 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    基于 RT-Thread 和兆易创新GD32F527的CAN总线监视器 | 技术集结

    【适配新进展】兆易创新与RT-Thread的适配大家庭又添新成员啦!GD32VW553现已正式完成适配,并在社区开发者的协作下完成了电子书《GD32VW553开发实践指南》
    的头像 发表于 03-05 10:04 508次阅读
    基于 RT-Thread 和兆易创新<b class='flag-5'>GD32F527</b>的CAN总线监视器 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>