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.

[参考译文] 编译器/TMS320C6748:mktime已中断

Guru**** 2563920 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/593213/compiler-tms320c6748-mktime-is-broken

部件号:TMS320C6748

工具/软件:TI C/C++编译器

我正在使用代码编辑器工作室版本:6.1 .1.0.0022万 ,并使用编译器版本8.1 .0为C6748 DSP构建。 当我将TM结构传递到mktime (tm_year设置为117)时,mktime返回值,例如3702884356。 似乎mktime假定tm_year是1970年以后的年份,而不是1900年以后的年份。 我尝试过编译器版本8.1 ................................3,结果相同。

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

    Bernie Whalen 说:
    当我将TM结构传递到mktime且tm_year设置为117 mktime时,会返回一个值,例如3702884356。

    TI RTS库中Time_t的默认时间点是1900年1月1日。  从mktime返回的结果是自该日期以来的秒数。  作为健全性检查,2017年1月1日12:00 AM的结果可以通过将这些结果相乘来粗略计算...

    60秒一分钟
    60分钟一小时
    24小时一
    年365天(忽略闰年)
    自1900年以来117年 

    ...这就是36.89712亿。  我怀疑你预计Time_t的时代是1970年1月1日。  您可以通过使用预定义符号 __TI_Time_Uses_64进行构建来获得该行为。  有关详细信息 ,请参阅Wiki文章时间和时钟RTS功能。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我希望mktime返回从纪元开始的秒数,1970年01月01日 00:00:00 +0000 (UTC)。 返回1900年以来的秒数是相当不标准的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    George提到的页面讨论了这个问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您在实施细节上陷入了困境。 H&S仅说"1970年1月1日似乎很受欢迎"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    完全不会陷入困境。 这显然是一种非标准行为,但出于传统原因而保留。 既然我知道可以定义__TI_Time_Uses_64来修复此错误,我就拥有了所需的所有信息。

    感谢你的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    更像"不常见"。 “标准”对编译器编写者具有非常具体的含义,在这种情况下,标准并不重要。