我想将嵌入式系统的开始时间和日期记录到内存中。
在这里,我想知道有任何标准可以将日期时间戳保存在4个字节内
该系统在arm7上使用免费的rtos。该板包含RTC
感谢。
答案 0 :(得分:1)
下面的结构显示了在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()
上述结构假设seconds
的粒度对应用程序很重要。它还假定应用程序不会在year
2014之前执行,也不会在year
2077之后执行(此时year
将回滚到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()
上述结构假定seconds
与应用程序无关。它还假定应用程序不会在year
2014之前执行,也不会在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}间隔的seconds
粒度足以满足应用程序的要求。它还假定应用程序不会在year
2014之前执行,也不会在year
2141之后执行(此时year
将回滚到2014年)。 MSDOS使用了类似的结构。
答案 1 :(得分:0)