1. 時間操作簡介
在應用開發中,特別是設計日記記錄功能中,經常涉及時間戳的操作,時間戳可直觀的體現程序的運行時間,運行效率。EASY EAI orin-nano評估套件對時間的操作如下所示。
1.1 查看時間
查看系統時間命令如下所示。date命令查看的是時區時間(通過網絡校時),當前設置為CST,即北京時間。hwclock是查看硬件RTC時間(EASY EAI orin-nano默認沒有RTC,此處讀取錯誤),通常以格林威治時間(GMT)為標準。
1.2 設置時間
設置系統時間有兩種方法,可直接設置以及NTP設置。
通過date命令可以設置系統時間,設置格式為“yyyy-MM-dd HH:mm:ss”,設置系統時間之后,若有外接RTC模塊,還需要輸入“hwclock -w”來寫入硬件RTC時間。
sudo date -s "2025-01-20 14:47:02" sudo hwclock -w

NTP全稱為網絡時間同步協議,可以通過網絡上的時間服務器來同步本地ARM板的系統時間。EASY EAI orin-nano采用ntpd服務來進行網絡校時,若要采用手動校時,則需先停掉該校時服務。
1.3 系統時區設置
在新建日志文件時,可能由于ARM板本身的時區與當地不一致,導致日志的時間與PC的時間不一致。EASY EAI orin-nano的時區相關目錄與文件如下所示。
路徑 | 描述 |
/usr/share/zoneinfo/* | zoneinfo時區模塊文件,保存各個地區的時區文件 |
/etc/localtime | 本地機器的時區文件,實際是zoneinfo時區模塊文件中的其中一個 |
/etc/timezone | 本地機器的時區文件,用于給應用層直接讀取 |
設置系統時區命令如下所示。首先從zoneinfo目錄中選擇想要的時區文件,替換掉/etc/localtime文件,然后把/etc/timezone修改為目標地區,最后需要復位評估板,此時觀察系統即可看到時區設置成功。
替換/etc/localtime后的時區
1.4 系統運行時長
查看系統從上電到命令執行的運行信息。
uptime打印的信息分別如下:
當前服務器時間;
當前服務器運行時長;
當前用戶數;
當前的負載均衡,load average;
2. 快速上手
如果您初次閱讀此文檔,請閱讀:《入門指南/源碼管理及編程介紹/源碼工程管理》,按需管理自己工程源碼(注:此文檔必看,并建議采用【遠程掛載管理】方式,否則有代碼丟失風險!!!)。
2.1 源碼工程下載
先在PC虛擬機定位到nfs服務目錄,再在目錄中創建存放源碼倉庫的管理目錄:
cd ~/nfsroot mkdir GitHub cd GitHub
再通過git工具,在管理目錄內克隆遠程倉庫(需要設備能對外網進行訪問)
git clone https://github.com/EASY-EAI/EASY-EAI-Toolkit-3576.git

注:
* 此處可能會因網絡原因造成卡頓,請耐心等待。
* 如果實在要在gitHub網頁上下載,也要把整個倉庫下載下來,不能單獨下載本實例對應的目錄。
2.2 開發環境搭建
通過adb shell進入板卡開發環境,如下圖所示。
通過以下命令,把nfs目錄掛載上nfs服務器。
mount -t nfs -o nolock : /home/orin-nano/Desktop/nfs/

2.3 例程編譯
然后定位到nfs的掛載目錄,再在目錄中創建存放源碼倉庫的管理目錄:
cd /home/orin-nano/Desktop/nfs/GitHub
進入到對應的例程目錄執行編譯操作,具體命令如下所示:
cd EASY-EAI-Toolkit-3576/Demos/common-system_opt/ ./build.sh

2.4 例程運行及效果
執行下方命令,運行示例程序:
./Release/test-timepara-opt
執行效果如下所示。
API的詳細說明,以及API的調用(本例程源碼),詳細信息見下方說明。
3. 時間操作API說明
3.1 引用方式
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-3576/easyeai-api/common/system_opt/。用戶可通過源代碼了解接口實現,甚至可對源碼進行修改。
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 |
輸入參數 | 無 |
返回值 | 時間戳,分別為:微秒級、毫秒級、秒級 |
注意事項 | 無 |
3.3 系統延時(基于nanosleep)
nanosleep一旦被調用,線/進程就進入 TASK_INTERRUPTIBLE 狀態,直到線/進程被喚醒,就回到 TASK_RUNNIN 狀態。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 |
輸入參數 | 延時時長,分別為:微秒級、毫秒級、秒級 |
返回值 | 線/進程被意外喚醒后,還剩余未執行的延時時長。 |
注意事項 | 無 |
3.4 系統延時(基于usleep)
對線/進程進行秒、毫秒、微秒級別的延時,函數原型如下所示。
uint32_t msleep(uint32_t ms);
具體介紹如下所示。
函數名:msleep() | |
頭文件 | easyeai-api/common/system_opt/system_opt.h |
輸入參數 | 延時時長,毫秒級 |
返回值 | 線/進程被意外喚醒后,還剩余未執行的延時時長。 |
注意事項 | 還可使用系統提供的usleep和sleep進行微秒級和秒級延時 |
3.5 獲取時間
獲取當前系統時間,其值表示從CUT(Coordinated Universal Time)時間1970年1月1日00:00:00到當前時刻的秒數。函數原型如下所示。
int get_time_stamp();
具體描述如下所示。
函數名:get_time_stamp() | |
頭文件 | easyeai-api/common/system_opt/system_opt.h |
輸入參數 | 無 |
返回值 | 時間戳,秒級 |
注意事項 | 無 |
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:時分秒排列保存變量 | |
返回值 | 無 |
注意事項 | 無 |
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校時會把此函數設置的時間覆蓋掉 |
4. API測試案例
示例代碼路徑為EASY-EAI-Toolkit-3576/Demos/common-system_opt/test-timepara-opt.c。
審核編輯 黃宇
-
rk3576
+關注
關注
1文章
170瀏覽量
706
發布評論請先 登錄
【米爾RK3576開發板評測】+項目名稱【米爾RK3576開發板評測】一個視頻和你共同認識一下米爾RK3576開發板
米爾RK3576和RK3588怎么選?-看這篇就夠了
【米爾RK3576開發板評測】+項目名稱值得購買的米爾RK3576開發板
探索 RK3576 方案:卓越性能與靈活框架,誠邀開發定制合作!
適配多種系統,米爾瑞芯微RK3576核心板解鎖多樣化應用
RK3576 vs RK3588:為何越來越多的開發者轉向RK3576?
Mpp支持RK3576么
RK這2款旗艦芯片RK3588 PK RK3576,誰是最優選
新品體驗 | RK3576開發板

RK3576單板發布倒計時:RK3399與RK3576對比

RK3588與RK3576區別解析

RK3576有多強?實測三屏八攝像頭輕松搞定

評論