之前我討論了非對稱多核以及如何在需要實時響應時間和豐富的用戶界面和/或連接性的場景中使用它。我使用飛思卡爾的 Vybrid 作為此類架構的示例,并討論了使這種解決方案比使用串行鏈路連接兩個獨立處理器的“傳統”方法更易于開發和更可靠的硬件特性。
在本文中,我將通過展示一個由 Toradex 和 AntMicro 開發的演示項目來展示可用于在這種架構上實現解決方案的軟件組件。我們開發了一個提供觸摸屏用戶界面的 2D 繪圖儀。機械部分不是很復雜。它來自 Internet 上可用的工具包。我們進行了一些改進以提高繪圖質量和機械可靠性。
控制繪圖硬件需要有限數量的數字 I/O。另一方面,我們需要精確的時間來獲得良好的繪圖質量,并且需要處理大量的數據來繪制復雜的主題。
現在您已經了解了最終結果,我們可以深入了解它并了解它是如何實現的。
該系統有兩個主要組成部分:一個基于觸摸屏的用戶界面,顯示不同的矢量圖形圖像并讓用戶選擇繪圖儀將轉移到紙上的一個,以及一個在繪圖過程中控制硬件的實時控制系統。每個組件都在專用內核上運行。我們將 Cortex-A5 用于用戶界面,將 Cortex-M4 用于實時控制。
在 Cortex-A5 上,我們選擇運行 Linux 并使用 QT 框架來實現用戶模式應用程序。Linux 是嵌入式設備的常見選擇,并以合理的占用空間提供了我們系統所需的所有功能。
Digia 維護的 Qt 框架也是嵌入式設備的流行選擇。它提供了豐富的功能集(不限于用戶界面)、用戶友好的集成開發環境(包括 UI 設計器)和雙重開源/商業許可。Qt 支持 SVG 矢量圖形格式,這使得選擇它作為顯示器上顯示的圖像格式變得很容易。相同的圖像被轉換為?? G 代碼(一種數字控制編程語言)。控制系統解析 G 代碼以執行實際的繪圖操作。
在 Cortex-M4 上,我們需要同時執行活動,從 UI 獲取命令和數據,同時移動 X 和 Y 軸。這種控制可以在裸機固件中實現,但實時操作系統 (RTOS) 可以簡化開發。RTOS 管理不同任務的調度,而不會丟失實時響應時間。它還允許從應用程序代碼直接訪問硬件。
我們選擇 eCos(由 AntMicro 移植)作為 m4 內核的 RTOS。它提供了一個調度器和一個硬件抽象層,使我們的應用程序代碼變得簡單。這兩個組件需要通信,我們有三種不同的通信方式:
? 發送到控制系統的命令
? 關于繪圖儀當前狀態的反饋
? 提供用于控制繪圖的 G 代碼
前兩種通信涉及少量數據,需要快速傳遞。飛思卡爾提供了一個名為多核通信 (MCC) 的庫,可以很好地滿足這些要求。它提供了一個基于端點的接口,用于交換消息。在 Linux 上運行的每個應用程序都可以創建自己的端點,也可以將消息發送到由 M4 核心管理的端點。從開發人員的角度來看,這種機制類似于套接字或管道,提供易于使用的通信鏈接。
AntMicro 將 MCC 移植到 eCos,在 M4 內核上提供相同的功能。MCC 消息可用于發送小數據包,保持它們的順序。它們不適合一次發送復雜圖形的完整 G 代碼。為此,我們決定使用共享內存,允許 M4 內核訪問 Linux 應用程序加載的 G 代碼數據。
架構如下圖所示,突出顯示了在兩個內核上運行的不同組件。
Linux應用程序將M4代碼加載到內存并使用飛思卡爾提供的mqxboot命令行工具啟動(該工具是開源的,可以作為參考了解M4如何初始化,并在內部直接實現該功能如果需要對過程進行更嚴格的控制,則應用程序代碼)。然后通過 MCC 交換“歡迎”消息,以確保兩個內核都啟動并運行。當用戶選擇一個繪圖并按下按鈕開始繪圖時,Linux 應用程序執行一系列操作:
? 發送“home”命令移動繪圖區域左上角的筆
? 將 G 代碼數據加載到與 M4 共享的內存區域(這也可以使用 mqxboot 完成)
? 發送“start”命令開始繪圖過程
此時,M4 內核獨立運行,處理 G 代碼數據,移動軸,并發送回有關其進度的通知。我們提供了一個按鈕,可以在一段時間內以 100% 的速度加載 A5 內核,以表明這不會影響另一個內核的操作,因為它可以獨立操作并訪問完成繪圖所需的數據。
兩個應用程序的源代碼都可以在github上找到,你可以看到代碼總量相當合理(幾百行),并且通過MCC實現的管理通信通道的代碼非常簡單易讀。
審核編輯:郭婷
-
Linux
+關注
關注
87文章
11230瀏覽量
208932 -
操作系統
+關注
關注
37文章
6740瀏覽量
123192 -
RTOS
+關注
關注
21文章
809瀏覽量
119436
發布評論請先 登錄
相關推薦
評論