你好,我使用的是DA14580, SDK5.0.4 /项目/ target_apps / ble_examples/ble_app_all_in_one.
我使用系统定时函数app_easy_timer(),遇到了一个问题。
我调用这个函数之后,只要加入app_easy_timer_cancel()函数,那么下面的函数只会循环一次。
大概代码如下:
uint16_t receyle_read_timer_hnd = EASY_TIMER_INVALID_TIMER;
void read_body_sensor_mag_reset(void)
{
arch_printf("nice");
open_flag = 0;
if(person_in == false)
{
if(GPIO_GetPinStatus(GPIO_BODY_PORT,GPIO_BODY_PIN))//人感检测到有人
{
arch_printf("有人\r\n");
init_judege(&magx_init,&magy_init,&magz_init);//地磁数据更新
person_in = true;
cycle_counter=0;
last_state = person_in;
time_flag = 0;
stop_flag = 0;
reset_flag = 0;
body_time = 0;
send_data[6] = 6;
toilet_indicate_data(send_data,20);
send_data[6] = 0;
if(receyle_read_timer_hnd != EASY_TIMER_INVALID_TIMER)
{
app_easy_timer_cancel(receyle_read_timer_hnd);
receyle_read_timer_hnd = 0;
}
}
else if(cycle_counter > 5)
{
open_flag = 4;
cycle_counter = 0;
time_flag = 0;
stop_flag = 0;
reset_flag = 0;
body_time = 0;
if(receyle_read_timer_hnd != EASY_TIMER_INVALID_TIMER)
{
app_easy_timer_cancel(receyle_read_timer_hnd);
receyle_read_timer_hnd = 0;
}
}
if(cycle_counter<6)
{
cycle_counter++;
receyle_read_timer_hnd = app_easy_timer(265,read_body_sensor_mag_reset);
}
}
}
app_easy_timer(),这个函数使用完是不是必须要关掉?同时使用的话最多可以使用多少个?有没有相关的资料给我推荐下?
你好,
app_easy_timer 是一次性 timer,超时执行完 time out handler 后,就释放了。无需自己再 cancel。
你程序里的做法是正确的,即在 cancel 之前,有对 timer handle 的有效性进行判断。
最多只能“同时”申请:APP_TIMER_MAX_NUM 个。这个值可由用户定义,个数越多,需要的内存越大。
SDK3.0.6.0这个版本中的ke_timer可以定义多少个?里面没有用户自定义数量的参数
你好,
SDK3 已经过于久远不再支持,是否考虑移植到 SDK5