ke_timer_set不执行,为什么?

8个帖子/ 0新
最后一篇
袁汉武
离线
最后一次露面:4年9月前
专家
加入:2015-03-25 08:19
ke_timer_set不执行,为什么?

我有一个问题,Ke_time每次都没有成功执行。

详细地:
在SDK 3.0.6中,我使用按钮P23电源打开系统。

void app_button_enable(void)
{
wkupct_register_callback(app_button_press_cb);

// if(!(gpio_getpinstatus(gpio_button_port,gpio_button_pin))//按钮是p23
wkupct_enable_irq(0x80000,0,1,10);// p2_3,极性低,1 0x40000
}

在app_button_press_cb(void)
我补充一点:

haskey_flag = 1;

if(Keytimescn> = 1)
{
keytimescn = 0;
ke_timer_clear(scan_key_timer,task_app);
}

Keytimescn ++;

if(pw_on_off!= 0)//电源关闭雕像电源
{
// ke_timer_init();

gpio_setinactive(gpio_ti_lex_port,gpio_ti_led_pin);// fot trip在这里输入LED是开启的

ke_timer_set(sotf_pw_timer,task_app,200);//只在这里调用sotf_pw_timer的函数
// app_force_active_mode();
}
别的
{//search for 400MS_key
gpio_setinactive(gpio_alert_lex_port,gpio_alert_lex_pin);// fot trip在这里输入LED是开启的
button_type =BUTTONTYPE_400MS;
ke_timer_set(scan_key_timer,task_app,40);
// app_force_active_mode();
}

here I haved add MSG
enum app_msg.
{
app_module_init_cmp_evt = ke_first_msg(task_app),

SOTF_PW_TIMER,
............
............
}

/ *默认状态处理程序定义。* /
EXTERN const struct ke_msg_handler app_default_state[] =
{
{sotf_pw_timer,(ke_msg_func_t)poweron_soft_handler},
{gapm_device_ready_ind,(ke_msg_func_t)gapm_device_ready_ind_handler},
.............
...........
}

在处理程序功能中:

int poweron_soft_handler(ke_msg_id_t const msgid,
void const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
gpio_setinactive(gpio_alert_lex_port,gpio_alert_lex_pin);// fot提示在此处输入。LED正在开启

{//软站是第一个prio
pw_on_off = 0;
已经_tip_flag = 0;

app_adv_start();

led_been_loop =TIP_LOOP_LEDON;
ke_timer_set(len_been_tip_timer,task_app,1);
}

ke_timer_clear(sotf_pw_timer,task_app);

return(ke_msg_consumed);
}

我将键P23按到高于6s {大于在这里设置的时间(ke_timer_set(sotf_pw_timer,task_app,200)2s};
have enter the step:
gpio_setinactive(gpio_ti_lex_port,gpio_ti_led_pin);// fot trip在这里输入LED是开启的

但有时这一步不在:
gpio_setinactive(gpio_alert_lex_port,gpio_alert_lex_pin);// fot提示在此处输入。LED正在开启

所以系统每次都不是PowerOn。

my question is :
ke_timer_set(sotf_pw_timer,task_app,200);//只在这里调用sotf_pw_timer的函数

但有时这个功能
poweron_soft_handler.

is not call succeed.

为什么?

一个dditional:
I have view this
http://support.dialog-semicondiondiondum/faq/how-use-ketimer-during-wakeu ...

但在3.0.6中没有这个消息

struct create_new_timer_struct * req = ke_msg_alloc(app_create_new_timer,task_app,task_app,

create_new_timer_struct.);

create_new_timer_struct.
一个nd
APP_CREATE_NEW_TIMER
不包含在我使用的SDK(3.0.6)中。

关键词:
设备:
SUMMER20100514.
离线
最后一次露面:4 years 2 months ago
Guru
加入:2014-12-30 05:01
You may do following these

您可以执行以下步骤:

  1. 在app_api.h中添加app_create_new_timer
  2. 在app_task_handlers.h中添加{app_create_new_timer,(ke_msg_func_new_timer,(ke_msg_func_t)app_create_new_timer}
  3. 一个dd struct create_new_timer_struct
    {
    uint16_t延迟;
    uint16_t task_id;
    uint16_t timer_id;
    };
    在app.h.中

希望能帮助到你。

袁汉武
离线
最后一次露面:4年9月前
专家
加入:2015-03-25 08:19
Or sometimes enter KE_timer

或者有时输入ke_timer任务函数延迟超过15秒;
或者ke_timer任务函数根本不是操作。

请给我帮助。
非常感谢 。

mt_dialog.
离线
最后一次露面:1周前1周前
职员
加入:2015-06-08 11:34
嗨袁汉武

嗨袁汉武

The most probable reason that your device isn't working is the fact that you are trying to set up an ke_timer while the device hasn't been woken up yet. When you are waking up your device through the wakeup timer nobody guaranties that the BLE Core is awake and the software timers are part of the BLE Core. Even if you force your BLE to wake up it is uncertain if the timer is going to be set up properly because it takes some time for the core to wake up. As a work around what you can try is to check first if your BLE is active by using the app_check_BLE_active() function and then set up your timer as it is describedhttp://support.dialog-semicondiondiondum/faq/how-use-ketimer-during-wakeu ...这里。您可以在Summer20100514中描述STRUCT和消息。这样,您会向应用程序发送关于创建计时器的信息,并且您知道当您调用ke_timer_set时,BLE将被唤醒。

谢谢mt_dialog.

袁汉武
离线
最后一次露面:4年9月前
专家
加入:2015-03-25 08:19
谢谢mt_dialog,

谢谢mt_dialog,
谢谢Summer20100514。

在每个ke_timer_set()函数之前,我添加了这个

if(app_ble_force_wakeup()))
app_ble_ext_wakeup_off();

目前没有发现任何问题。
这样处理方式,风险隐藏在一起?

mt_dialog.
离线
最后一次露面:1周前1周前
职员
加入:2015-06-08 11:34
嗨袁汉武,

嗨袁汉武,

我们不能确定这将导致的副作用,问题周围的工作是上面描述的工作。可能发生的情况是,即使执行App_ble_force_wakeUp()并且BLE启动唤醒也需要时间,直到BLE唤醒这可能导致您之前的同类问题。解决方法的原因是在调用Ke_timer_Set()时,请确保BLE肯定是醒目的,这就是为什么首先向内核发送消息以设置ke_timer。

谢谢mt_dialog.

袁汉武
离线
最后一次露面:4年9月前
专家
加入:2015-03-25 08:19
谢谢mt_dialog.

谢谢mt_dialog,summer20100514。

我用了ke_timer_set(),因为你之前给出了建议;
当按键时,I 100ms间隔才能读取GPIO引脚。
如果也被按下,那么keytimescn ++;
所以我在ke_timer_func中调用ke_timer_set();回复几次。

但是测试结果如下:
sometimes ,also not run very accurate everytime;sometimes , ke_timer_set() is not run;

所以我用systick来解决它。
但它在睡眠中不起作用,所以,当按下时,我醒来直到按下是真实的。
这样处理方式,风险隐藏在一起?

mt_dialog.
离线
最后一次露面:1周前1周前
职员
加入:2015-06-08 11:34
嗨袁汉武,

嗨袁汉武,

如果我的未定性是正确的,则在唤醒处理程序中将DA持有,直到您的按钮发布,在唤醒处理程序中,您正在设置Systick并开始计数。我唯一能想到的是,您应该确保您的时钟也被定新,以便合理速率正确。如果不是你的时机会不准确。

谢谢mt_dialog.