ke_timer_set不执行,为什么?

8个职位/ 0个新职位
最后一篇
袁汉武
离线
最后一次露面:5年3个月前
专家
加入: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;

如果(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 ();
}
别的
{//搜索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 ();
}

这里我加了味精
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};
已进入步骤:
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。

我的问题是:
ke_timer_set(sotf_pw_timer,task_app,200);//只在这里调用sotf_pw_timer的函数

但有时这个功能
poweron_soft_handler.

不是叫成功。

为什么?

附加:
我看到了这个
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.

APP_CREATE_NEW_TIMER
不包含在我使用的SDK(3.0.6)中。

关键词:
设备:
SUMMER20100514.
离线
最后一次露面:4年9月前
大师
加入:2014-12-30 05:01
你可以照着这些做

您可以执行以下步骤:

  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. 添加struct create_new_timer_struct
    {
    uint16_t延迟;
    uint16_t task_id;
    uint16_t timer_id;
    };
    在app.h.中

希望能帮助到你。

袁汉武
离线
最后一次露面:5年3个月前
专家
加入:2015-03-25 08:19
或者有时输入KE_timer

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

请给我帮助。
非常感谢 。

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

嗨袁汉武

你的设备不工作的最可能的原因是,你正试图设置一个ke_timer,而设备还没有被唤醒。当你通过唤醒计时器唤醒你的设备时,没有人保证BLE核心是清醒的,软件计时器是BLE核心的一部分。即使你强制你的BLE唤醒它也不确定定时器是否设置正确,因为它需要一些时间来唤醒核心。作为一个工作,你可以尝试的是首先通过使用app_check_BLE_active()函数来检查BLE是否处于活动状态,然后按照描述设置计时器http://support.dialog-semicondiondiondum/faq/how-use-ketimer-during-wakeu ...这里。您可以在Summer20100514中描述STRUCT和消息。这样,您会向应用程序发送关于创建计时器的信息,并且您知道当您调用ke_timer_set时,BLE将被唤醒。

谢谢mt_dialog.

袁汉武
离线
最后一次露面:5年3个月前
专家
加入: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.
离线
最后一次露面:6个月2周前
职员
加入:2015-06-08 11:34
嗨袁汉武,

嗨袁汉武,

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

谢谢mt_dialog.

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

谢谢mt_dialog,summer20100514。

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

但是测试结果如下:
有时,ke_timer_set()不运行;

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

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

嗨袁汉武,

如果我的理解是正确的,你将在唤醒处理程序中保持da直到你的按钮被释放,在唤醒处理程序中,你将设置systick并开始计数。我能想到的唯一一件事是,你应该确保你的时钟被正确地设置,这样系统就能正确地馈电。否则,你的时机就会不准确。

谢谢mt_dialog.