唤醒后app_timer_set()有时工作不正常

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
5个帖子/ 0新
最后发表
lewuyouc
离线
最后一次露面:1年9个月前
加入:2016-07-18 01:38
唤醒后app_timer_set()有时工作不正常

我修改了SDK 5.0.4\DA1458x_SDK\5.0.4\projects\target_apps\ble_examples\prox_reporter项目。

我设置const static sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF;.user_default_hnd_conf。adv_scenario = DEF_ADV_FOREVER,

我在我们的新制作板中使用,我们使用set_device_to_sleep()函数设置设备扩展睡眠模式,

我们使用acc传感器来唤醒设备,app_acc_wakeup_cb()和app_accInt_snifftocwake_cb()被回调,这似乎是正常的。

但有时在app_accInt_snifftocwake_cb()函数的app_timer_set(APP_ALG_PERIOD_TASK_TIMER, TASK_APP, 100);异常时,APP_ALG_PERIOD_TASK_TIMER不工作,经过长时间(约5分钟),APP_ALG_PERIOD_TASK_TIMER开始工作。

请给我一些建议!

static const struct ke_msg_handler app_custs1_process_handlers[] = {{APP_ALG_PERIOD_TASK_TIMER, (ke_msg_func_t)app_alg_period_task_timer_handler}, {CUSTS1_CREATE_DB_CFM, (ke_msg_func_t)app_custs1_create_db_cfm_handler}, {CUSTS1_DISABLE_IND, (ke_msg_func_t)app_custs1_disable_ind_handler},};Static int app_alg_period_task_timer_handler(ke_msg_id_t const msgid, void const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id) {Static int i=0;app_timer_set (APP_ALG_PERIOD_TASK_TIMER dest_id 100);我+ +;arch_printf(“我= % d \ r \ n ", 1);test_ble_send_data_function ();返回(KE_MSG_CONSUMED);} void set_device_to_sleep(void) {arch_printf("set_device_to_sleep\r\n");如果(ke_timer_active (APP_ALG_PERIOD_TASK_TIMER TASK_APP)) {ke_timer_clear (APP_ALG_PERIOD_TASK_TIMER TASK_APP);} if(ke_state_get(TASK_APP)==APP_CONNECTED){disconnect_no_adv_flag = 1; app_easy_gap_disconnect(save_connection_idx); } app_easy_gap_advertise_stop(); hsppad042a_standby(); hsactd_set_to_sniff(); arch_ble_ext_wakeup_on(); app_accInt_wakeup_enable(); arch_set_extended_sleep(); } static void app_acc_wakeup_cb(void) { disconnect_no_adv_flag = 0; default_advertise_operation(); arch_printf("app_acc_wakeup_cb"); } static void app_accInt_snifftocwake_cb(void) { if (GetBits16(SYS_STAT_REG, PER_IS_DOWN)) { periph_init(); } if (arch_ble_ext_wakeup_get()) { arch_disable_sleep(); arch_ble_force_wakeup(); arch_ble_ext_wakeup_off(); app_easy_wakeup(); } hsactd003a_readsteate_clear_pending(); arch_printf("app_accInt_snifftocwake_cb\r\n"); app_timer_set(APP_ALG_PERIOD_TASK_TIMER, TASK_APP, 100); app_accInt_wakeup_enable(); } void app_accInt_wakeup_enable(void) { app_easy_wakeup_set(app_acc_wakeup_cb); wkupct_register_callback(app_accInt_snifftocwake_cb); // if (!GPIO_GetPinStatus(GPIO_ACCINT_PORT, GPIO_ACCINT_PIN)) { wkupct_enable_irq(WKUPCT_PIN_SELECT(GPIO_ACCINT_PORT, GPIO_ACCINT_PIN), // select pin WKUPCT_PIN_POLARITY(GPIO_ACCINT_PORT, GPIO_ACCINT_PIN, WKUPCT_PIN_POLARITY_HIGH), 1, // 1 event 3); // debouncing time = 0 } }

关键词:
设备:
lewuyouc
离线
最后一次露面:1年9个月前
加入:2016-07-18 01:38

建议不要app_timer_set()?我用app_timer_set替换app_easy_timer函数。

我将代码刻录到flash(m24m01-rmn6tp),在prox_reporter项目的bais上,不包括Ota,我也不使用spi,

但闪光灯似乎消耗了很多电流。我需要配置spi引脚?我该怎么做呢?

我使用spi_flash_enable(spi_en_gpio_port,spi_en_gpio_pin);和spi_flash_power_down();在user_app_on_init()函数中,

目前的消费似乎更大。

谢谢!

gpio_configurepin(spi_en_gpio_port,spi_en_gpio_pin,输出,pid_spi_en,true);gpio_configurepin(spi_clk_gpio_port,spi_clk_gpio_pin,输出,pid_spi_clk,false);gpio_configurepin(spi_do_gpio_port,spi_do_gpio_pin,输出,pid_spi_do,false);gpio_configurepin(spi_di_gpio_port,spi_di_gpio_pin,输入,pid_spi_di,false);void user_app_on_init(void){静态Int8_t id = 0;hsactd003a_init();hsppad042a_init();id = spi_flash_enable(spi_en_gpio_port,spi_en_gpio_pin);spi_flash_power_down();ARCH_PRINTF(“ID =%d \ r \ n”,ID); default_app_on_init(); }

PM_DIALOG.
离线
最后一次露面:4天6小时前
工作人员
加入:2018-02-08 11:03
嗨lewuyouc,

嗨lewuyouc,

您可以让我知道您想用app_accInt_snifftocwake_cb中的计时器完成什么吗?通过app_timer_set()函数,您可以看到一个内核计时器。我们建议使用app_easy_timer() API,它会创建一个新的计时器,并在需要时激活BLE。但是请描述这个函数中定时器的用法。当您用app_easy_timer替换app_timer_set时,您还面临同样的问题吗?由于设备进入延长睡眠模式,当SPI Flash上电和关闭时,当前消耗是怎样的?你是正确的,SPI flash增加了电流消耗,所以你必须关掉它。你能不能把所有的传感器从定制板上拿下来,然后在SPI flash断电的情况下,在延长睡眠模式下测量当前的耗电量?我认为您测量延长睡眠电流与准确的电流表,而不是使用SmartSnippets工具箱。

谢谢,PM_DIALOG.

lewuyouc
离线
最后一次露面:1年9个月前
加入:2016-07-18 01:38
嗨PM_DIALOG.

嗨PM_DIALOG.

我使用app_accint_snifftocwake_cb重新启动计时器,定期获得传感器数据。app_easy_timer函数工作正常。

在User_App_On_Init I Set SPI Flash上​​电源关闭,我们检查大约4UA的延长睡眠模式下的功耗。我觉得

功耗正常。

问题:我使用SmartSnippets烧我的代码spi flash。我设置spi flash是关机在user_app_on_init,所以spi flash总是

断电。但是从SPI Flash获得了启动代码,我知道我设置了SPI电源关闭,我的电路板从扩展睡眠模式唤醒,

引导代码能正常工作吗?

问题:设置睡眠模式后,有时启动不起作用。它与没有该计划的新董事会相同。

PM_DIALOG.
离线
最后一次露面:4天6小时前
工作人员
加入:2018-02-08 11:03
嗨lewuyouc,

嗨lewuyouc,

在DA1458X系列设备中,代码始终从内部系统-AM执行。这意味着,由于您已将SPI闪存与固件烧毁,因此当设备靴子时,固件将从系统RAM复制和执行。因此,当您在User_App_On_Init中关闭Flash时,固件已被复制到系统RAM中,这就是您可以成功启动的原因。

谢谢,PM_DIALOG.