你好,
我已经创建了两个回调user_callback_config.h
static const struct arch_main_loop_callbacks user_app_main_loop_callbacks = {.app_on_init = user_app_init, //默认情况下,系统唤醒时会重新加载看门狗定时器。/ /用户必须考虑到看门狗定时器处理(保持运行,/ /冻结,重载,简历,等),当app_on_ble_powered()被/ /和可能影响主循环。.app_on_ble_powered = user_ble_task / /默认情况下看门狗定时器重载,当系统恢复醒来。/ /用户必须考虑到看门狗定时器处理(保持运行,/ /冻结,重载,简历,等),当app_on_system_powered()被/ /和可能影响主循环。.app_on_system_powered = user_sys_task .app_before_sleep = NULL, .app_validate_sleep = NULL, .app_going_to_sleep =零,.app_resume_from_sleep = NULL,};
我定义user_ble_task和user_sys_task,如下所示
Arch_main_loop_callback_ret_t user_sys_task() {//sprintf((char *) flg_buff," %d \n",c);// uart_send(UART2, (uint8_t *) flg_buff,strlen(flg_buff), UART_OP_BLOCKING);SetWord16 (0 x50003002, 256);返回KEEP_POWERED;// keep_powered, goto_sleep}
这里函数返回KEEP_POWERED并使GPIO高。
Arch_main_loop_callback_ret_t user_ble_task() {// sprintf((char *) flg_buff," %d \n",b);// uart_send(UART2, (uint8_t *) flg_buff,strlen(flg_buff), UART_OP_BLOCKING);wdg_reload (WATCHDOG_DEFAULT_PERIOD);SetWord16 (0 x50003004, 256);返回GOTO_SLEEP;}
在user_ble_task中,该函数返回GOTO_SLEEP并使相同的GPIO低。重新加载200毫秒的WDG使两个函数都以顺序的方式调用。
的时候是18微秒和低时间1微秒。(它如何为所有周期实现相同的延迟)
我知道这些环回是异步执行,如何在这些环回中执行任何硬件计时器/ble appEasytimer()回调。
附加的逻辑分析器的时间间隔截图。项目使用ble_barebone与NO睡眠模式。与我分享任何示例代码。
我引用以下链接作为参考。
http://lpccs-docs.dialog-semiconductor.com/Tutorial_SDK6/sdk_architectur..。
Br,
巴拉吉
嗨,对话框中,
我将user_sys_task设置为零并在user_ble_task中创建一个app_easy_timer(),如下所示:
在回调中,我使用一个标志和切换LED 1秒
定时器和延迟的配置,
当尝试调试在keil我可以观察led切换1秒,但当我连接ble应用通过ble扫描仪延迟减少到一半,即0.5秒打开,0.5秒关闭,在我断开之后,app_easy_timer也不会重置。当我尝试再次连接时,调试器点击app_easy_timer_cancel()中的assert_warning(0)
通过我的应用程序调试led_app_timer id是零吗在keil看窗户.我想知道什么时候取消我的app_easy_timer()以避免停止。
如果代码有错误,请纠正。
需要知道为什么timer_id是0,有没有竞争条件存在的机会。
谢谢提前
Br,
巴拉。
嗨,巴拉
感谢你在网上发布的帖子,以及你的后续评论。我读了你的描述,但作为主人,我不明白你想要完成什么。所以,您能更清楚地描述一下您的要求是什么吗?
>>>如何在这些循环中执行任何硬件定时器/ble appEasytimer()回调。
以上是你的要求吗?
在下面的注释中,我看到您正在使用app_easy_tuimer()。你能检查app_easy_timer_cancel()在你的代码中被调用了吗?
请提供适当的步骤,以便我可以复制这个问题。
谢谢,PM_Dialog