研究了一个星期找问题一直找不到问题,
Unhandled Exception 5:Load Access Fault
mcause:0x0000000000000005,mtval:0x0000000002500014,mepc:0x00000000400152d8
进场不定时出现这样类似的错误,有时是"Instruction Access Fault",
有时候是"Illegal Instruction",
到底是哪里有问题啊,能不能屏蔽这样的错误啊,好烦躁好烦躁
离线
mepc是出错的指令,每次出错的地方都一样吗?用addr2line看看 0x400152d8 是代码的哪里
离线
mepc是出错的指令,每次出错的地方都一样吗?用addr2line看看 0x400152d8 是代码的哪里
    0x400152d8:    30009073              csrw    mstatus,ra
定位到源代码是这个
.macro RESTORE_ALL
#ifdef ENABLE_FPU
    /* restore float register  */
    mv t2, sp
    addi t2, t2, CTX_GENERAL_REG_NR * REGBYTES   /* skip all normal reg */
    li  t0, MSTATUS_FS
    csrs mstatus, t0
    fld f0, FPU_CTX_F0_OFF(t2)
    fld f1, FPU_CTX_F1_OFF(t2)
    fld f2, FPU_CTX_F2_OFF(t2)
    fld f3, FPU_CTX_F3_OFF(t2)
    fld f4, FPU_CTX_F4_OFF(t2)
    fld f5, FPU_CTX_F5_OFF(t2)
    fld f6, FPU_CTX_F6_OFF(t2)
    fld f7, FPU_CTX_F7_OFF(t2)
    fld f8, FPU_CTX_F8_OFF(t2)
    fld f9, FPU_CTX_F9_OFF(t2)
    fld f10,FPU_CTX_F10_OFF(t2)
    fld f11,FPU_CTX_F11_OFF(t2)
    fld f12,FPU_CTX_F12_OFF(t2)
    fld f13,FPU_CTX_F13_OFF(t2)
    fld f14,FPU_CTX_F14_OFF(t2)
    fld f15,FPU_CTX_F15_OFF(t2)
    fld f16,FPU_CTX_F16_OFF(t2)
    fld f17,FPU_CTX_F17_OFF(t2)
    fld f18,FPU_CTX_F18_OFF(t2)
    fld f19,FPU_CTX_F19_OFF(t2)
    fld f20,FPU_CTX_F20_OFF(t2)
    fld f21,FPU_CTX_F21_OFF(t2)
    fld f22,FPU_CTX_F22_OFF(t2)
    fld f23,FPU_CTX_F23_OFF(t2)
    fld f24,FPU_CTX_F24_OFF(t2)
    fld f25,FPU_CTX_F25_OFF(t2)
    fld f26,FPU_CTX_F26_OFF(t2)
    fld f27,FPU_CTX_F27_OFF(t2)
    fld f28,FPU_CTX_F28_OFF(t2)
    fld f29,FPU_CTX_F29_OFF(t2)
    fld f30,FPU_CTX_F30_OFF(t2)
    fld f31,FPU_CTX_F31_OFF(t2)
    /* clr FS domain */
    csrc mstatus, t0
    /* clean status would clr sr_sd; */
    li t0, MSTATUS_FS_CLEAN
    csrs mstatus, t0
#endif /* ENABLE_FPU */
/* restore general register */
    /* resw ra to sepc */
    LOAD x1,   0 * REGBYTES(sp)
    csrw mepc, x1
    LOAD x1,   2 * REGBYTES(sp)
    csrw mstatus, x1
LOAD x1, 1 * REGBYTES(sp)
    LOAD x3,   3 * REGBYTES(sp)
    LOAD x4,   4 * REGBYTES(sp)
    LOAD x5,   5 * REGBYTES(sp)
    LOAD x6,   6 * REGBYTES(sp)
    LOAD x7,   7 * REGBYTES(sp)
    LOAD x8,   8 * REGBYTES(sp)
    LOAD x9,   9 * REGBYTES(sp)
    LOAD x10, 10 * REGBYTES(sp)
    LOAD x11, 11 * REGBYTES(sp)
    LOAD x12, 12 * REGBYTES(sp)
    LOAD x13, 13 * REGBYTES(sp)
    LOAD x14, 14 * REGBYTES(sp)
    LOAD x15, 15 * REGBYTES(sp)
    LOAD x16, 16 * REGBYTES(sp)
    LOAD x17, 17 * REGBYTES(sp)
    LOAD x18, 18 * REGBYTES(sp)
    LOAD x19, 19 * REGBYTES(sp)
    LOAD x20, 20 * REGBYTES(sp)
    LOAD x21, 21 * REGBYTES(sp)
    LOAD x22, 22 * REGBYTES(sp)
    LOAD x23, 23 * REGBYTES(sp)
    LOAD x24, 24 * REGBYTES(sp)
    LOAD x25, 25 * REGBYTES(sp)
    LOAD x26, 26 * REGBYTES(sp)
    LOAD x27, 27 * REGBYTES(sp)
    LOAD x28, 28 * REGBYTES(sp)
    LOAD x29, 29 * REGBYTES(sp)
    LOAD x30, 30 * REGBYTES(sp)
    LOAD x31, 31 * REGBYTES(sp)
    addi  sp,   sp, CTX_GENERAL_REG_NR * REGBYTES
#ifdef ENABLE_FPU
    addi  sp,   sp, CTX_FPU_REG_NR * REGBYTES
#endif
.endm
离线
mepc是出错的指令,每次出错的地方都一样吗?用addr2line看看 0x400152d8 是代码的哪里
用的是这个兄弟的代码
https://github.com/bigmagic123/d1-nezha-rtthread 移植到d1上的,我用的是f133,f133和d1应该是通用的
离线