硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5373|回复: 2
收起左侧

[有问必答] 软件定时器定时时间不准确是什么原因?

[复制链接]

5

主题

5

回帖

20

积分

新手上路

积分
20
发表于 2016-5-30 20:28:52 | 显示全部楼层 |阅读模式
使用的是V5的UCOSIII程序,#define  OS_CFG_TMR_TASK_RATE_HZ          10u    ,定时器分辨率为100ms
OS_TMR         Out_Tmr;

void  OutCallback (OS_TMR *p_tmr, void *p_arg)
{
    Soft_Timer_Out_Flag=ECO_TRUE;
}
unsigned char Timer_Create(void)
{
    // 10 Hz,定时5s
    OS_ERR Err;
    OSTmrCreate(&Out_Tmr, "Bms", 1, 50, OS_OPT_TMR_ONE_SHOT, OutCallback, (void*)0, &Err);
    if(OS_ERR_NONE==Err)
        return ECO_TRUE;
    else     
        return ECO_FALSE;
}

unsigned char Timer_Start(void)
{
    OS_ERR Err;
   
    OSTmrStart(&Out_Tmr, &Err);
    if(OS_ERR_NONE==Err)
        return ECO_TRUE;
    else     
        return ECO_FALSE;
}
tPruint8     Timer_Stop(void)
{
    OS_ERR Err;
   
    OSTmrStop(&Out_Tmr, OS_OPT_TMR_NONE, NULL, &Err);
    if(OS_ERR_NONE==Err)
        return ECO_TRUE;
    else     
        return ECO_FALSE;
}
定时器创建和启动都没有问题(定时5s),但启动之后很快(大约在几ms)就进入超时回调函数,即使把定时时间定时为500,也在100ms内调用超时回调函数。
这是什么原因导致的呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2016-5-30 21:15:10 | 显示全部楼层
首先你使用的是单次定时器模式 OS_OPT_TMR_ONE_SHOT,
然后你设置的第三个参数1 就是你说的100ms就进入到回调函数了的原因。
回复

使用道具 举报

5

主题

5

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2016-5-31 09:07:22 | 显示全部楼层

回 eric2013 的帖子

eric2013:首先你使用的是单次定时器模式 OS_OPT_TMR_ONE_SHOT,
然后你设置的第三个参数1 就是你说的100ms就进入到回调函数了的原因。 (2016-05-30 21:15) 
不好意思啊,是我看错了,我没仔细看注释,谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 03:37 , Processed in 0.041533 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表