我有3个由app_easy_time声明的计时器是周期性的一秒,第二个是在某些情况下调用的,最后一个在随机时间呼叫epy 30秒。
有了这三个定时器,第二个定时器回调函数不会被正确调用,我相信它是由第一个定时定时器调用的。
如果我只使用前两个计时器,eveything似乎可以。
更新:一些简化的代码iLustring我的计时器设置,错误地触发汉勒问题是我的错,而另一个问题发生了另一个问题。
静态void app_watchdog_second_timer_handler()//调用每秒,
{
second_coun + +;
app_watchdog_second_timer = app_easy_timer(100,app_watchdog_second_timer_handler);// 1000女士
if(second_count == 10)
{
uint32_t delay =(co_rand_byte()%20)* 10 + 30;
APP_SEND_DATA_TIMER = app_easy_timer(delay, sendSensorDataHandler);
}
if(sign_count == 30)//期间为30秒
{
second_coun = 0;
}
}
void sendsensordatahandler(void)//在一段时间内致电
{
app_send_data_timer = easy_timer_invalid_timer;//这条行地址我以前的问题,现在定时器触发正确的处理程序
}
Void ResetsendData(Void)//触发器在某些条件下
{
if(app_send_data_timer!= eyle_timer_invalid_timer)//此行地址我以前的问题,现在Timer触发正确的处理程序
{
// ----------这里出现了另一个问题,这个函数只删除了我的APP_WATCHDOG_SECOND_TIMER,导致没有计时器运行,我检查timer_callbacks[APP_TIMER_MAX_NUM],空
APP_SEND_DATA_TIMER = app_easy_timer_modify(APP_SEND_DATA_TIMER, RESET_SEND_DATA_TIME + (co_rand_byte() % 20) * 10);
}
}
嗨Tengworld,
你能给我讲讲你的装置吗?我设置了3个计时器1)60秒,2)30秒和3)增加延迟。他们似乎都准时离开了。在您的测试中,如果我理解正确,似乎一个计时器触发了错误的处理程序,这是正确的吗?
谢谢mt_dialog.
谢谢,我已经上传了一些简化的代码,演示了我的定时器设置,错误触发处理程序的问题是我的错,但另一个问题发生了,
顺便说一下,在CSR api中,回调有timerid参数来避免赛车coditon,在easy timer中,没有这个是可以的吗?
typedef void(* timer_callback_arg)(timer_id const)
timer_id timercreate(uint32 const time,bool const相对,timer_callback_arg处理程序)
嗨Tengworld,
如果我理解正确的app_easy_timer_modify();不是修改你的定时器,而是删除另一个定时器?您是否能够验证传递给app_easy_timer_modify的值,并检查传递给function的处理程序的id。我试过app_easy_timer_modify,它没有取消计时器。你可以尝试实现一些更简单的东西,像这样尝试:
void testing_timer_handler1(void)
{
testing_timer1 = easy_timer_invalid_timer;
if(testing_timer!= easy_timer_invalid_timer)
{
testing_timer = app_easy_timer_modify(tests_timer,reset_send_data_time +(co_rand_byte()%20)* 10);
}
testing_timer1 = app_easy_timer(60,testing_timer_handler1);
}
void testing_timer_handler(void)
{
if(testing_timer!= easy_timer_invalid_timer)
{
testing_timer = EASY_TIMER_INVALID_TIMER;
arch_set_pxact_gpio ();
}
}
谢谢mt_dialog.
你好,
我在DA14583DEVKT-B板上使用SDK 5.0.3软件。
我拍摄了“BLE_APP_PERITELAL”(给出了BLE示例项目)。
修改为支持两个特性。需要每10毫秒和30毫秒分别通过特征1和特征2向移动端发送数据。
在每一个循环操作中,我需要获得1个数据包的数据I和3个数据包的数据ii(即持续时间为30毫秒)。但是我收到1包数据-1和2包数据- ii。
“app_easy_timer(app_peripheral_ctrl_timer_delay,dataval1timercbhandler)”和“app_easy_timer(app_peripheral_ctrl_timer_delay2,dataval2timercbhandler)”用于触发定期呼叫。
请帮我解决这个问题。
问候,
Mahesh Chandana。
嗨的卖方,
请查看下面的帖子http://support.dialog-semicondiondionder.com/whats-kernel-timer- accuracy.。
谢谢mt_dialog.
你好,
我使用“BLE_APP_PERITERAL”(给定的BLE示例项目)代码。
我需要以下信息,这将是有用的
1.到目前为止,我只能达到最少10毫秒。是否有可能增加内核计时器的调度频率(即app_easy_timer())。
2.我希望在我的申请中使用队列实现。请指导我如何创建和使用队列。
3.根据我的应用要求,我需要将传感器数据发送到内核(用于通过BLE传输),当数据可用时。无论我是否可以调用“KE_MSG_SEND(REQ)”,当我有传感器数据时。是否存在任何约束和限制。两个连续数据包或消息到内核所需的最短时间是多少。
问候,
Mahesh Chandana。
嗨的卖方,
1.我不明白你所说的调度频率是什么意思,当代码在主循环中通过rwip_schedule()时,所有消息都被调度。目前还没有办法增加内核计时器的分辨率,如果这是你的意思的话。
2.您可以在RW-BT-Kernel-SW-FS中找到有关RW内核的信息。
3.正如上面我已经提到,信息通过rwip_schedule内核将(),这个函数如何频繁执行取决于循环,如果系统决定去睡觉或不的functionallity app_asynch_trm()函数(app_on_ble_powered)。如果app_on_ble_powered返回GOTO_SLEEP,设备将继续,进行适当的睡眠检查并进入睡眠,如果它返回KEEP_POWERED,这将迫使调度程序再次运行。
谢谢mt_dialog.
你好,
感谢您的快速回复。
是否可以以单个连接间隔发送多个(即多个)通知数据。
问候,
Mahesh Chandana。
嗨的卖方,
是的,您可能不必做任何特殊的事情,只需在您想要的时间间隔内发送通知,并且堆栈将更多地发送一个数据包如果队列中有多个通知。关于在一个连接间隔中可以发送多少个数据包请检查下一个线程http://support.dialog-semicondiondiondum/number-packets-connection-event.。
谢谢mt_dialog.
你好,
当我发送启用通知时(即,从移动到服务器的写入请求(即1值),它是可在服务器端(即user_catch_rest_hndl())收缩。但是,当我发送禁用通知时(即从移动到服务器的写入请求(即0值)),我无法在服务器端接收(即user_catch_rest_hndl())。
我需要指示(在服务器端),当我接受禁用通知时。我怀疑它是在内核层面的处理。
我如何确定禁用通知的接收。
问候,
Mahesh Chandana。
嗨的卖方,
当一个中央写入特性时,您在应用程序中找到指示,例如在BLE_APP_PERITELAL项目中,您应该能够在USER_CATCH_REST_HNDL()函数中捕获CUST1_IDX_ADC_VAL_1_NTF_CFG案例,当您将此指示达到您的应用程序时,您可以检查是否参数的值具有prf_cli_start_ntf或prf_cli_stop_ntfind。
谢谢mt_dialog.