漳州做网站的公司,网站搭建后显示建设中,刚刚大连发布紧急通知,凡科互动网页版stm32平台为例的软件模拟时间#xff0c;代替RTC调试
我们在开发项目的时候#xff0c;如果用到RTC#xff0c;如果真正等待RTC到达指定的时间#xff0c;那调试时间就太长了。
比如每隔半个小时#xff0c;存储一次数据#xff0c;如果要观察10次存储的效果#xff0…stm32平台为例的软件模拟时间代替RTC调试
我们在开发项目的时候如果用到RTC如果真正等待RTC到达指定的时间那调试时间就太长了。
比如每隔半个小时存储一次数据如果要观察10次存储的效果那么就要等待5h难道我们真等待5h读取RTC数据不成
这里借助软件虚拟产生逐渐变化的时间加速整个开发流程。
示例
#include stdio.h
#include time.h/*** brief 增加指定秒数到给定的起始日期并打印结果* * param start_date 起始日期* param increment_seconds 增加的秒数*/
void generate_dates(struct tm start_date, int increment_seconds) {// 增加时间start_date.tm_sec increment_seconds;// 规范时间mktime(start_date);// 打印结果printf(Updated date and time: %04d-%02d-%02d %02d:%02d:%02d\n, start_date.tm_year 1900, start_date.tm_mon 1, start_date.tm_mday, start_date.tm_hour, start_date.tm_min, start_date.tm_sec);
}int main() {// 初始化时间struct tm start_date {0};start_date.tm_year 2023 - 1900; // 年份从1900开始算start_date.tm_mon 6 - 1; // 月份从0开始算start_date.tm_mday 10;start_date.tm_hour 8;start_date.tm_min 30;start_date.tm_sec 0;int increment_seconds 3600; // 每次增加一小时generate_dates(start_date, increment_seconds);return 0;
}
如果嫌弃每次增加秒数太麻烦也可以设置分钟和小时的增加
void generate_dates(struct tm start_date, int increment_hours) {// 增加时间start_date.tm_hour increment_hours;// 规范时间mktime(start_date);}
}和
void generate_dates(struct tm start_date, int increment_mins) {// 增加时间start_date.tm_min increment_mins;// 规范时间mktime(start_date);}
}详细解释
struct tm
struct tm是一个结构体用于表示时间信息。它定义在标准库头文件time.h中包含了以下成员
int tm_sec秒数范围是0到60包含闰秒。int tm_min分钟数范围是0到59。int tm_hour小时数范围是0到23。int tm_mday月份中的第几天范围是1到31。int tm_mon月份范围是0到110代表1月11代表12月。int tm_year自1900年以来的年份比如2024年要用2024-1900表示。int tm_wday星期几范围是0到60代表星期日。int tm_yday一年中的第几天范围是0到365。int tm_isdst是否为夏令时正值表示夏令时0表示非夏令时负值表示信息不可用。
mktime
mktime是一个标准库函数用于将struct tm结构转换为time_t类型的日历时间根据当前的本地时间设置规范化tm结构。如果时间信息不合理比如秒数为负值或超出范围mktime会自动进行调整。
求取时间差
项目开发中经常会用到求取两个时间点的时间差对于这一点借助struct tm和它自带的函数实现是十分方便的。在自己的结构体定义时就可以用struct tm来作为时间子结构。
#include stdio.h
#include time.hint main() {struct tm timeinfo1 {0};struct tm timeinfo2 {0};// 初始化第一个时间变量2023年7月10日08:30:00timeinfo1.tm_year 2023 - 1900;timeinfo1.tm_mon 6;timeinfo1.tm_mday 10;timeinfo1.tm_hour 8;timeinfo1.tm_min 30;timeinfo1.tm_sec 0;// 初始化第二个时间变量2024年1月1日12:00:00timeinfo2.tm_year 2024 - 1900;timeinfo2.tm_mon 0;timeinfo2.tm_mday 1;timeinfo2.tm_hour 12;timeinfo2.tm_min 0;timeinfo2.tm_sec 0;// 将tm结构转换为time_t类型time_t time1 mktime(timeinfo1);time_t time2 mktime(timeinfo2);// 计算时间间隔double seconds_difference difftime(time2, time1);double days_difference seconds_difference / (60 * 60 * 24);printf(Difference in seconds: %.f\n, seconds_difference);printf(Difference in days: %.f\n, days_difference);return 0;
}其他
看过这篇全部的内容你会发现这个功能吧依附于time.h这是c的库也就是说只要支持c语言就可以使用。所以这个功能不限于stm32平台比如FPGA的PS端也可以用。你可能会想如何调用这个功能才可以更加真实的反应现实情况。我这里提供一个思路这个功能可以跟定时器结合在一起让定时器每1s钟调用函数来更新时间。要我说写的这篇文章价值在哪里呢在于推广这个struct tm功能初学者知道的不多。