我是使用 G:\ti\simplelink_cc2640r2_sdk_3_10_00_15\examples\rtos\CC2640R2_LAUNCHXL\easylink\rfEasyLinkRx下的工程加入的RTC功能,加入的代码如下
uint16_t i;
time_t t;
struct tm *ltm;
char *curTime;
uint32_t STARTTIME=0;
for(i=0;i<1000;i++)
{
Seconds_set(STARTTIME);
t = time(NULL);
ltm = localtime(&t);
curTime = asctime(ltm);
}
最后 curTime 是一直没有变化过 ,我试了把Seconds_set(STARTTIME); 放到循环外面 ,也是一样没有变化,这个方式好像只是调用了一种格式转换,没有从RTC参数里取值一样,
是不是我还要需要加入哪些关于RTC的初始化,比如时钟源等等
Viki Shi:
建议参考下TI RTOS Clock module的实现,例程Simple_Peripheral
文档可参考:file:///C:/ti/simplelink_cc2640r2_sdk_3_10_00_15/docs/driverlib_cc13xx_cc26xx/cc26x0r2/driverlib/group__aonrtc__api.html
user1412065:
回复 Viki Shi:
这个是RTC定时器功能,没有实时时钟功能,里面都没有时分秒处理的地方,这个你上次都说过了,我需要 年月日,时分秒功能的RTC功能
user1412065:
回复 Viki Shi:
我是按你说的方式 处理的,现在是时钟格式对的,但时钟的值是固定不变的,特别是秒,永远是0,我是想知道 怎么解决这个值不变的问题
user1412065:
回复 Viki Shi:
t = time(NULL);应该是读取的时间流,这个函数进去查看是调用ti_sysbios_hal_Seconds_get 如果 下
time_t ATTRIBUTE time(time_t *tout)
{UInt32 t;
/* Seconds_get() returns number of seconds since Jan 1, 1970 00:00:00 GMT. */t = ti_sysbios_hal_Seconds_get();#if defined(__ti__)/**TI time() function returns seconds since 1900, so add the number*of seconds from 1900 to 1970 (2208988800).*/t += 2208988800;
#endif
if (tout) {*tout = t;}
return (t);
}其中读取是ti_sysbios_hal_Seconds_get ,它以宏方式定义的ti_sysbios_hal_Seconds_get__E,但ti_sysbios_hal_Seconds_get__E是调用什么我就不知道 了,那里就进不去了
#define ti_sysbios_hal_Seconds_getti_sysbios_hal_Seconds_get__E
我从工程里没有看到初始化 32K时钟是不是32K时钟没有打开所以时钟不走
user1412065:
回复 Viki Shi:
原因找到了,是我理解上的误解,这个一定是运行中进行秒时钟累加,如果先用暂停方式等待,之后再运行一次查看有没有秒累加是不对的,RTC没有做后台自动累加功能
user1412065:
回复 user1412065:
谢谢你们的解答