[STM32L0] STM32L0+RTOS osTimerStop

[复制链接]
28|3
手机看帖
扫描二维码
随时随地手机跟帖
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 | 显示全部楼层
7606061dfe1e20d51c.png

使用特权

评论回复
comon|  楼主 | 2022-1-13 16:28 | 显示全部楼层
4044261dfe2b60a364.png

使用特权

评论回复
comon|  楼主 | 2022-1-13 16:29 | 显示全部楼层
路过的朋友,请帮忙看看怎么办,有什么办法可以让停止定时器立即生效

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则