gpt4 book ai didi

c - 如何保存4字节以内的日期时间戳

转载 作者:行者123 更新时间:2023-11-30 15:31:03 25 4
gpt4 key购买 nike


我想将嵌入式系统的启动时间和日期记录到内存中。这里我想知道是否有任何标准可以将日期时间戳保存在4个字节之内。
该系统在带有免费RTOS的arm7上运行。板载RTC
谢谢。

最佳答案

下面的结构显示了在 4 字节(或 32 位)内存储时间和日期的三种方法。

#pragma pack(1)
typedef struct TIMESTAMP_32_A_S
{
uint8_t seconds : 6; // 0-60 (0-63 max)
uint8_t minutes : 6; // 0-60 (0-63 max)
uint8_t hours24 : 5; // 0-23 (0-31 max)
uint8_t dayOfMonth : 5; // 1-31 (0-31 max)
uint8_t month : 4; // 1-12 (0-15 max)
uint8_t year : 6; // Epoch start: 2014, Range: 2014 thru 2077
} TIMESTAMP_32_A_T;
#pragma pack()

上面的结构假设的粒度对于应用程序很重要。它还假设应用程序不会在 2014 年之前或 2077 年之后执行(届时,将滚动)回到 2014 年)。

#pragma pack(1)
typedef struct TIMESTAMP_32_B_S
{
uint8_t minutes : 6; // 0-60 (0-63 max)
uint8_t hours24 : 5; // 0-23 (0-31 max)
uint8_t dayOfMonth : 5; // 1-31 (0-31 max)
uint8_t month : 4; // 1-12 (0-15 max)
uint16_t year : 12; // Epoch start: 2014, Range: 2014 thru 4061
} TIMESTAMP_32_B_T;
#pragma pack()

上面的结构假设与应用程序无关。它还假设应用程序不会在 2014 年 year 之前或 year 4061 之后执行(此时,year 将滚动)回到2014年)。

#pragma pack(1)
typedef struct TIMESTAMP_32_C_S
{
uint8_t secondsBy2 : 5; // 0-30 (0-31 max)
uint8_t minutes : 6; // 0-60 (0-63 max)
uint8_t hours24 : 5; // 0-23 (0-31 max)
uint8_t dayOfMonth : 5; // 1-31 (0-31 max)
uint8_t month : 4; // 1-12 (0-15 max)
uint8_t year : 7; // Epoch start: 2014, Range: 2014 thru 2141
} TIMESTAMP_32_C_T;
#pragma pack()

上面的结构假设 2 秒间隔的粒度对于应用程序来说已经足够了。它还假设应用程序不会在 2014 年之前或在 2141 年之后执行(此时,将滚动)回到2014年)。 MSDOS 使用类似的结构。

关于c - 如何保存4字节以内的日期时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25153135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com