BUG报告多周期性app_easy_timer回调的bug

12个职位/ 0个新职位
最后发表
toughworld
离线
最后看到:3年5个月前
加入:2015年5月12日09:55
BUG报告多周期性app_easy_timer回调的bug

我有3个由app_easy_time声明的Timer。一个以1秒为周期,第二个在某些情况下调用,最后一个是每30秒随机调用一次。
有了这三个计时器,第二计时器回调称为不正确ocassionly。我相信它是由第一周期定时器调用。
如果我只用前两个定时器,一切似乎都ok。

更新:一些简化的代码说明我的定时器设置,错误的触发处理程序问题是我的错误,但另一个问题发生了。

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);

If (second_count == 30) //周期为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) //这一行解决了我之前的问题,现在定时器触发正确的处理程序

// ----------另一个问题出现在这里,这functionocassionly删除我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);

设备:
MT_dialog
离线
最后看到:2个月2个星期前
工作人员
加入:2015-06-08 34
嗨toughworld,

嗨toughworld,

你能给我讲讲你设置一些更多的细节?我设置3个定时器1)60秒2)30秒,3)递增延时。所有这些似乎去的时间。在您的测试,如果我正确undestood似乎是一个定时器触发错误处理程序,是正确的?

由于MT_dialog

toughworld
离线
最后看到:3年5个月前
加入:2015年5月12日09:55
谢谢你,我也上传一些

谢谢你,我也上传一些简化代码ilustrting我的定时器设置中,错误地triggerd hanler问题是我的错,但出现其他问题,
顺便说一下,在企业社会责任的API,回调有无的timerId参数为避免赛车coditon,在简单的计时器,它是确定没有这个?
void(* timer_callback_arg)(timer_id const)
timer_id TimerCreate (uint32 const time,bool const relative,timer_callback_arg handler)

MT_dialog
离线
最后看到:2个月2个星期前
工作人员
加入:2015-06-08 34
嗨toughworld,

嗨toughworld,

如果我正确undestood的app_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

马赫什
离线
最后看到:3年5个月前
加入:2016-01-04 14:03
你好,

你好,
我使用的SDK上DA14583DEVKT-B板5.0.3软件。
我采用了“ble_app_peripheral”(给出的BLE示例项目)。

修改为支持两种特性。需要每10毫秒秒至30毫秒通过特征1和特征2发送的数据分别向移动。

在每一周期操作中,我需要得到数据-I的1包和数据II的3个数据包(即,对于30毫秒持续时间)。但我接收数据1和数据II的2个包的1包。
“app_easy_timer (APP_PERIPHERAL_CTRL_TIMER_DELAY DataVal1TimerCbHandler)”和“app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY2, DataVal2TimerCbHandler)”用于触发周期性调用。

请帮我解决这个问题。

问候,
Mahesh Chandana。

MT_dialog
离线
最后看到:2个月2个星期前
工作人员
加入:2015-06-08 34
嗨马赫什,

嗨马赫什,

请检查下面的帖子http://support.dialog-semiconductor.com/whats-kernel-timer-accuracy

由于MT_dialog

马赫什
离线
最后看到:3年5个月前
加入:2016-01-04 14:03
你好,

你好,
我正在使用“ble_app_peripheral”(给出的BLE示例项目)代码。
我需要以下有用的信息
1.截至目前,我可以能够实现最小10毫秒而已。是否有可能增加内核计时器的调度频率(即app_easy_timer())。
2.我希望在我的应用程序中使用队列实现。请指导我如何创建和使用队列。
3.根据我的应用程序要求,当数据可用时,我需要将传感器数据发送到Kernel(通过BLE传输)。当我有传感器数据时,我是否可以调用“ke_msg_send(req)”。有任何约束和限制。从两个连续的包或消息到内核所需的最短时间是多少?

问候,
Mahesh Chandana。

MT_dialog
离线
最后看到:2个月2个星期前
工作人员
加入:2015-06-08 34
嗨马赫什,

嗨马赫什,

1.我不明白你所说的调度频率的意思是,当代码遍历rwip_schedule()在主回路中的所有邮件进行调度。有没有办法来增加此刻的内核计时器的分辨率,如果这是你的意思。

2.您可以在RW- bt - kernel - sw - fs中找到关于RW内核的信息。

3.我媒体链接上面提到的,内核中的消息通过rwip_schedule(),怎么光顾函数执行计划依赖于这个循环,如果系统决定进入睡眠状态或不和app_asynch_trm的后的功能()函数(app_on_ble_powered)。如果app_on_ble_powered回报GOTO_SLEEP设备将继续进行适当的睡眠检查,并进入睡眠,如果它返回KEEP_POWERED这将迫使调度程序再次运行。

由于MT_dialog

马赫什
离线
最后看到:3年5个月前
加入:2016-01-04 14:03
你好,

你好,
谢谢你的快速反应。
是否有可能在一个连接间隔内发送多个(即多个)通知数据。

问候,
Mahesh Chandana。

MT_dialog
离线
最后看到:2个月2个星期前
工作人员
加入:2015-06-08 34
嗨马赫什,

嗨马赫什,

是的,这是可能的,你不需要做任何特殊的事情,只是在你想要的间隔发送通知,堆栈将发送多个包,如果超过一个通知在队列中可用。关于一个连接间隔可以发送多少数据包,请检查下一个线程http://support.dialog-semiconductor.com/number-packets-connection-event

由于MT_dialog

马赫什
离线
最后看到:3年5个月前
加入:2016-01-04 14:03
你好,

你好,
当我发送启用通知(即。(即写请求。1值)从移动端到服务器),它在服务器端是可接受的(即在user_catch_rest_hndl())。但是当我发送禁用通知(即写请求(即0值)从移动到服务器),我不能在服务器端接收(即user_catch_rest_hndl())。

我需要指示(在服务器端)当我收到禁用通知。我怀疑它是在内核级本身处理。
如何识别接收禁用通知。

问候,
Mahesh Chandana。

MT_dialog
离线
最后看到:2个月2个星期前
工作人员
加入:2015-06-08 34
嗨马赫什,

嗨马赫什,

当中心写入一个特征时,您将在应用程序中得到指示,例如在ble_app_peripheral项目中,您应该能够在user_catch_rest_hndl()函数中捕获CUST1_IDX_ADC_VAL_1_NTF_CFG案例,当您的应用程序得到此指示时,您可以检查参数的值是否具有PRF_CLI_START_NTF或PRF_CLI_STOP_NTFIND。

由于MT_dialog