我有一个问题,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 ();
}
别的
{//搜索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)中。
您可以执行以下步骤:
{
uint16_t延迟;
uint16_t task_id;
uint16_t timer_id;
};
在app.h.中
希望能帮助到你。
或者有时输入ke_timer任务函数延迟超过15秒;
或者ke_timer任务函数根本不是操作。
请给我帮助。
非常感谢 。
嗨袁汉武
你的设备不工作的最可能的原因是,你正试图设置一个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.
谢谢mt_dialog,
谢谢Summer20100514。
在每个ke_timer_set()函数之前,我添加了这个
if(app_ble_force_wakeup()))
app_ble_ext_wakeup_off();
目前没有发现任何问题。
这样处理方式,风险隐藏在一起?
嗨袁汉武,
我们不能确定这将导致的副作用,问题周围的工作是上面描述的工作。可能发生的情况是,即使执行App_ble_force_wakeUp()并且BLE启动唤醒也需要时间,直到BLE唤醒这可能导致您之前的同类问题。解决方法的原因是在调用Ke_timer_Set()时,请确保BLE肯定是醒目的,这就是为什么首先向内核发送消息以设置ke_timer。
谢谢mt_dialog.
谢谢mt_dialog,summer20100514。
我用了ke_timer_set(),因为你之前给出了建议;
当按键时,I 100ms间隔才能读取GPIO引脚。
如果也被按下,那么keytimescn ++;
所以我在ke_timer_func中调用ke_timer_set();回复几次。
但是测试结果如下:
有时,ke_timer_set()不运行;
所以我用systick来解决它。
但它在睡眠中不起作用,所以,当按下时,我醒来直到按下是真实的。
这样处理方式,风险隐藏在一起?
嗨袁汉武,
如果我的未定性是正确的,则在唤醒处理程序中将DA持有,直到您的按钮发布,在唤醒处理程序中,您正在设置Systick并开始计数。我唯一能想到的是,您应该确保您的时钟也被定新,以便合理速率正确。如果不是你的时机会不准确。
谢谢mt_dialog.