跳转到内容

系统操作 - 时间参数

1.1. 时间操作概述

在应用程序开发中,尤其是在设计日志(日记/记录)功能时,经常会进行时间戳操作。时间戳可以直观地反映程序的运行时间和运行效率。

1.1.1 查看系统时间(时钟)

查看系统时间的命令如下。

1.1.1 查看系统时间(时钟) 图19

1.1.1 查看系统时间(时钟) 图19

  • 使用 date 命令可以查看系统时间(UTC + 时区)。当前设置为 CST 等时区。

1.1.2 设置系统时间(时钟)

设置系统时间有两种方法:【手动设置时间】和【通过 NTP 设置时间】。

  • 【手动设置时间】:可以使用 date 命令设置系统时间。设置格式为 “yyyy-MM-dd HH:mm:ss”。

1.1.2 设置系统时间(时钟) 图20

1.1.2 设置系统时间(时钟) 图20

  • 如果有 RTC:设置系统时间后,需要输入「hwclock -w」将时间写入硬件 RTC。

  • 修改时间通常需要管理员权限。如果不是管理员用户,需要在命令开头添加「sudo」。

  • 【通过 NTP 设置时间】:NTP 是网络时间协议。它通过互联网上的时间服务器,按照一定规则(取决于 ntp-client 的策略)自动同步开发板时间。

1.1.3 设置 RTC 时钟

本文主要介绍系统时间。关于 RTC 部分(如适用),请参阅《外围设备接口使用说明 / RTC》。

1.1.4 时区和时间同步服务

  • 时区:【系统时钟】和【RTC 时钟】都使用 UTC 时间。在不同地区使用时间时,需要考虑时区的影响。

  • 时间同步服务:【系统时钟】不仅可以手动修改,也会受到时间同步服务的影响。

关于【时区设置】以及【时间同步服务】,对于 EASY-EAI-Nano-TB,请参考《应用笔记:自动时间同步和时区设置》一文进行操作。关于更详细的相互作用机制,请参考《系统时间管理概述》。

1.1.5 系统运行时间

查看从系统上电到执行命令时的运行信息。

1.1.5 系统运行时间 图21

1.1.5 系统运行时间 图21

uptime 命令输出的信息如下:

  • 当前服务器时间

  • 当前服务器运行时间

  • 当前用户数量

  • 当前平均负载(负载情况)

1.2. 快速开始

1.2.1 准备开发环境

如果是第一次阅读本文档,请先阅读《入门指南 / 开发环境准备 / Easy-Eai 编译环境的准备与更新》,并按照其中的步骤搭建编译环境。

在 PC 上的 Ubuntu 系统中执行 run 脚本,进入 EASY-EAI 编译环境。详情如下。

Terminal window
cd ~/develop_environment
./run.sh 2204

1.2.2 下载源码并编译示例

在 EASY-EAI 编译环境下,创建用于管理源码仓库的目录。

Terminal window
cd /opt
mkdir EASY-EAI-Toolkit
cd EASY-EAI-Toolkit

https://dl.dragonwake.com/download/rv1126b/embedded/EASY-EAI-Toolkit-1126B/Demos.zip

从上述链接下载 Demos.zip 压缩文件,上传到虚拟机的 /opt/EASY-EAI-Toolkit 目录并解压。 移动到对应示例的目录,执行编译操作。具体命令如下。

Terminal window
cd EASY-EAI-Toolkit-1126B/Demos/common-system_opt/
./build.sh

💡 注意:由于依赖库放置在开发板上,交叉编译过程中请务必保持 /mnt 挂载。

1.2.2 下载源码并编译示例 图23

1.2.2 下载源码并编译示例 图23

1.2.3 运行示例

通过串口调试或 SSH 调试进入开发板后台,移动到示例所在位置。如下所示。

Terminal window
cd /userdata/Demo/common-system_opt

1.2.3 运行示例 图24

1.2.3 运行示例 图24

运行示例的命令如下。

Terminal window
./test-timepara-opt

1.2.4 执行结果

执行结果如下所示。

1.2.4 执行结果 图25

1.2.4 执行结果 图25

关于 API 的详细说明以及 API 调用(本示例的源代码),请参考以下说明。

1.3. 时间操作 API 说明

1.3.1 include/引用方法

