App_easy_timer_cancel检查是否过期

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
4个职位/ 0个新职位
最后发表
Niekvdd
离线
最后看到:2年4个月前
加入:2017-01-25 09:29
App_easy_timer_cancel检查是否过期

你好,

我在app_on_connection上启动一个计时器。这个计时器在给定的时间后终止连接。如果用户在计时器结束前断开连接,则应取消计时器。这在用户在计时器结束之前断开连接的情况下是有效的,但它在计时器处理程序终止连接时给我一个错误。
根据我的理解,发生这种情况是因为当计时器过期时,传递给app_easy_timer_cancel的timer_id无效。然而,我认为添加一个检查像if(conn_timeout != EASY_TIMER_INVALID_TIMER){..就能解决这个问题。

1.)有人能告诉我为什么app_easy_timer_cancel仍然执行,即使我之前检查有效性?这是在app_on_disconnect上执行的代码片段。

printf_string(“用户断开连接! \ n \ r”);
如果(conn_timeout ! = EASY_TIMER_INVALID_TIMER) {
/ /取消计时器
Printf_string ("conn_timeout被取消,由于用户断开连接\n\r");
app_easy_timer_cancel (conn_timeout);

2.)我使用Keil的监视工具来监视conn_timeout的值。它最初是0x00,如果我在计时器结束之前连接和断开,它将保持这个值。然而,当计时器结束并执行conn_timeout的回调时,conn_timeout保持值0x03。即使我继续软件(当它在void app_easy_timer_cancel(const timer_hnd timer_id)中的ASSERT_WARNING(0)上卡住后),它仍然保持这个值。连接和断开仍然是可能的。这样做(比计时器周期快)也不会改变值0x03。
这个值是什么意思?当计时器结束或计时器被取消时,这个值不应该被重置为0x00吗?

亲切的问候,
Niek

设备:
MT_dialog
离线
最后看到:7个月6天前
工作人员
加入:2015-06-08 34
嗨Niekvdd,

嗨Niekvdd,

1)当你设置计时器计数,当计时器经过时,存储计时器句柄的句柄变量没有得到一个无效的值,如果你不显式地在计时器的回调中改变它,你检查的计时器句柄仍然有一个有效的计时器id。例如,当计时器结束并执行回调时,在计时器的回调存储中处理一个无效的值,在使用app_easy_timer_cancel()之前检查存储在该句柄中的值是否有效。

2)正如我上面提到的,变量存储定时器的句柄是在应用程序级别,并没有得到更新时,定时器的流逝,除非你显式地这样做。

由于MT_dialog

Niekvdd
离线
最后看到:2年4个月前
加入:2017-01-25 09:29
嗨MT_dialog,

嗨MT_dialog,

在回调中将计时器处理程序设置为EASY_TIMER_INVALID_TIMER修复了这个问题。
谢谢你的帮助!

你能告诉我在哪里可以找到像EASY_TIMER_INVALID_TIMER这样的定义吗?
在UM-B-050和UM-B-051中提到了EASY_TIMER_INVALID_TIMER的定义。我是不是遗漏了一些文件?
我通过论坛知道这个值,但我认为会有更多定义的返回值,如EASY_TIMER_INVALID_TIMER。
(就像我之前问的,当定时器处理程序是有效的,它返回0x03;我能找到这些值的含义吗?)

亲切的问候,
Niek

MT_dialog
离线
最后看到:7个月6天前
工作人员
加入:2015-06-08 34
嗨Niekvdd,

嗨Niekvdd,

我认为没有任何文档提到这个定义,并不是所有SDK的定义和api都有文档。当你设置一个计时器时返回的值只是id值很长,因为它们与EASY_TIMER_INVALID_TIMER不同,它是一个有效的计时器id。

由于MT_dialog