系统操作 - 时间参数
1.1. 时间操作概述
在应用程序开发中,尤其是在设计日志(日记/记录)功能时,经常会进行时间戳操作。时间戳可以直观地反映程序的运行时间和运行效率。
1.1.1 查看系统时间(时钟)
查看系统时间的命令如下。

1.1.1 查看系统时间(时钟) 图19
- 使用 date 命令可以查看系统时间(UTC + 时区)。当前设置为 CST 等时区。
1.1.2 设置系统时间(时钟)
设置系统时间有两种方法:【手动设置时间】和【通过 NTP 设置时间】。
- 【手动设置时间】:可以使用 date 命令设置系统时间。设置格式为 “yyyy-MM-dd HH:mm:ss”。

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
uptime 命令输出的信息如下:
-
当前服务器时间
-
当前服务器运行时间
-
当前用户数量
-
当前平均负载(负载情况)
1.2. 快速开始
1.2.1 准备开发环境
如果是第一次阅读本文档,请先阅读《入门指南 / 开发环境准备 / Easy-Eai 编译环境的准备与更新》,并按照其中的步骤搭建编译环境。
在 PC 上的 Ubuntu 系统中执行 run 脚本,进入 EASY-EAI 编译环境。详情如下。
cd ~/develop_environment./run.sh 22041.2.2 下载源码并编译示例
在 EASY-EAI 编译环境下,创建用于管理源码仓库的目录。
cd /optmkdir EASY-EAI-Toolkitcd EASY-EAI-Toolkithttps://dl.dragonwake.com/download/rv1126b/embedded/EASY-EAI-Toolkit-1126B/Demos.zip
从上述链接下载 Demos.zip 压缩文件,上传到虚拟机的 /opt/EASY-EAI-Toolkit 目录并解压。 移动到对应示例的目录,执行编译操作。具体命令如下。
cd EASY-EAI-Toolkit-1126B/Demos/common-system_opt/./build.sh💡 注意:由于依赖库放置在开发板上,交叉编译过程中请务必保持 /mnt 挂载。

1.2.2 下载源码并编译示例 图23
1.2.3 运行示例
通过串口调试或 SSH 调试进入开发板后台,移动到示例所在位置。如下所示。
cd /userdata/Demo/common-system_opt
1.2.3 运行示例 图24
运行示例的命令如下。
./test-timepara-opt1.2.4 执行结果
执行结果如下所示。

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 获取时间戳(用于调试)
时间戳获取函数用于获取秒、毫秒和微秒。函数原型如下。
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() 唤醒;接收到信号后,进程会被设置为“可运行”状态。该函数用于对线程/进程进行秒级、毫秒级、微秒级延时(休眠)。函数原型如下。
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)
对线程/进程进行毫秒级延时(休眠)。函数原型如下。
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 到当前时间经过的秒数。函数原型如下。
int get_time_stamp();具体说明如下。
| 函数名:get_time_stamp() | 详细 |
|---|---|
| 头文件 | easyeai-api/common/system_opt/system_opt.h |
| 输入参数 | 无 |
| 返回值 | 时间戳(秒级) |
| 注意事项 | 无 |
1.3.6 获取系统日期和时间
获取系统日期和时间的函数原型如下。
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 设置系统日期和时间
设置系统日期和时间的函数原型如下。
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。