This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:休眠模块日历模式中的 RTC 功能

Guru**** 2522770 points
Other Parts Discussed in Thread: EK-TM4C1294XL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/784859/tm4c1294ncpdt-rtc-capabilities-in-calendar-mode-of-hibernatemodule

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

您好!

这是一个有关休眠模块上 RTC 的非常简单的问题。 我已经在使用它来跟踪使用 RTC 的时间。 它运行正常、但我找不到内部 RTC 的年范围。

由于数据表提到使用32位计时器、我假设 RTC 将在2038上溢出。 是这样吗?

如果这很重要、我使用的是 TIvaware 库、它返回一个"struct TM"、使用1900作为参考。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我不会怀疑您的计算结果。 一年内有60x60x24x365=31536000秒。 如果将2^32除以31536000等于136年。 如果您从1900年开始、则它可能会在2036年溢出。 但对于新的开发、您不需要从1900年开始、对吧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有选择从1900年开始、这就是函数"HibernateCalendarGet"使用 TivaWare 返回"struct TM"的方式。 但是、如果您看一下 tm4c1294数据表、RTC 模块似乎不限于1900年开始。 这就是我感到困惑的原因、无法得出结论、即内部 RTC 的时间范围受限。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    是的、如果需要、您可以从不同的日期/时间/年份开始。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    很高兴知道您可以从任意日期开始、但这不能回答我的基本问题:我可以期望 RTC 的时间范围是多少? 我可以继续到2100年及以后吗? 到何时为止、跳跃年份仍将是正确的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我想我之前计算的32位计数器在 RTC 时钟为32kHz 时不会在136年内过期。 根据数据表、闰年补偿在日历函数内处理。 只要年份可以被四除、2月份的天数就会调整为29天。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、
    是的、你是对的。
    最后一个问题:我应该修改哪些文件/函数、以便可以开始计算2000年而不是1900年的年数? 我认为我不应该与"time.h"相乱。 我想知道我是否可以假设 TivaWare 函数上提供的"struct TM"从2000年开始、但我意识到这样做可能会使我依赖的 mktime 和 localtime 函数从"struct TM"转换为"秒后"变得一团糟。

    我已经在添加和减去70年、以创建兼容的"Linux epoch "时间戳。

    不过、另一个问题是、如果基准年变化可以被4除、那么、在基准年变化时、移动基准年不应该与闰年计算相混乱、这是正确的吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我想知道您是否有机会在下运行 TivaWare 休眠示例 /examples/boards/EK-TM4C1294XL/hibernate. 如果您运行此示例、则会显示如何使用 date 命令通过终端窗口设置 DD/MM/YYYY。 当正确输入 DD/MM/YYYY 时,它将调用 DateTimeSet()函数,该函数将使用输入的日期/月/年加载 Stime 结构,然后调用 HibernateCalendarSet() API。  请参见下面的。

    在 HIBERNATE_COMMAND_c 中  

    /*********
    //
    //命令:日期
    //
    //设置当前系统日期。 使用格式"DD/MM/YYYY"
    //
    /*********
    int
    cmd_date (int argc、char **argv)
    {
    const char * pcNext;
    
    //
    //检查参数计数并返回错误太多或太少。
    //
    if (argc ==1)
    {
    return (CMDLINE_TO_LING_args);
    }
    if (argc > 2)
    {
    return (CMDLINE_TOW_DONE_args);
    }
    
    //
    //将日期转换为无符号长整型
    //
    G_ui32DayIdx = ustoutul (argv[1]、&pcNext、10);
    g_ui32MonthIdx = ustoutul (pcNext+1、&pcNext、10)-1;
    G_ui32YearIdx =(ustoutul (pcNext+1、NULL、10)- 2000);
    
    //
    //执行到时间结构的转换并将其存储在休眠中
    //模块。
    //
    if ((g_ui32DayIdx > 31)||(g_ui32MonthIdx > 11))
    {
    return (CMDLINE_INVALID_ARG);
    }
    
    DateTimeSet();
    
    返回(0);
    } 

    文件中。

    //
    //
    //此函数将请求的日期和时间写入
    //休眠模块的日历逻辑。
    ////
    *****************
    void
    DateTimeSet (void)
    {
    struct tm Sttime;
    
    //
    //获取最新日期和时间。 这是在这里完成的、因此没有改变
    //可以按原样回写部分日期和时间。
    //
    HibernateCalendarGet (&S);
    
    //
    //设置要更新的日期和时间值。
    //
    Stime.TM_hour = g_ui32HourIdx;
    Stime.TM_min = g_ui32MinIdx;
    Stime.TM_mon = g_ui32MonthIdx;
    Stime.TM_mday = g_ui32DayIdx;
    Stime.TM_year = 100 + g_ui32YearIdx;
    
    //
    //使用请求的数据更新休眠模块的日历逻辑。
    //
    HibernateCalendarSet (&S); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Danieli:
    我没有听到你的反馈。 我假设您能够解决该问题。 我现在将关闭该线程。 如果您有新问题、您可以打开新主题、或者在问题仍然存在时回复此主题并添加一些注释