嵌入式学习小组
直播中

蔡妮芩

7年用户 182经验值
私信 关注

为什么我写的电子时钟的比正常的表要慢10几倍?

为什么我用UCOS/II的软件定时器
1.
tmr1=OSTmrCreate(10,10,OS_TMR_OPT_PERIODIC,(OS_TMR_CALLBACK)tmr1_callback,0,"tmr1",&err);  //100ms执行一次
我把这个函数配置的这么多!
2.
我把os_cfg.h里面的
#define OS_TMR_CFG_tiCKS_PER_SEC 100u  /*     Rate at which timer management task runs (Hz)            */
// 1s/100=10ms,往后使用的定时器...
配的这么多
我什么我写的电子时钟的比正常的表要慢10几倍啊?
也就是说我的定时器定时的是1s中断一次,却慢了10几倍啊?

回帖(7)

符筹荣

2019-6-26 07:03:58
先检查你的时钟配置正确了没有.
举报

范佳慧

2019-6-26 07:16:12
感觉楼主没有认真的阅读软件定时器,软件定时器需要信号量触发的,触发函数在这里
oid  OSTimeTickHook (void)
{
#if OS_APP_HOOKS_EN > 0u
    App_TimeTickHook();
#endif
#if OS_TMR_EN > 0u
    OSTmrCtr++;
    特别注意这里,你的慢10倍估计是 OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC = 10ms 触发一次
    if (OSTmrCtr >= (OS_TICKS_PER_SEC / OS_TMR_CFG_TICKS_PER_SEC)) {
        OSTmrCtr = 0;
        OSTmrSignal();
    }
#endif
}
举报

陈韵瑄

2019-6-26 07:22:14
谢谢各位了!
举报

甘晓茵

2019-6-26 07:42:08
//原来是tcnt没有清零所以导致我的时间慢了10几倍,
//我没有清零他还是要变可能是因为tcnt被定义成了U8
//及unsigned int可能是加到溢出了,又从0开始加,所以感觉慢了
//十几倍!以后一定要注意小问题啊!但是小问题会导致大错误,浪费时间啊 !所以做事要细心啊!
//呵呵!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分