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