当前位置: 首页 > news >正文

【BUG】段错误

1. 问题

  • 8核工程,核4在运行了20分钟以上,发生了段错误。
[C66xx_4] A0=0x53 A1=0x53
A2=0x4 A3=0x167e
A4=0x1600 A5=0x850e2e
A6=0x845097 A7=0xbad9f5e0
A8=0x0 A9=0x33
A10=0x53535353 A11=0x0
A12=0x0 A13=0x0
A14=0x0 A15=0x0
A16=0x36312e35 A17=0x20
A18=0x844df0 A19=0x0
A20=0x0 A21=0x0
A22=0xae7fafb7 A23=0xedff97ab
A24=0x6adfefaf A25=0xdfbffbff
A26=0xaedbf7bd A27=0xbad9f400
A28=0xbad9f664 A29=0x41200000
A30=0xbad9f662 A31=0xba216800
B0=0x1 B1=0x20
B2=0x8450bc B3=0x53535353
B4=0x16 B5=0x850e2c
B6=0x0 B7=0x0
B8=0x844feb B9=0x30
B10=0x0 B11=0x0
B12=0x0 B13=0x0
B14=0x850910 B15=0x8450a0
B16=0x6 B17=0x84501c
B18=0x842253 B19=0x3feff0c8
B20=0x87fffc B21=0x1
B22=0xf B23=0x0
B24=0x5a550 B25=0x3e8
B26=0xbb45c1d4 B27=0xbb45c1d0
B28=0xbb45c1cc B29=0x0
B30=0x0 B31=0x2000
NTSR=0x1820d    非屏蔽中断/异常 线程状态寄存器
ITSR=0x420d     中断线程状态寄存器
IRP=0x835ca8    中断返回指针寄存器
SSR=0x0         饱和状态寄存器
AMR=0x0         地址模式寄存器
RILC=0x0        重载内部循环计数寄存器
ILC=0x0         内部循环计数寄存器
Exception at 0x53535350
EFR=0x2         异常标志寄存器
NRP=0x53535350  非屏蔽中断的返回指针寄存器
Internal exception: IERR=0x1 内部异常报告寄存器
Instruction fetch exception
ti.sysbios.family.c64p.Exception: line 255: E_exceptionMin: pc = 0x53535350, sp = 0x008450a0.
To see more exception detail, use ROV or set 'ti.sysbios.family.c64p.Exception.enablePrint = true;'
xdc.runtime.Error.raise: terminating execution
  • 分析段错误,首先要明白这些异常寄存器的含义,在sprugh7中搜一下这几个寄存器的含义。
  • Nonmaskable Interrupt (NMI) 非屏蔽中断。

2. 寄存器

NRP

NMI返回指针寄存器(NRP)包含返回指针,它将CPU引导到正确的位置,以便在NMI处理后继续执行程序。
当NMI服务完成时,使用中断服务例程中NRP(B NRP)中地址的分支将返回到程序流。
NRP包含程序流中第一个执行包的32位地址,该包由于不可擦除中断而未被执行。
尽管您可以向NRP写入一个值,但任何后续的中断处理都可能覆盖该值。
在这里插入图片描述

  • NRP的值,表示系统进入NMI异常中断之前运行的程序地址

IERR

内部异常报告寄存器(IERR)包含指示内部异常原因的标志。
在同时发生内部异常的情况下,不同的异常源可能会设置相同的标志。
在这种情况下,可能无法确定个别异常的确切原因

  • IERR = 0x1 , bit0 = 1 表示Instruction fetch exception
    0 Instruction fetch exception is not the cause.
    1 Instruction fetch exception is the cause

  • 可以猜测是,某个地址上的代码段,被其他代码改写。

3. 最终

  • 发现不是栈空间分配的问题。
  • 发现使用另一台电脑环境编写得到的文件和自己电脑生成的文件,完全不一致。怀疑是工程环境问题带来的。
  • 换了一个编译环境后,基本不再复现。
http://www.lryc.cn/news/302201.html

相关文章:

  • 深入理解指针(3)
  • ssm在线学习平台-计算机毕业设计源码09650
  • 【Linux 内核源码分析】内存映射(mmap)机制原理
  • 贪心算法之合并区间
  • Eclipse - Colors and Fonts
  • java 数据结构LinkedList类
  • 第五次作业(防御安全)
  • 阿里云香港轻量应用服务器是什么线路?
  • C# Winform .net6自绘的圆形进度条
  • Git基本操作(超详细)
  • 【AGI视频】Sora的奇幻之旅:未来影视创作的无限可能
  • Docker部署nginx
  • C++Qt——自定义信号与槽
  • 提高项目的性能和响应速度的方法
  • QT学习事件
  • 第13章 网络 Page818 UDP(和TCP的比较)
  • EMQX Enterprise 5.4 发布:OpenTelemetry 分布式追踪、OCPP 网关、Confluent 集成支持
  • 记录 | C++ cout.setf(ios::fixed)
  • Eclipse 创建 Hello World 工程
  • 【前端工程化面试题】vite热更新原理
  • 【leetcode】判断二叉树是否完全二叉树
  • Java多线程系列——内存模型JMM
  • 深入理解 Vue3 中的 setup 函数
  • 【QT+QGIS跨平台编译】之三十六:【RasterLite2+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • java面试题:分布式和微服务的区别
  • GO语言的变量与常量
  • java面试多线程篇
  • Anaconda + VS Code 的安装与使用
  • Python爬虫html网址实战笔记
  • C++ 调用js 脚本