嵌入式技术william hill官网
直播中

ss

7年用户 8762经验值
擅长:电源/新能源 制造/封装 RF/无线
私信 关注
[问答]

请教大神怎样去使用RT-Thread中的RTC.c驱动呢

在MDK中利用google SVN下的源代码,编译BSP/STM3210中的工程,并且增加了TFT液晶屏驱动,目前想在TFT 液晶屏显示 RTC时钟。

使用RT-Thread中的RTC.c驱动。有些疑问如下:

1. RTC.C中使用了“ localtime(&now);”函数获取本地时间,这个本地时间在嵌入式系统中是从哪里获取的呢?
2. 代码中有“ti->tm_year = year - 1900; ”,目前我按照YYYY/M M/DD格式传递日期参数。传递过来2010年,相减以后成为“110”。是否正确?是否要改成“ti->tm_year = year - 2000; ”?

void set_date(rt_uint32_t year, rt_uint32_t month, rt_uint32_t day)
{
  time_t now;
  struct tm* ti;
  rt_device_t device;
  ti = RT_NULL;
  /* get current time */
  time(&now);
  ti = localtime(&now);
  if (ti != RT_NULL)
  {
    ti->tm_year = year - 1900;  
    ti->tm_mon   = month - 1; /* ti->tm_mon   = month; */
    ti->tm_mday = day;
  }
  now = mktime(ti);
  device = rt_device_find("rtc");
  if (device != RT_NULL)
  {
    rt_rtc_control(device, RT_DEVICE_CTRL_RTC_SET_TIME, &now);
  }
}

3. 在程序任务中调用RTC.C中的函数time_t time(time_t* t),这个函数返回的值是一个unsigned int 类型,这类型是否包含了年月日,时分秒信息?
假如是,格式是怎么样的?

我在任务中调用Set_time() set_data()函数设定参数以后,再调用time()函数返回的值不是预期的值。

回帖(3)

ss

2022-3-29 09:38:44
对于问题1作废,脑袋短路。没有仔细分析前面的time(&now)函数。

  /* get current time */

  time(&now);

对于问题3也作废。
举报

ss

2022-3-29 09:39:10
RTC.C中使用了“ localtime(&now);”函数获取本地时间,这个本地时间在嵌入式系统中是从哪里获取的呢?

  time_t now;

  /* get current time */

  time(&now);

从硬件RTC中得到当前时间(UNIX时间戳).

ti->tm_year = year - 1900;

UNIX时间戳是从1900年开始计数的.

3. 在程序任务中调用RTC.C中的函数time_t time(time_t* t),这个函数返回的值是一个unsigned int 类型,这类型是否包含了年月日,时分秒信息?

假如是,格式是怎么样的?

请查阅 "UNIX时间戳"
举报

ss

2022-3-29 09:39:22
我在任务中调用Set_time() set_data()函数设定参数以后,再调用time()函数返回的值不是预期的值。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分