【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. 最终

  • 发现不是栈空间分配的问题。
  • 发现使用另一台电脑环境编写得到的文件和自己电脑生成的文件,完全不一致。怀疑是工程环境问题带来的。
  • 换了一个编译环境后,基本不再复现。
相关推荐
不爱记笔记1 天前
GPT-5.6 Sol 真实项目实测!Bug修复、UI重构与帆船游戏复刻
人工智能·gpt·ui·chatgpt·bug·openai
蒙塔基的钢蛋儿2 天前
记一次 STM32H723 硬件 Bug 排查:写个 ETH 寄存器,SDRAM 数据飞了
stm32·嵌入式硬件·bug
wok1574 天前
Git Bash 执行中文命令报错 127:MSYS 参数编码 bug 排查与修复
git·bug·bash
李永奉5 天前
杰理可视化SDK开发-【BUG】AC7006F8更换AC7006F6芯片添加双备份OTA升级功能报代码端空间不足问题
bug
结实的洋葱5 天前
为啥程序会有bug?
bug
stevenzqzq5 天前
解决复杂bug思路
bug
namexingyun5 天前
Scaling Law bug实战启示:从“虚胖“到“精瘦“的算力效率革命
开发语言·网络·人工智能·bug·ai编程
callJJ1 个月前
Volta + Claude Code 在 Windows 上的路径 Bug 复盘
windows·bug
xsc-xyc1 个月前
记一次RK3568搭建NAS BUG:开发板插上 USB 移动硬盘没反应
bug
放风铃的兔子1 个月前
我把 5 个 Python bug 投进 CubeSandbox 当沙盘 —— 从 envd 协议反编译到一键 RED→GREEN
bug·issue