你好,
我在app_on_连接上启动计时器。此计时器在给定的时间后终止连接。如果用户在计时器过期之前断开连接,则应取消计时器。如果用户在计时器过期之前断开连接,但当计时器处理程序终止连接时,它会给我一个错误。
据我所知,这是因为当计时器过期时,传递给app_easy_timer_cancel的计时器id无效。然而,我认为添加一个类似if(conn\u timeout!=EASY\u TIMER\u INVALID\u TIMER){..}的检查可以解决这个问题。
1.)有人能告诉我为什么在我刚刚检查了有效性之后,app_easy_timer_cancel仍在执行吗?这是app_上执行的代码片段。
printf_字符串(“用户已断开连接!\n\r”);
if(连接超时!=简易计时器\u无效计时器){
//取消计时器
printf_字符串(“由于用户断开连接,连接超时被取消\n\r”);
应用程序\u轻松\u定时器\u取消(连接超时);
}
2.)我使用Keil的watch工具监视conn_timeout的值。它最初是0x00,如果我在计时器过去之前连接和断开,它将保持此值。但是,当计时器确实过去并且执行conn_timeout回调时,conn_timeout将保持值0x03。即使我继续软件,它也将保持此值(当它在void app_easy_timer_cancel(const timer_hnd timer_id))中的ASSERT_WARNING(0)上卡住后)。也可以连接和断开连接。这样做(快于计时器周期)也不会更改值0x03。
这个值是什么意思?当计时器过期或计时器取消时,该值不应该重置为0x00吗?
亲切问候,,
涅克
关键词:
设备:
你好,尼克维德,
1) 设置计时器进行计数时,当计时器过期时,存储计时器句柄的句柄变量未获得无效值,如果在计时器回调中未明确更改,则检查的计时器句柄仍具有有效的计时器id。例如,当计时器过期并执行回调时,在callba中ck store in timer handle一个无效值,在使用app_easy_timer_cancel()之前检查该句柄中存储的值是否有效。
2) 正如我在上面提到的,存储计时器句柄的变量在应用程序级别,并且在计时器过期时不会得到更新,除非您显式地这样做。
谢谢你的对话
嗨,MT_dialog,
在回调中将计时器处理程序设置为EASY\u timer\u INVALID\u timer修复了该问题。
谢谢你的帮助!
你能告诉我在哪里可以找到像EASY\u TIMER\u INVALID\u TIMER这样的定义吗?
在UM-B-050或UM-B-051中,提及的定义是EASY\u TIMER\u INVALID\u TIMER。我丢失了一些文件吗?
我通过论坛知道这个值,但我认为会有更多定义的返回值,比如EASY\u TIMER\u INVALID\u TIMER。
(就像我之前问的,当计时器处理程序有效时,它返回0x03;我能找到这些值的含义吗?)
亲切问候,,
涅克
你好,尼克维德,
我不认为有任何文档提到了这个定义,并不是SDK的所有定义和API都有文档记录。设置计时器时返回的值仅为id值,只要它们与EASY_timer_INVALID_timer(简易计时器无效计时器)不同,则返回的值很长。
谢谢你的对话