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

瑞芯微RK3568正式開放RISC-V核心啦,也支持非對稱AMP雙系統(tǒng)!

“國產(chǎn)雙系統(tǒng)”出爐!復(fù)旦微FMQL20SM非對稱AMP:Linux + 裸機(jī)

ARM + RISC-V核間通信方案,基于全志T113-i的OpenAMP非對稱架構(gòu)

“雙系統(tǒng)”出爐!瑞芯微RK3562J非對稱AMP:Linux+RTOS/裸機(jī)
混合部署 | 在迅為RK3568上同時(shí)部署RT-Thread和Linux系統(tǒng)
對稱多處理器的特點(diǎn)是什么
對稱多處理器系統(tǒng)中的進(jìn)程分配包括
對稱多處理器和非對稱多處理器的區(qū)別
混合部署 | 在迅為RK3568上同時(shí)部署RT-Thread和Linux系統(tǒng)
OPA828運(yùn)放非對稱電源供電有什么好處嗎?
TL084能否采用-5V和+ 32V的非對稱雙電源供電呢?
【本周六-上海】SMP對稱多處理 線下培訓(xùn)

評論