嵌入式技术论坛
直播中

剑寒九州

8年用户 654经验值
私信 关注
[问答]

为什么软件定时器只能获取一次运行状态呢


只获取到一次,之后就获取不到状态了,这是为什么呢

现在显示的是0x20a7 这个是会变的,每次重启之后就不一样了

回帖(2)

夏日余晖

2022-7-29 10:26:04
RT_TIMER_CTRL_GET_STATE
应该是新版本增加的命令字
看代码正确的返回值是0或1,不清楚为何你的返回0x20a7,自己单步调试看看,哪里有问题吧

/**
* @Brief This function will get or set some options of the timer
*
* @param timer the timer to be get or set
* @param cmd the control command
* @param arg the argument
*
* @Return the statu of control
*/
rt_err_t rt_timer_control(rt_timer_t timer, int cmd, void *arg)
{
    rt_base_t level;
    /* parameter check */
    RT_ASSERT(timer != RT_NULL);
    RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer);
    level = rt_hw_interrupt_disable();
    switch (cmd)
    {
    case RT_TIMER_CTRL_GET_TIME:
        *(rt_tick_t *)arg = timer->init_tick;
        break;
    case RT_TIMER_CTRL_SET_TIME:
        RT_ASSERT((*(rt_tick_t *)arg) < RT_TICK_MAX / 2);
        timer->init_tick = *(rt_tick_t *)arg;
        break;
    case RT_TIMER_CTRL_SET_ONESHOT:
        timer->parent.flag &= ~RT_TIMER_FLAG_PERIODIC;
        break;
    case RT_TIMER_CTRL_SET_PERIODIC:
        timer->parent.flag |= RT_TIMER_FLAG_PERIODIC;
        break;
    case RT_TIMER_CTRL_GET_STATE:
        if(timer->parent.flag & RT_TIMER_FLAG_ACTIVATED)
        {
            /*timer is start and run*/
            *(rt_uint32_t *)arg = RT_TIMER_FLAG_ACTIVATED;
        }
        else
        {
            /*timer is stop*/
            *(rt_uint32_t *)arg = RT_TIMER_FLAG_DEACTIVATED;
        }
        break;
    case RT_TIMER_CTRL_GET_REMAIN_TIME:
        *(rt_tick_t *)arg =  timer->timeout_tick;
        break;
    default:
        break;
    }
    rt_hw_interrupt_enable(level);
    return RT_EOK;
}
举报

黄先生

2022-7-29 10:47:27
你获取的是不是运行总
时间
举报

更多回帖

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