你好,
在示例代码中,我看到了这个函数,我在想,当调用它时,它会在延迟后执行它被赋值的函数。我通过查看接近报告器示例代码追溯了如何做到这一点,但我无法让它工作。有没有文件可以让我找到更多的信息?(我看了一遍,但什么也没找到)
谢谢,金
地狱金,我已经向SW团队询问了一些反馈,一旦我对app_timer_set函数的描述有了答复,我就会回答你的问题。目前在线的SW文档中没有详细说明。BR JE_Dialog
金,
app_timer_set不是执行一个延迟函数,而是发送一个延迟消息。因此,您必须注册此消息的处理程序。
让计时器工作:1)在app_task_handlers.h中添加app_default_state的handler。(ke_msg_func_t) app_my_timer_handler}, {APP_MY_TIMER2)实现处理程序Int app_my_timer_handler(ke_msg_id_t const msgid,空白const *参数,ke_task_id_t const dest_id,ke_task_id_t const src_id){/**在这里执行延迟函数*/返回(KE_MSG_CONSUMED);}
(ke_msg_func_t) app_my_timer_handler}, {APP_MY_TIMER
Int app_my_timer_handler(ke_msg_id_t const msgid,空白const *参数,ke_task_id_t const dest_id,ke_task_id_t const src_id){/**在这里执行延迟函数*/返回(KE_MSG_CONSUMED);}
3)调用app_timer_setke_timer_set (APP_MY_TIMER TASK_APP 100);// 100是1秒注意,app_timer_set的精确度是10毫秒。
ke_timer_set (APP_MY_TIMER TASK_APP 100);// 100是1秒
约翰内斯
嗨,金姆,更多关于这个定时器的信息可以在以下文档中找到(在这个网站上):RW-BLE内核功能规范,从第14页开始。最好的问候,
对话蓝牙支持团队
你好,在RW-BLE内核功能规范1.1的7.5.1章中,描述如下:
Void ke_timer_set(ke_msg_id_t const timer_id, ke_task_id_t const task, uint16_t const delay);如果计时器存在,函数首先取消它,然后创建一个新的计时器。计时器可以是一次性的,也可以是周期性的每次触发后都会自动再次设置。
我不知道如何配置定时器一次或周期dec。我没有看到任何参数的一次性或周期与ke_timer_set。你能让我知道吗?谢谢你!--杰森·李
我没有搜索文件RW-BLE内核功能规范,你能给我一个URL吗?
嗨RandyYu,
你可以在支持站点的文档选项卡的Profiles & API文档部分找到该文档,这里是链接http://support.dialog-semiconductor.com/resource/rw-ble-kernel-functiona..。.
由于MT_dialog
据我所知,计时器文档在很多地方都很糟糕:—没有参数设置一次性定时器或定时定时器。ke_timer_active的描述是错误的:“这个函数从计时器队列中弹出第一个计时器,并通过发送内核消息通知相应的任务。如果定时器是周期性的,则重新设置;如果是一次,则释放计时器。该函数还检查下一个计时器和如果过期或即将过期,请处理。它根本就不会那样做。它只是检查计时器是否激活,而不是其他。- ke_timer_clear的描述是错误的:“这个函数搜索由它的计时器和任务标识符标识的计时器元素。如果找到,它将被停止释放,否则返回一个错误消息。该函数返回void,因此如果没有找到计时器,它不会返回错误消息。(您可以简单地使用ke_timer_active查看它是否不存在)。
一个非常重要的注意事项:一旦计时器超时并被触发,将在消息队列的末尾放置一条消息并删除计时器。这意味着如果你运行ke_timer_active当消息队列中的消息和没有处理,它将返回false,如果你运行ke_timer_clear,什么都不会发生,如果你运行ke_timer_set,一个新的定时器将晚些时候开始这意味着你将先收到第一个消息,和计时器三角后,你会收到下一条信息。
因此,如果您只是想要一个周期性计时器:启动它一次,并在计时器消息处理程序的末尾启动一个新的计时器。
嗨Joacimwe我做了一个计时器,当它生成了一个计时器消息时,它就会自动停止。如果我不重新开始,它就不会再次触发。这似乎是一个一次性的计时器。但是你说过“如果你运行ke_timer_clear,什么都不会发生”。现在,如果我启动一个计时器,我想在触发消息之前停止它,该怎么做。
很明显。谢谢你!
我们使用clear函数和一个全局标志变量来检查它是否应该运行,因为clear函数是不够的。
这里有些人似乎很会计时。所以我需要你的帮助。
我尝试实现一个定时器,使LED闪烁时,设备连接。我听了你的解释,但我遇到了一个我不理解的问题:当延长/深度睡眠模式没有启用时,计时器会工作,但当我激活延长时,LED就会发疯。
有什么我需要知道的吗?在接近的例子中,LED是这样管理的,它工作…
提前感谢!
嗨,马修,我仍然试图弄清楚app_timer_set如何在EXTENDED或DEEP睡眠模式下工作。但是,我想知道你是否也考虑下面。
uint8_t flag_led __attribute__(((“retention_mem_area0”)部分,zero_init));;Int app_my_timer_handler(ke_msg_id_t const msgid,空白const *参数,ke_task_id_t const dest_id,ke_task_id_t const src_id){
app_timer_set (APP_MY_TIMER TASK_APP 100);/ / 1000毫秒
If (flag_led == 1) / /显示显示{flag_led = 0;GPIO_SetActive(GPIO_BAT_LED_PORT, GPIO_BAT_LED_PIN);}其他的{flag_led = 1;GPIO_SetInactive (GPIO_BAT_LED_PORT GPIO_BAT_LED_PIN);}返回(KE_MSG_CONSUMED);}
使用以上代码,当EXTENDED或DEEP时,你不应该期望LED闪烁50%占空比,因为外设电源下降,如果LED从Dialog GPIO供电,LED将关闭。
谢谢你的帮助。我执行了你的建议,但我仍然有不同的行为在主动模式和延长睡眠模式。
马特
嗨,马特,一个团队会给你打电话,告诉你你看到的问题。
BR JE_Dialog
嗨我,
你能验证app_timer_set的准确性吗?约翰内斯说10ms的精度是1秒,百分比呢,或者是更长的时间,比如1分钟?
谢谢
最小的单位是10ms ??我需要用多少微秒来使用计时器?
地狱金,我已经向SW团队询问了一些反馈,一旦我对app_timer_set函数的描述有了答复,我就会回答你的问题。目前在线的SW文档中没有详细说明。
BR JE_Dialog
金,
app_timer_set不是执行一个延迟函数,而是发送一个延迟消息。因此,您必须注册此消息的处理程序。
让计时器工作:
1)在app_task_handlers.h中添加app_default_state的handler。
(ke_msg_func_t) app_my_timer_handler}, {APP_MY_TIMER
2)实现处理程序
Int app_my_timer_handler(ke_msg_id_t const msgid,
空白const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
/**在这里执行延迟函数*/
返回(KE_MSG_CONSUMED);
}
3)调用app_timer_set
ke_timer_set (APP_MY_TIMER TASK_APP 100);// 100是1秒
注意,app_timer_set的精确度是10毫秒。
约翰内斯
嗨,金姆,
更多关于这个定时器的信息可以在以下文档中找到(在这个网站上):
RW-BLE内核功能规范,从第14页开始。
最好的问候,
对话蓝牙支持团队
你好,
在RW-BLE内核功能规范1.1的7.5.1章中,描述如下:
Void ke_timer_set(ke_msg_id_t const timer_id, ke_task_id_t const task, uint16_t const delay);
如果计时器存在,函数首先取消它,然后创建一个新的计时器。计时器可以是一次性的,也可以是周期性的
每次触发后都会自动再次设置。
我不知道如何配置定时器一次或周期dec。我没有看到任何参数的一次性或周期与ke_timer_set。
你能让我知道吗?
谢谢你!
--
杰森·李
我没有搜索文件RW-BLE内核功能规范,你能给我一个URL吗?
嗨RandyYu,
你可以在支持站点的文档选项卡的Profiles & API文档部分找到该文档,这里是链接http://support.dialog-semiconductor.com/resource/rw-ble-kernel-functiona..。.
由于MT_dialog
据我所知,计时器文档在很多地方都很糟糕:
—没有参数设置一次性定时器或定时定时器。
ke_timer_active的描述是错误的:“这个函数从计时器队列中弹出第一个计时器,并通过发送内核消息通知相应的任务。
如果定时器是周期性的,则重新设置;如果是一次,则释放计时器。该函数还检查下一个计时器和
如果过期或即将过期,请处理。它根本就不会那样做。它只是检查计时器是否激活,而不是其他。
- ke_timer_clear的描述是错误的:“这个函数搜索由它的计时器和任务标识符标识的计时器元素。如果找到,它将被停止
释放,否则返回一个错误消息。该函数返回void,因此如果没有找到计时器,它不会返回错误消息。(您可以简单地使用ke_timer_active查看它是否不存在)。
一个非常重要的注意事项:一旦计时器超时并被触发,将在消息队列的末尾放置一条消息并删除计时器。这意味着如果你运行ke_timer_active当消息队列中的消息和没有处理,它将返回false,如果你运行ke_timer_clear,什么都不会发生,如果你运行ke_timer_set,一个新的定时器将晚些时候开始这意味着你将先收到第一个消息,和计时器三角后,你会收到下一条信息。
因此,如果您只是想要一个周期性计时器:启动它一次,并在计时器消息处理程序的末尾启动一个新的计时器。
嗨Joacimwe
我做了一个计时器,当它生成了一个计时器消息时,它就会自动停止。
如果我不重新开始,它就不会再次触发。这似乎是一个一次性的计时器。
但是你说过“如果你运行ke_timer_clear,什么都不会发生”。
现在,如果我启动一个计时器,我想在触发消息之前停止它,该怎么做。
很明显。谢谢你!
我们使用clear函数和一个全局标志变量来检查它是否应该运行,因为clear函数是不够的。
你好,
这里有些人似乎很会计时。所以我需要你的帮助。
我尝试实现一个定时器,使LED闪烁时,设备连接。我听了你的解释,但我遇到了一个我不理解的问题:当延长/深度睡眠模式没有启用时,计时器会工作,但当我激活延长时,LED就会发疯。
有什么我需要知道的吗?在接近的例子中,LED是这样管理的,它工作…
提前感谢!
嗨,马修,
我仍然试图弄清楚app_timer_set如何在EXTENDED或DEEP睡眠模式下工作。
但是,我想知道你是否也考虑下面。
uint8_t flag_led __attribute__(((“retention_mem_area0”)部分,zero_init));;
Int app_my_timer_handler(ke_msg_id_t const msgid,
空白const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
app_timer_set (APP_MY_TIMER TASK_APP 100);/ / 1000毫秒
If (flag_led == 1) / /显示显示
{
flag_led = 0;
GPIO_SetActive(GPIO_BAT_LED_PORT, GPIO_BAT_LED_PIN);
}
其他的
{
flag_led = 1;
GPIO_SetInactive (GPIO_BAT_LED_PORT GPIO_BAT_LED_PIN);
}
返回(KE_MSG_CONSUMED);
}
使用以上代码,当EXTENDED或DEEP时,你不应该期望LED闪烁50%占空比,因为外设电源下降,如果LED从Dialog GPIO供电,LED将关闭。
你好,
谢谢你的帮助。
我执行了你的建议,但我仍然有不同的行为在主动模式和延长睡眠模式。
马特
嗨,马特,一个团队会给你打电话,告诉你你看到的问题。
BR JE_Dialog
嗨我,
你能验证app_timer_set的准确性吗?约翰内斯说10ms的精度是1秒,百分比呢,或者是更长的时间,比如1分钟?
谢谢
最小的单位是10ms ??我需要用多少微秒来使用计时器?