Michael Barr發表了一篇題為“5個簡單步驟使嵌入式軟件架構更健壯”的博文。Barr曾經是《嵌入式系統編程》雜志的主編,因此你應該把他當作是一個編寫嵌入式代碼的專家,我是這么認為的。
在這篇博文中,Barr寫道:
“我收集到的大量的證據表明,大部分編程人員、技術經理或者團隊都不能真正理解一個好的固件架構是什么樣的,怎么去實現它,甚至是怎么去識別他們看的架構的好壞。這還包括了在團隊中最有經驗的開發人員。”
隨后,Barr的博文給出了開發穩定的嵌入式固件架構的5個步驟程序。
1.確定需求
2.把架構從設計中區分出來
3.管理CPU時間
4.測試設計
5.為改變做計劃
整篇博文值得花時間去閱讀,但在這里我想要聚焦在第3步:管理CPU時間,Barr寫道:
“大部分產品都是把非實時、軟件實時和硬件實時的需求混合到一起。軟件的時間限制通常最具挑戰性,要以一種明確的方式去定義、測試和實施。舉個例子,在機頂盒設計中,偶爾丟掉一幀視頻數據可能是可以接受的,但是不能連續丟掉超過兩幀,并且不能丟掉任何音頻數據,音頻數據是包括在相同的數字輸入數據流中,處理軟件時間限制的最簡單的方法是把它們作為硬件時間限制一樣對待,必須滿足。
一旦識別了時間限制,在體系結構上,第一步要做的是把盡可能多的有時間要求的需求從軟件中分離出來,放到硬件中去處理。圖1展示了實時功能的處理方式的優先級排序。如圖所示,處理實時功能最理想的地方是在一片FPGA或者一個專用的CPU中(不考慮時間限制的長度)。只有當不可能這樣做的時候,才會去選擇中斷服務程序(ISR),當一個ISR也不能使用的時候,就應該選擇使用一個高優先級的任務。”
請注意,Barr建議使用專用的硬件來處理實時任務,比如一片FPGA,或者一個專用處理器,他解釋了為什么要這么做:
“首先,因為這樣簡化了非實時軟件的設計和實現,在架構上把有時間要求的需求從大量的軟件中剝離出來,這樣可以使用新手編寫的代碼,而不會影響到用戶安全性。把實時功能放到一起的另一個好處是,可以簡化關于驗證所有的時間限制都能滿足的分析過程。”
Barr是在Xilinx公布Zynq SoC之前寫下這些話的,但他也許應該寫的更直接一些。Zynq SoC的可編程邏輯(PL)恰好就是你需要的這種資源,可以用來實現自定義的硬件,處理硬件實時需求,包括那些需要用到一些專用I/O的任務,就象Adam Taylor在今天發表的博文中描述的那樣,” 亞當泰勒玩轉MicroZed連載34:用MicroZed驅動Adafruit RGB NeoPixel LED陣列…”,在這個簡單的例子中,使用Zynq SoC 中的PL硬件邏輯為Adafruit NeoPixel LED條實現了一個專用的串行驅動器。如果你需要做一些更復雜的事情,那么可以有多種途徑來使用Zynq PL,你可以在Zynq 的PL中例化復雜的硬件模塊,包括存儲器控制器、以太網MAC、DSP模塊以及很多其它類型的硬件模塊,這些模塊可以是商業IP,也可以是你自己用Verilog、VHDL開發的模塊,或者是用Vivado HLS從C/C++代碼綜合轉換而來的設計。
如果出于某些原因,你的系統在實時性方面需要做得異常復雜,那么可以考慮使用多核設計,多核Zynq SoC有兩個ARM Cortex-A9 MPCore處理器,工作頻率可以超過1GHz。如果需要,你可以使用其中一個ARM處理器內核來處理實時代碼和實時操作系統(RTOS),另一個ARM處理器內核可以運行那些不需要或者不能夠實時工作的代碼(在這里閱讀“Linux,” GUI, 和apps)。
-
cpu
+關注
關注
68文章
10827瀏覽量
211167 -
系統編程
+關注
關注
0文章
8瀏覽量
6241
發布評論請先 登錄
相關推薦
評論