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

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

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

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

2.4 例程運行及效果
執(zhí)行下方命令,運行示例程序:
./Release/test-timepara-opt
執(zhí)行效果如下所示。
API的詳細(xì)說明,以及API的調(diào)用(本例程源碼),詳細(xì)信息見下方說明。
3. 時間操作API說明
3.1 引用方式
EASY EAI api庫位于本倉庫的easyeai-api目錄中。為方便客戶在本地工程中直接調(diào)用我們的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 |
庫文件目錄 | 無 | 無 |
庫鏈接參數(shù) | ${SYSTEM_OPT_LIBS} | 無 |
API源代碼路徑為EASY-EAI-Toolkit-3576/easyeai-api/common/system_opt/。用戶可通過源代碼了解接口實現(xiàn),甚至可對源碼進(jìn)行修改。
3.2 獲取時間戳(調(diào)試使用)
獲取時間戳函數(shù)用于獲取秒、毫秒、微秒,函數(shù)原型如下所示。
uint64_t get_timeval_us(); uint64_t get_timeval_ms(); uint64_t get_timeval_s();
具體介紹如下所示。
函數(shù)名:get_timeval_us()、get_timeval_ms()、get_timeval_s() | |
頭文件 | easyeai-api/common/system_opt/system_opt.h |
輸入?yún)?shù) | 無 |
返回值 | 時間戳,分別為:微秒級、毫秒級、秒級 |
注意事項 | 無 |
3.3 系統(tǒng)延時(基于nanosleep)
nanosleep一旦被調(diào)用,線/進(jìn)程就進(jìn)入 TASK_INTERRUPTIBLE 狀態(tài),直到線/進(jìn)程被喚醒,就回到 TASK_RUNNIN 狀態(tài)。TASK_INTERRUPTIBLE 是可以被 [信號] 和 [wake_up()] 喚醒的,當(dāng)信號到來時,進(jìn)程會被設(shè)置為“可運行”。
對線/進(jìn)程進(jìn)行秒、毫秒、微秒級別的延時,函數(shù)原型如下所示。
uint32_t osTask_usDelay(uint32_t us); uint32_t osTask_msDelay(uint32_t ms); uint32_t osTask_sDelay(uint32_t s);
具體介紹如下所示。
函數(shù)名:osTask_usDelay()、osTask_msDelay()、osTask_sDelay() | |
頭文件 | easyeai-api/common/system_opt/system_opt.h |
輸入?yún)?shù) | 延時時長,分別為:微秒級、毫秒級、秒級 |
返回值 | 線/進(jìn)程被意外喚醒后,還剩余未執(zhí)行的延時時長。 |
注意事項 | 無 |
3.4 系統(tǒng)延時(基于usleep)
對線/進(jìn)程進(jìn)行秒、毫秒、微秒級別的延時,函數(shù)原型如下所示。
uint32_t msleep(uint32_t ms);
具體介紹如下所示。
函數(shù)名:msleep() | |
頭文件 | easyeai-api/common/system_opt/system_opt.h |
輸入?yún)?shù) | 延時時長,毫秒級 |
返回值 | 線/進(jìn)程被意外喚醒后,還剩余未執(zhí)行的延時時長。 |
注意事項 | 還可使用系統(tǒng)提供的usleep和sleep進(jìn)行微秒級和秒級延時 |
3.5 獲取時間
獲取當(dāng)前系統(tǒng)時間,其值表示從CUT(Coordinated Universal Time)時間1970年1月1日00:00:00到當(dāng)前時刻的秒數(shù)。函數(shù)原型如下所示。
int get_time_stamp();
具體描述如下所示。
函數(shù)名:get_time_stamp() | |
頭文件 | easyeai-api/common/system_opt/system_opt.h |
輸入?yún)?shù) | 無 |
返回值 | 時間戳,秒級 |
注意事項 | 無 |
3.6 獲取系統(tǒng)日期,系統(tǒng)時間
獲取系統(tǒng)日期,系統(tǒng)時間函數(shù)原型如下。
void get_system_date_time(uint32_t *curDate, uint32_t *curTime);
具體描述如下所示。
函數(shù)名:get_system_date_time() | |
頭文件 | easyeai-api/common/system_opt/system_opt.h |
輸入?yún)?shù) | curDate:年月日排列保存變量 |
curTime:時分秒排列保存變量 | |
返回值 | 無 |
注意事項 | 無 |
3.7 設(shè)置系統(tǒng)日期,系統(tǒng)時間
設(shè)置系統(tǒng)日期,系統(tǒng)時間的操作函數(shù)原型如下所示。
void set_system_date_time(int year, int mon, int day, int hour, int min, int second);
具體描述如下所示。
函數(shù)名:set_system_date_time() | |
頭文件 | easyeai-api/common/system_opt/system_opt.h |
輸入?yún)?shù) | year:年 |
mon:月 | |
day:日 | |
hour:時 | |
min:分 | |
second:秒 | |
返回值 | 無 |
注意事項 | 注意ntp校時會把此函數(shù)設(shè)置的時間覆蓋掉 |
4. API測試案例
示例代碼路徑為EASY-EAI-Toolkit-3576/Demos/common-system_opt/test-timepara-opt.c。
審核編輯 黃宇
-
rk3576
+關(guān)注
關(guān)注
1文章
162瀏覽量
651
發(fā)布評論請先 登錄
【米爾RK3576開發(fā)板評測】+項目名稱【米爾RK3576開發(fā)板評測】一個視頻和你共同認(rèn)識一下米爾RK3576開發(fā)板
米爾RK3576和RK3588怎么選?-看這篇就夠了
【米爾RK3576開發(fā)板評測】+項目名稱值得購買的米爾RK3576開發(fā)板
探索 RK3576 方案:卓越性能與靈活框架,誠邀開發(fā)定制合作!
適配多種系統(tǒng),米爾瑞芯微RK3576核心板解鎖多樣化應(yīng)用
RK3576 vs RK3588:為何越來越多的開發(fā)者轉(zhuǎn)向RK3576?
Mpp支持RK3576么
新品體驗 | RK3576開發(fā)板

米爾RK3576開發(fā)板特惠活動!

RK3576單板發(fā)布倒計時:RK3399與RK3576對比

RK3588與RK3576區(qū)別解析

RK3576有多強(qiáng)?實測三屏八攝像頭輕松搞定

評論