我有3个定时器声明的app_easy_time。一个周期是1秒,第二个在某些情况下被调用,最后一个在随机时间每30秒调用一次。
有了这三个定时器,第二个定时器回调被称为无法正确解剖。我认为它被第一个定期计时器调用。
如果我只使用前两个计时器,一切似乎都好。
更新:一些简化的代码演示了我的计时器设置,错误触发处理程序的问题是我的错,但另一个问题发生了。
Static void app_watchdog_second_timer_handler() //每秒调用一次,
{
second_coun ++;
APP_WATCHDOG_SECOND_TIMER = app_easy_timer(100, app_watchdog_second_timer_handler);/ / 1000毫秒
如果(second_count = = 10)
{
Uint32_t delay = (co_rand_byte() % 20) * 10 + 30;
app_send_data_timer = app_easy_timer(延迟,sendsensordatahandler);
}
如果(second_count == 30) // period = 30秒
{
second_coun = 0;
}
}
void sendSensorDataHandler(void) //每段时间调用一次
{
APP_SEND_DATA_TIMER = EASY_TIMER_INVALID_TIMER;//这行解决我之前的问题,现在计时器触发正确的处理程序
}
void resetSendData(void) //在某些情况下触发
{
如果(APP_SEND_DATA_TIMER != EASY_TIMER_INVALID_TIMER) //这行解决我之前的问题,现在计时器触发正确的处理程序
{
// ----------此处发生另一个问题,此功能组织删除了我的app_watchdog_second_timer,导致运行定时器[app_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);
}
}
嗨toughworld,
你能给我一些关于你的设置的细节吗?我设置了3个定时器1)60秒,2)30秒和3)递增延迟。所有这些似乎都准时到了。在你的考试中,如果我正确地正确地确定了一个计时器触发了错误的处理程序,这是正确的吗?
由于MT_dialog
谢谢,我上传了一些简化的代码iLustring我的计时器设置,错误地触发了Hanler问题是我的错,但另一个问题发生了,
顺便说一下,在CSR API中,回调有TimerID参数,用于避免赛车编码子,在易于计时器中,没有这个,是可以的吗?
Typedef void(* timer_callback_arg)(timer_id const)
timer_id TimerCreate (uint32 const time,bool const relative,timer_callback_arg handler)
嗨toughworld,
如果我正确地正确地正确地opp_easy_timer_modify();而不是修改您的计时器它删除另一个计时器?您是否能够验证到App_easy_timer_modify的值并检查传递给函数的处理程序的ID。我尝试了app_easy_timer_modify,它不会取消计时器。您可以尝试实现更简单的东西,以便如此:
空白testing_timer_handler1(空白)
{
testing_timer1 = EASY_TIMER_INVALID_TIMER;
如果(testing_timer ! = EASY_TIMER_INVALID_TIMER)
{
testing_timer = app_easy_timer_modify(testing_timer, RESET_SEND_DATA_TIME + (co_rand_byte()%20)*10);
}
testing_timer1 = app_easy_timer (60, testing_timer_handler1);
}
空白testing_timer_handler(空白)
{
如果(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_peripheral”(给出的BLE示例项目)。
修改以支持两个特征。需要每10毫秒和30毫秒通过分别的特点1和特征2发送数据。
在每个循环操作中,我需要获得1个数据 - I和3数据包的数据-I(即持续时间为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。
嗨mahesh,
请检查以下帖子http://support.dialog-semiconductor.com/whats-kernel-timer-accuracy.
由于MT_dialog
你好,
我使用“ble_app_peripheral”(给出的BLE示例项目)代码。
我需要以下有用的信息
1.截至目前,我只能达到最低10毫秒。是否有可能增加内核定时器的调度频率(即app_easy_timer())。
2.我希望在我的应用程序中使用队列实现。请指导我如何创建和使用队列。
3.根据我的应用需求,我需要将传感器数据发送到Kernel(通过BLE传输),只要数据可用。我是否可以调用“ke_msg_send(req)”当我有传感器数据。是否存在任何约束和限制。发送到内核的两个连续包或消息之间所需的最小时间是多少?
问候,
Mahesh Chandana。
嗨mahesh,
1.我不通过调度频率获得你的意思,当代码通过主循环中的RWIP_SCHEDULE()时,所有消息都会安排所有消息。如果这就是你的意思,没有办法增加内核计时器的分辨率。
2.您可以在RW- bt - kernel - sw - fs中找到有关RW内核的信息。
3.正如上面提到的那样,通过RWIP_SCHEDULE()调度到内核的消息,频繁执行此函数执行的频率取决于该循环,如果系统决定睡眠或不睡眠以及APP_ASYNCH_TRM()的函数函数(app_on_ble_powered)。如果app_on_ble_powered return goto_sleep设备将继续,使相应的睡眠检查并进入睡眠状态,如果返回keep_powered,这将强制调度程序再次运行。
由于MT_dialog
你好,
谢谢你的快速回复。
是否可能在单个连接间隔内发送多个(即多个)通知数据。
问候,
Mahesh Chandana。
嗨mahesh,
是的,这是可能的,你不需要做任何特殊的事情,只要在你想要的时间间隔发送通知,如果队列中有多个通知可用,堆栈将发送多个包。关于在一个连接间隔中可以发送多少数据包,请检查下一个线程http://support.dialog-semiconductor.com/number-packets-connection-event.
由于MT_dialog
你好,
当我发送启用通知(即。(即写请求。1值)从手机到服务器),它在服务器端可接收(即在user_catch_rest_hndl())。但当我发送禁用通知(即写请求(即0值)从移动到服务器),我不能在服务器端接收(即user_catch_rest_hndl())。
我需要指示(在服务器端),当我收到禁用通知。我怀疑它是在内核级别本身处理的。
如何识别接收的禁用通知。
问候,
Mahesh Chandana。
嗨mahesh,
当对某个特征进行集中写操作时,您在应用程序中得到指示,例如在ble_app_peripheral项目中,您应该能够捕获user_catch_rest_hndl()函数中的CUST1_IDX_ADC_VAL_1_NTF_CFG情况,当您的应用程序得到这个指示时,您可以检查参数的值是否具有PRF_CLI_START_NTF或PRF_CLI_STOP_NTFIND。
由于MT_dialog