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