[color=rgba(0, 0, 0, 0.9)] 本文帶來的是基于全志T507-H(硬件平臺:創(chuàng)龍科技TLT507-EVM評估板),Linux-RT內(nèi)核的硬件GPIO輸入和輸出實(shí)時性測試及應(yīng)用開發(fā)案例的分享。本次演示的開發(fā)環(huán)境如下:[color=rgba(0, 0, 0, 0.9)] [color=rgba(0, 0, 0, 0.9)]Windows開發(fā)環(huán)境:Windows 7 64bit、Windows 10 64bit [color=rgba(0, 0, 0, 0.9)] Linux開發(fā)環(huán)境:Ubuntu18.04.4 64bit[color=rgba(0, 0, 0, 0.9)]虛擬機(jī):VMware16.2.5 [color=rgba(0, 0, 0, 0.9)]U-Boot:U-Boot 2018 [color=rgba(0, 0, 0, 0.9)]Kernel:Linux-RT-4.9.170 [color=rgba(0, 0, 0, 0.9)]SDK:LinuxSDK-V2.0 [color=rgba(0, 0, 0, 0.9)] GPIO: LED(PI13)、KEY3(PH4)[color=rgba(0, 0, 0, 0.9)]分享案例:rt_gpio_ctrl、rt_input案例 [color=rgba(0, 0, 0, 0.9)] 測試工具:示波器
測試數(shù)據(jù)匯總 [color=rgba(0, 0, 0, 0.9)]基于全志T507-H(硬件平臺:創(chuàng)龍科技TLT507-EVM評估板),按照創(chuàng)龍科技提供的案例用戶手冊進(jìn)行操作,得出如下測試結(jié)果。 [color=rgba(0, 0, 0, 0.9)]備注:測試數(shù)據(jù)與實(shí)際測試環(huán)境有關(guān),僅供參考。 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]測試結(jié)果如下表所示: [color=rgba(0, 0, 0, 0.9)]
表1 Linux-RT GPIO輸入輸出案例測試數(shù)據(jù)[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)](1)GPIO輸入延時:通過使用示波器測量按鍵事件觸發(fā)LED電平翻轉(zhuǎn)的實(shí)際耗時結(jié)合系統(tǒng)延時與GPIO輸出延時得出數(shù)據(jù); [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)](2)系統(tǒng)延遲:根據(jù)Linux-RT性能測試平均值得出數(shù)據(jù); [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)](3)GPIO輸出延時:通過使用示波器測量LED電平翻轉(zhuǎn)的實(shí)際耗時得出數(shù)據(jù)。 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]
圖1
表 2 Linux-RT實(shí)時性測試數(shù)據(jù)
[color=rgba(0, 0, 0, 0.9)]根據(jù)不隔離CPU核心、隔離CPU核心三種狀態(tài)的測試結(jié)果可知:當(dāng)程序指定至隔離的CPU3核心上運(yùn)行時,Linux系統(tǒng)延遲最低,可有效提高系統(tǒng)實(shí)時性。故推薦對實(shí)時性要求較高的程序(功能)指定至T507-H隔離的CPU核心運(yùn)行。
Linux-RT實(shí)時性測試 [color=rgba(0, 0, 0, 0.9)]本次測試是使用Cyclictest延遲檢測工具測試Linux系統(tǒng)實(shí)時性。Cyclictest是rt-tests測試套件下的測試工具,也是rt-tests下使用最廣泛的測試工具,一般主要用來測試內(nèi)核的延遲,從而判斷內(nèi)核的實(shí)時性。Cyclictest主要通過反復(fù)測量并精確統(tǒng)計線程的實(shí)際喚醒時間,以提供有關(guān)系統(tǒng)的延遲信息。它可測量由硬件、固件和操作系統(tǒng)引起的實(shí)時系統(tǒng)的延遲。 [color=rgba(0, 0, 0, 0.9)]
使用Cyclictest測試系統(tǒng)實(shí)時性 [color=rgba(0, 0, 0, 0.9)]基于全志T507-H(硬件平臺:創(chuàng)龍科技TLT507-EVM評估板),按照創(chuàng)龍科技提供的案例用戶手冊進(jìn)行操作,使用Cyclictest程序測試系統(tǒng)實(shí)時性,得出如下測試結(jié)果。 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]
圖2 Linux-RT-4.9.170內(nèi)核測試結(jié)果
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]圖3 Linux-4.9.170內(nèi)核測試結(jié)果 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]對比測試數(shù)據(jù),可看到基于Linux-RT-4.9.170內(nèi)核的系統(tǒng)的延時更加穩(wěn)定,最大延時更低,系統(tǒng)實(shí)時性更佳。 [color=rgba(0, 0, 0, 0.9)]
T507-H核心板典型應(yīng)用場景 [color=rgba(0, 0, 0, 0.9)]
圖4 T507-H核心板典型應(yīng)用領(lǐng)域
Linux-RT應(yīng)用案例的分享 [color=rgba(0, 0, 0, 0.9)]rt_gpio_ctrl案例 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]案例說明 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]通過創(chuàng)建一個基本的實(shí)時線程,在線程內(nèi)觸發(fā)LED的電平翻轉(zhuǎn),同時程序統(tǒng)計實(shí)時線程的調(diào)度延時,并通過示波器測出LED電平兩次翻轉(zhuǎn)的時間間隔。由于程序默認(rèn)以最高優(yōu)先級運(yùn)行,為避免CPU資源被程序完全占用,導(dǎo)致系統(tǒng)被掛起,因此在程序中增加100us的延時。程序原理大致如下: [color=rgba(0, 0, 0, 0.9)](1)在Linux-RT內(nèi)核上創(chuàng)建、使用實(shí)時線程。 [color=rgba(0, 0, 0, 0.9)](2)實(shí)時線程中,計算出觸發(fā)LED電平翻轉(zhuǎn)的系統(tǒng)調(diào)度延時。 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]案例測試 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]將可執(zhí)行文件拷貝至評估板文件系統(tǒng),并執(zhí)行如下命令運(yùn)行測試程序,再按"Ctrl + C"退出測試,串口終端將打印程序統(tǒng)計的延時數(shù)據(jù),如下圖所示。 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]Target# ./rt_gpio_ctrl 100 [color=rgba(0, 0, 0, 0.9)]
圖5
[color=rgba(0, 0, 0, 0.9)]同時使用示波器捕捉LED兩次電平翻轉(zhuǎn)之間的間隔就對應(yīng)上線程調(diào)度的延遲。算出電平兩次翻轉(zhuǎn)的時間間隔為∆x = 114us,如下圖所示。由于程序中默認(rèn)增加了100us的時間延時。因此,實(shí)際延時應(yīng)為:114us-100us = 14us,與程序統(tǒng)計打印的Latency results平均值相近。 [color=rgba(0, 0, 0, 0.9)]
圖6
[color=rgba(0, 0, 0, 0.9)]rt_input案例 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]案例說明 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]通過創(chuàng)建一個基本的實(shí)時線程,在線程內(nèi)打開input設(shè)備,并對按鍵事件進(jìn)行監(jiān)聽,然后觸發(fā)LED的電平翻轉(zhuǎn),再通過示波器測量按鍵觸發(fā)到LED電平翻轉(zhuǎn)期間的實(shí)際耗時。程序原理大致如下: [color=rgba(0, 0, 0, 0.9)](1)在Linux-RT內(nèi)核上創(chuàng)建、使用實(shí)時線程。 [color=rgba(0, 0, 0, 0.9)](2)實(shí)時線程中對打開的input設(shè)備節(jié)點(diǎn)進(jìn)行按鍵事件監(jiān)聽,通過判斷監(jiān)聽得到的按鍵事件來觸發(fā)LED的電平翻轉(zhuǎn)。 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]案例測試 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]將可執(zhí)行文件拷貝至評估板文件系統(tǒng),并執(zhí)行如下命令運(yùn)行測試程序,程序運(yùn)行后按下KEY3用戶按鍵點(diǎn)亮LED,松開按鍵后LED熄滅,再按"Ctrl + C"退出測試程序。 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]Target#./rt_input /dev/input/event8 [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]圖7 [color=rgba(0, 0, 0, 0.9)]
分別使用示波器探頭1測量按鍵KEY3引腳1,使用示波器探頭2測量LED。
從按鍵下降沿觸發(fā)的開始(下圖黃線)到LED上升沿觸發(fā)的完成(下圖藍(lán)線)的時間間隔,即為系統(tǒng)實(shí)時捕獲按鍵輸入時間并響應(yīng)觸發(fā)LED電平翻轉(zhuǎn)的時間∆x,從圖中可看到∆x = 76us。
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]圖8
|