SYD881X RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟

RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟

这里RTC做了两个定时器一个是12秒,一个是185秒:

c 复制代码
#define  RTCEVT_NUM  ((uint8_t) 0x02)//当前定时器事件数

#define  RTCEVT_12S  ((uint32_t)  0x0000002)//定时器1s事件
/*整分钟定时器事件,因为其余的事件追求的是时间的等长,但是在手环中还需要一个分钟的定时器,每次60秒的时候需要一个定时器事件,
比如60秒,120秒,180秒等,概况起来就是整(正)分钟*/
//#define  RTCEVT_whole_minute  ((uint32_t)  0x00000002)
#define  RTCEVT_185S  ((uint32_t) 0x0000004)//定时器185s事件

在12秒定时器的第三次事件设置万年历时间:

c 复制代码
    uint8_t count=3;
	#ifdef	RTCEVT_12S
	if(RTC_EVT&RTCEVT_12S)
	{
		#ifdef _WDT_
		 wdt_clear();
		#endif
              if(count)
              {
                  count--;
                  if(count==0)
                  {
                      UTCTime       unix_time = 0;
                      UTCTimeStruct rtc_time = {0};
                      unix_time = 1734588550-94665600; 
                      ConvertUTCTime(&rtc_time,unix_time);
                      timeAppClockSet((uint8_t*)&rtc_time.year);
                  }
              }
		
		#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
		dbg_printf("nLPO_12S_RTC_EVT_ID:%d\r\n",count);
		#endif

		RTC_EVT_Clr(RTCEVT_12S);
	}
	#endif

这里测试到调用timeAppClockSet后会出现比较大的延迟,本来12秒的定时器变成了19秒而且每次测试还不一样,还有可能是30多秒之类的:

这里奇怪的是把RTCEVT_12S这个定时器ID从0x02改成0x01等非0x02的数值这个问题就消失了,比如这里改成0x01在调用timeAppClockSet后也不会出现比较大的延迟:

这个就奇葩了!

最后查了很久发现是整分钟定时器默认的ID为0x02,即使不用这个整分钟定时器他依旧存在,调用timeAppClockSet的时候(不限于调用该函数)会进行一次整分钟的调整,就造成定时器出错,这里修改lib的bug后即使ID为0x02也不会出现这个问题了:

本文设计的代码可以从如下地址下载(工程:\Source Code\SYD8811_ble_peripheral\1.SYD8811_BLE_UART_notifyen_open_power):https://download.csdn.net/download/chengdong1314/90159565

相关推荐
SZ1701102311 个月前
ffplay 实现视频流中音频的延迟
音视频·延迟
Web极客码2 个月前
什么是缓存?
缓存·cdn·延迟
cui_win6 个月前
Linux性能优化-网络篇-网络延迟
linux·服务器·网络·延迟·ping hping3
G皮T9 个月前
【Flink】WaterMark 实战
大数据·数据库·flink·watermark·水位线·乱序·延迟