打印
[STM32L0]

STM32L0+RTOS osTimerStop

[复制链接]
582|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
comon|  楼主 | 2022-1-13 16:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
调试中遇到软定时器无法正常结束的问题,现象如下:
1、创建好软件定时器
    osTimerDef(KeyTimer, APP_KeyProcess);
    Timer_Key_Handle = osTimerCreate(osTimer(KeyTimer), osTimerPeriodic, NULL);
2、按键中断出发时,启动定时器(20 ms)
    osTimerStart(Timer_Key_Handle, 20);
3、回调函数中关闭定时器
void APP_KeyProcess(void const* argument)
{
    osTimerStop(Timer_Key_Handle);
}

问题:发现在这个逻辑过程中,有时会出现无法停止定时器的情况
调试定位,发现在osTimerStop执行结束前,xTimerQueue会收到一个0x00(restart定时器的命令),会导致
先执行tmrCOMMAND_START_DONT_TRACE ---》 调用回调函数 --》osStop(增加0x03到xTimerQueue) ---》 执行xTimerGenericCommand修改周期(增加0x00到xTimerQueue)---》然后才轮到设计目标的那次(第一次回调函数目的)tmrCOMMAND_STOP
此时命令序列里已经因上面的逻辑又新增了的xTimerQue信息,导致一直循环,无法真正停止该定时器

使用特权

评论回复
沙发
comon|  楼主 | 2022-1-13 16:25 | 只看该作者

使用特权

评论回复
板凳
comon|  楼主 | 2022-1-13 16:28 | 只看该作者

使用特权

评论回复
地板
comon|  楼主 | 2022-1-13 16:29 | 只看该作者
路过的朋友,请帮忙看看怎么办,有什么办法可以让停止定时器立即生效

使用特权

评论回复
5
comon|  楼主 | 2022-1-19 08:59 | 只看该作者
沉了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