本文是軟件開發(fā)系列文章的第一篇,尤其是嵌入式系統(tǒng)和實時應(yīng)用程序的編程。未來的文章自然會不時提及XMOS技術(shù),因此首先了解 XMOS 適合的軟件世界是有意義的。
軟件是一個了不起的東西。編程語言表達能力強,編譯速度快,有很多抽象和工具可供開發(fā),更新設(shè)備功能快速簡便。這意味著系統(tǒng)中由軟件驅(qū)動的任何部分都是系統(tǒng)中最靈活的部分——一個奇妙的部分。
然而,軟件真正令人討厭的地方有一個:快速實時處理。這是一種必須在某些外部事件之前完成任務(wù)時的處理,例如,在顯示器的屏幕刷新之間操作圖像數(shù)據(jù),或者基于某個快速時鐘向外部 I/O 引腳提供數(shù)據(jù)。
當然,可以使用軟件來實現(xiàn)這一點,但所有美妙的易用性和靈活性似乎都消失了。軟件開發(fā)變得難以維護。
問題
那么,為什么軟件在面對實時或界面驅(qū)動的應(yīng)用程序時會出現(xiàn)問題呢?這些問題可以分為幾類。
問題 1:多任務(wù)處理
自然,處理器可能會嘗試執(zhí)行多個任務(wù),即使是最簡單的問題。但是,處理器通常一次不能做多于一件事。即使是具有傳統(tǒng)架構(gòu)的多核處理器,在硬件中也可能一次只能做兩到四件事。
問題在于,自然單線程處理器上的多任務(wù)處理涉及軟件以塊的形式將任務(wù)調(diào)度進出處理器。從單個任務(wù)的角度來看,調(diào)度意味著您不知道何時進入和何時離開,從而難以滿足實時約束。
問題 2:中斷
即使對于“單線程”應(yīng)用程序,處理器也可能一次做不止一件事。中斷提供了一種隱含形式的多任務(wù)處理。中斷觸發(fā)(例如為 I/O 處理程序提供服務(wù))與調(diào)度程序切換任務(wù)相同。
圖 1:中斷與事件。
問題 3:缺乏可預(yù)測
性 似乎軟件在時間方面確實缺乏可預(yù)測性。任務(wù)需要在一定的微秒內(nèi)運行,但不能保證它們會。調(diào)度和中斷只是問題的一部分。一些微處理器具有用于存儲器訪問的高速緩存,并且存儲器訪問所花費的時間取決于該高速緩存的狀態(tài)。此外,一些微處理器是超標量的,因此每條指令的執(zhí)行時間都是可變的。這一切都意味著您不能只計算指令的數(shù)量并知道該指令序列將花費多長時間。
問題 4:缺乏資源
在嵌入式應(yīng)用中使用實時軟件時,往往會出現(xiàn)另一個問題:資源不足。內(nèi)存和時鐘周期需要花錢,因此有動力從低資源設(shè)備中獲得盡可能多的東西。對于傾向于將資源視為豐富的現(xiàn)代軟件抽象來說,這是一個問題,例如,內(nèi)存是無限的資源。
解決方案
避免實時軟件問題的一種選擇是在硬件解決方案中實現(xiàn)它。如果一個固定的功能部分存在你想要的功能,那真的沒什么可做的。或者,可重新編程的硬件部件,如FPGA可以,只要你有編程的技能。即使您這樣做,也可能需要一些軟件任務(wù),因此您必須將 FPGA 與微處理器集成,無論是在 FPGA 上還是在單獨的部分上。這種硬件/軟件部門提供了多種設(shè)計流程和工具,并且缺乏軟件開發(fā)可以提供的不同功能的緊密集成。
是否有任何解決方案可以提供軟件開發(fā)的所有好處,但不會出現(xiàn)嘗試進行實時編程時出現(xiàn)的問題?
一種選擇是使用實時操作系統(tǒng) (RTOS) - 具有用于實時應(yīng)用程序的額外不同功能的傳統(tǒng)操作系統(tǒng)。首先,多個任務(wù)的調(diào)度具有優(yōu)先級和時間感知性,因此調(diào)度程序試圖保證任務(wù)滿足它們的時間約束。其次,操作系統(tǒng)的設(shè)計使得所有系統(tǒng)任務(wù)的最壞情況執(zhí)行時間都是已知的,使您能夠進行一些最壞情況執(zhí)行時間 (WCET) 分析。
然而,傳統(tǒng)微處理器上的 RTOS 提供了相當重量級的解決方案。它試圖將非自然實時的東西轉(zhuǎn)變?yōu)閷崟r框架。即使調(diào)度是實時感知的并且對系統(tǒng)任務(wù)執(zhí)行 WCET,處理器的非確定性(緩存、超標量執(zhí)行)仍然存在。這樣做的結(jié)果是,即使使用相當快的微處理器,由于操作系統(tǒng)的開銷,也很難以亞微秒的限制完成任務(wù)。這類任務(wù)傳統(tǒng)上仍由 ASICS 或 FPGA 處理。
XMOS 設(shè)備提供了一種全新的解決方案,將軟件的優(yōu)勢與硬件解決方案的實時性能相結(jié)合。
XMOS:專為實時而設(shè)計
XMOS 處理器專為具有快速外部 I/O 約束的實時處理而構(gòu)建。它們旨在將最好的硬件設(shè)計與最好的軟件設(shè)計相結(jié)合。
解決方案 1:硬件多任務(wù)
XMOS 設(shè)備在硬件中處理多任務(wù),一組任務(wù)在不同的軟件線程上運行。每個時鐘周期都有一個不同的線程以循環(huán)方式交換到上下文中。這意味著您不必擔(dān)心調(diào)度程序 - 您可以將每個線程視為以設(shè)定速度運行的獨立實體。它也是一種天然的多核架構(gòu),因此添加更多內(nèi)核意味著可以運行更多獨立任務(wù)。
解決方案 2:事件驅(qū)動的架構(gòu)
XMOS 設(shè)備上沒有操作系統(tǒng)層。每個線程都明確響應(yīng)事件,而不是中斷。這種方法意味著沒有隱藏的任務(wù)可以跳入并擾亂軟件的時間安排。
解決方案 3:可預(yù)測
的執(zhí)行 缺少操作系統(tǒng)和軟件調(diào)度程序,再加上沒有緩存的內(nèi)存(每次內(nèi)存訪問需要 1 個線程周期)以及每個線程使用獨立資源,這意味著使用 XMOS,您可以獲得實時所需的可預(yù)測性 -時間應(yīng)用。你知道一個指令序列需要多長時間是靜態(tài)的。此外,XMOS 提供了一個時序分析器 (XTA) 工具,該工具可以準確地測量兩個代碼點之間的最壞情況執(zhí)行時間(考慮到控制流的多個路徑、函數(shù)調(diào)用)。
解決方案 4:托管資源
XMOS 器件專為嵌入式應(yīng)用而設(shè)計,因此成本低、資源少。軟件程序員的關(guān)鍵是管理這些資源。軟件開發(fā)工具(基于標準 C 編譯器的擴展工具)跟蹤資源使用情況,因此您知道您不會在運行時用完。如果您需要更多內(nèi)存、處理能力或 I/O,只需添加另一個內(nèi)核,因為資源是完全可擴展的。
這些工具還確保每個線程只使用自己的資源,而不會干擾其他線程。
結(jié)論
本文介紹了實時應(yīng)用軟件編程的困難以及 XMOS 系列器件設(shè)計背后的動機。下次您設(shè)計需要實時處理和 I/O 編程的系統(tǒng)時,請查看 XMOS,了解如何將軟件開發(fā)的優(yōu)勢與實時性能相結(jié)合。
評論
查看更多