EASY EAI api 库位于本仓库的 easyeai-api 目录中。为了便于用户在本地项目中直接调用 EASY EAI api 库,下面列出了项目中需要链接的库、头文件等。

说明CMake 中的写法Makefile 中的写法
api.cmake${common_root}/system_opt/api.cmake
头文件目录${SYSTEM_OPT_INCLUDE_DIRS}-I ../../easyeai-api/common/system_opt
源文件目录${SYSTEM_OPT_SOURCE_DIRS}../../easyeai-api/common/system_opt
库文件目录
库链接参数${SYSTEM_OPT_LIBS}

API 源代码路径为 EASY-EAI-Toolkit-1126B/easyeai-api/common/system_opt/。用户可以通过源代码查看接口实现,也可以直接修改源代码。

1.3.2 获取时间戳(用于调试)

时间戳获取函数用于获取秒、毫秒和微秒。函数原型如下。

Terminal window
uint64_t get_timeval_us();
uint64_t get_timeval_ms();
uint64_t get_timeval_s();

具体说明如下。

函数名:get_timeval_us()、get_timeval_ms()、get_timeval_s()详细
头文件easyeai-api/common/system_opt/system_opt.h
输入参数
返回值时间戳。分别为微秒级、毫秒级、秒级
注意事项

1.3.3 系统延时(基于 nanosleep)

调用 nanosleep 后,线程/进程会进入 TASK_INTERRUPTIBLE 状态,并保持该状态直到被唤醒,随后返回 TASK_RUNNING 状态。TASK_INTERRUPTIBLE 可以由信号或 wake_up() 唤醒;接收到信号后,进程会被设置为“可运行”状态。该函数用于对线程/进程进行秒级、毫秒级、微秒级延时(休眠)。函数原型如下。

Terminal window
uint32_t osTask_usDelay(uint32_t us);
uint32_t osTask_msDelay(uint32_t ms);
uint32_t osTask_sDelay(uint32_t s);

具体说明如下。

函数名:osTask_usDelay()、osTask_msDelay()、osTask_sDelay()详细
头文件easyeai-api/common/system_opt/system_opt.h
输入参数延时时间。分别为微秒级、毫秒级、秒级
返回值如果线程/进程被意外唤醒,则返回尚未执行的剩余延时时间
注意事项

1.3.4 系统延时(基于 usleep)

对线程/进程进行毫秒级延时(休眠)。函数原型如下。

Terminal window
uint32_t msleep(uint32_t ms);

具体说明如下。

函数名:mssleep()详细
头文件easyeai-api/common/system_opt/system_opt.h
输入参数延时时间(毫秒级)
返回值如果线程/进程被意外唤醒,则返回尚未执行的剩余延时时间
注意事项也可以使用系统提供的 usleep 或 sleep 进行微秒级或秒级延时

1.3.5 获取时间

获取当前系统时间。其值表示从 UTC(协调世界时)1970 年 1 月 1 日 00:00:00 到当前时间经过的秒数。函数原型如下。

Terminal window
int get_time_stamp();

具体说明如下。

函数名:get_time_stamp()详细
头文件easyeai-api/common/system_opt/system_opt.h
输入参数
返回值时间戳(秒级)
注意事项

1.3.6 获取系统日期和时间

获取系统日期和时间的函数原型如下。

Terminal window
void get_system_date_time(uint32_t \*curDate, uint32_t \*curTime);

具体说明如下。

函数名:get_system_date_time()详细
头文件easyeai-api/common/system_opt/system_opt.h
输入参数curDate:按年月日顺序保存的变量指针
curTime:按时分秒顺序保存的变量指针
返回值
注意事项

1.3.7 设置系统日期和时间

设置系统日期和时间的函数原型如下。

Terminal window
void set_system_date_time(int year, int mon, int day, int hour, int min, int second);

具体说明如下。

函数名:set_system_date_time()详细
头文件easyeai-api/common/system_opt/system_opt.h
输入参数year:年
mon:月
day:日
hour:时
min:分
second:秒
返回值
注意事项请注意,如果启用了 NTP 时间同步,则通过此函数设置的时间会被覆盖

1.4. API 测试用例

示例代码路径为 EASY-EAI-Toolkit-1126B/Demos/common-system_opt/test-timepara-opt.c。