背景
千年虫问题(Y2K Problem),又称“2000年问题”或“Y2K漏洞”,是指在20世纪的计算机系统中,年份通常只用两位数字表示(例如“98”代表1998年),当时间从1999年12月31日跨入2000年1月1日时,系统可能会将“00”错误地识别为1900年,从而导致计算机程序出现逻辑错误或崩溃。
介绍
最近在做嵌入式自动化设备开发遇到一个时间戳的问题,要用这个时间戳保存一些设备信息、运行状态信息、波形数据、文件信息,时间精度要求1ms,下位机是没有RTC的!因为单片机是32位的,所以自然而然地想到用uint32_t
来表示这个时间戳,但认真想想这个时间戳其实是有一些漏洞在里边的,好比如上面介绍的千年虫问题
uint32_t
我们计算一下uint32_t
变量保存的毫秒最大能存储多少天
uint64_t
我们计算一下uint64_t
变量保存的毫秒最大能存储多少天
总结
综上,我最后选择了uint64_t
作为时间戳的存储变量类型,因为自动化设备是一年365天不停机的,如果用uint32_t
,设备隔了50天就复位时间戳了,这个肯定不能满足要求!