微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > SimpleBLEPeripheral的例程里,P1IO中断服务程序里调用osal_stop_timerEx函数不起作用。

SimpleBLEPeripheral的例程里,P1IO中断服务程序里调用osal_stop_timerEx函数不起作用。

时间:10-02 整理:3721RD 点击:

您好,我的问题是这样的:是不是在中断服务程序里调用osal_stop_timerEx(),是不起作用的?

我用 osal_start_timerEx() 函数设置一个20ms的事件,这20ms是等待P1.6端口的中断信号。如果20ms内顺利进入P1的中断服务程序,就调用osal_stop_timerEx()函数取消这个事件计时。

运行时,20ms内顺利进入中断,然后中断程序里也调用了osal_stop_timerEx()去取消这个20ms的事件计时,可是中断服务程序结束后,竟然又进入了这个20ms的事件处理。

一开始我以为20ms时间太短,然后我把事件时间设置成100ms,问题依旧。难道在中断服务程序里调用osal_stop_timerEx()函数,不起作用?


下面是我操作过程:

首先定义事件ID

然后,获取任务ID

然后,设置一个20ms的事件,等待P1.6的中断

进入P1中断服务程序时,osal_stop_timerEx()停止事件

补充:20ms的事件处理

改正了这里的错误,问题依旧,osal_stop_timerEx()依然不能停止20ms事件计时。

再次怀疑,20ms时间太短,导致等到执行osal_stop_timerEx()时,20ms计时已经结束,20ms的事件标志已经置位;

再次实验:把20ms计时改成3s计时事件,断点设在P1中断里osal_stop_timerEx()的后面。

实验结果:P1IO 中断里的osal_stop_timerEx() 依旧没有成功停止3s计时事件,中断处理程序运行结束后,依旧进入了3s计时事件处理部分;

结论:此问题中,P1IO 中断里的osal_stop_timerEx() 没有成功取消计时事件,原因不在计时事件时间长短;

再次实验

实验目的:测试osal_stop_timerEx()在 P1IO 中断处理程序外面有没有作用;

实验方法:在调用设置20ms计时事件函数语句的后面,紧接着运行osal_stop_timerEx()取消该20ms计时事件。

实验结果:1、20ms事件计时确实被停止了;

                    2、同时又发现一个有趣的现象,该函数osal_stop_timerEx()是有返回值的,可是上图中这句

                          communic_busy = osal_stop_timerEx( temp_TaskID, COMMUNICATE_TIMEOUT_EVT );

                          执行完之后,变量communic_busy的值居然没有变化;

此次实验结论:osal_stop_timerEx()在 P1IO 中断处理程序外面是可以停止事件计时的。

疑问:难道osal_stop_timerEx()真的不可以在P1IO 中断程序中成功实现停止事件计时?

你好,

感谢你的回馈,问题反映的非常详细。

我明天会仔细阅读你反映的问题,然后在自己的demo板上测试。

有结论后再反馈给你。

谢谢,那就麻烦您了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top