大家好!新手发帖。
近期使用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获得的时间值。
...
}
一周热门 更多>