关于c8051f930单片机意外复位的问题

2019-07-16 05:14发布

大家好!新手发帖。
     近期使用C8051F930单片机做了个小系统,但系统不稳定,跑一段时间后就会自动复位。
     首先我可以肯定看门狗我已经关了。
     另外,在意外复位时,通过查看复位源寄存器中的FERROR位及PORSF位,发现PORSF为0,而FERROR为1,这也就意味着这是一个flash错误导致的复位。但第一次遇到此类问题,实在有些不知如何下手。对代码也是一段一段的试,发现有一个可疑函数调用,注释掉后不再复位,但实在想不明白其根本原因在何处。贴出来给各位看看,看出了代码的问题还请不吝赐教,能给出建议鄙人不胜感激。谢谢!^_^

#define timerval_ticks(tv)  (*(uint32_t*)((tv)->resv+0))
#define timerval_thtlv(tv)  (*(uint16_t*)((tv)->resv+4))


interval_t timerval_interval(const struct timerval *lhs, const struct timerval *rhs) {
    uint32_t pdata diff = 0;
    diff = timerval_ticks(lhs)-timerval_ticks(rhs);
    diff <<= 16;
    diff += timerval_thtlv(lhs);
    diff -= timerval_thtlv(rhs);
    return diff*48/25;
}
void    function_name(){
    interval_t tn=0;
    ...
    //即此处调用
    tn = timerval_interval(now, &_last);//now与_last为从TIMER获得的时间值。          
    ...
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。