【求助】【TuyaOS OS】TLSR8250_TuyaOS-3.8.3蓝牙定时器运行25天后无法继续进入回调函数

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


Post Reply
17394068840
Posts: 39

经过两次前后50天的测试,发现测试的10台样机几乎同时在第25天运行异常,经测试发现定时器的回调函数没有正常进入。查看定时器底层代码,发现有判断0x7fffffff的条件,而这个数值对应的毫秒正好是24.8天,请帮忙看下这个问题,应该如何解决,谢谢!

Attachments
22.png
11.png
17394068840
Posts: 39

Re: 【求助】【TuyaOS OS】TLSR8250_TuyaOS-3.8.3蓝牙定时器运行25天后无法继续进入回调函数

这里我补充一下,工程师回复我测试了把时间直接修改到接近0x7fffffff没有出现问题,并且可以继续运行,我这边也试了下,发现这个现象必须同时打开低功耗才能复现,也就是打开tal_cpu_allow_sleep();这个功能的时候,当计数器满了以后就不能继续进入定时器回调了,以下为截图 ,后面的按键回调表示程序还在运行,没有死机,但是不知道为啥定时器回调不能进入了!

Attachments
222222.png
jinyuan
Posts: 75

Re: 【求助】【TuyaOS OS】TLSR8250_TuyaOS-3.8.3蓝牙定时器运行25天后无法继续进入回调函数

你好, 我们已经排查到问题并确定了修改方法:
该问题主要存在于低功耗场景下,休眠唤醒后的子设备计数器累加一个较大的值后数据溢出处理异常导致。
主要就是在函数 tkl_system_get_millisecond 中将 & 0x7FFFFFFF 这个动作删除,详情见下面代码

Code: Select all

SYS_TIME_T tkl_system_get_millisecond(VOID_T)
{
    SYS_TIME_T now_tick  = 0;
    SYS_TIME_T last_tick = 0;
    SYS_TIME_T pass_tick = 0;

last_tick = tkl_system_tick_last;
now_tick = clock_time();
pass_tick = ((now_tick >= last_tick) ? (now_tick - last_tick) : (0xFFFFFFFF - last_tick + now_tick)) / CLOCK_16M_SYS_TIMER_CLK_1MS;
if (pass_tick > 0) {
    tkl_system_millisecond = (tkl_system_millisecond + pass_tick);
    tkl_system_tick_last = tkl_system_tick_last + (pass_tick * CLOCK_16M_SYS_TIMER_CLK_1MS);
}

return tkl_system_millisecond;
}
17394068840
Posts: 39

Re: 【求助】【TuyaOS OS】TLSR8250_TuyaOS-3.8.3蓝牙定时器运行25天后无法继续进入回调函数

请帮忙看一下这个bug影响的范围,是不是仅限于TLST8250_3.8.3?还是后面的3.9.0也是如此,其他芯片是否此种应用方式也会有同样 的问题?

Post Reply