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