| 嵌入式軟件的應(yīng)用與開發(fā)是當(dāng)今計(jì)算機(jī)軟件發(fā)展的一個(gè)熱點(diǎn)。本文首先分析了在嵌入式系統(tǒng)開發(fā)中軟件開發(fā)的重要性,接著分析了傳統(tǒng)測(cè)試方式的缺點(diǎn),并在此基礎(chǔ)上介紹了AMC公司的CODETEST嵌入式軟件在線分析與測(cè)試解決方。 嵌入式軟件分析與測(cè)試的重要性 隨著計(jì)算機(jī)硬件技術(shù)的進(jìn)步和元件質(zhì)量逐步提高,元件的集成量也大大增加,從而使嵌入式設(shè)備的硬件性能得到了極大的提高;與此同時(shí),通過采用成熟的商用操作系統(tǒng),使系統(tǒng)運(yùn)行在一個(gè)高性能的、可靠的軟件平臺(tái)上,為實(shí)現(xiàn)各種大型的復(fù)雜的應(yīng)用打下了良好的基礎(chǔ)。面對(duì)系統(tǒng)復(fù)雜性的增加,自然需要功能強(qiáng)大、性能穩(wěn)定的應(yīng)用軟件與之相適應(yīng)。所以,在嵌入系統(tǒng)開發(fā)中軟件的代碼量也越來越大,電子類產(chǎn)品的代碼量以每兩年就翻一翻的速度增長。同時(shí),系統(tǒng)又要求應(yīng)用也要精簡高效、穩(wěn)定可靠,使軟件的開發(fā)在整個(gè)系統(tǒng)開發(fā)中所占的時(shí)間也越來越長,軟件的質(zhì)量對(duì)產(chǎn)品的最終質(zhì)量起到了決定性的作用。但是事實(shí)上由于軟件的開發(fā)缺乏科學(xué)的管理手段,開發(fā)的軟件得不到很好的測(cè)試與分析,所編寫的程序沒有得到有效的測(cè)試就交付給用戶使用。那些沒有運(yùn)行過的代碼帶著潛在的危險(xiǎn)交付到客戶手中,經(jīng)常會(huì)給用戶帶來巨大的經(jīng)濟(jì)損失,為產(chǎn)品供應(yīng)商帶來信譽(yù)上的損失,在一些特殊的領(lǐng)域甚至?xí)<叭说纳踩?/SPAN> 綜上所述,隨著嵌入式系統(tǒng)的發(fā)展,我們迫切需要一種工具能夠在軟件開發(fā)的單板階段、集成階段、系統(tǒng)階段等各階段對(duì)嵌入式系統(tǒng)的軟件進(jìn)行實(shí)時(shí)在線的測(cè)試與分析,以保證系統(tǒng)的性能和可靠性。 市面上流行的測(cè)試工具大致分為純軟件的測(cè)試工具和純硬件的測(cè)試工具(如邏輯分析儀和仿真器等),下面我們從原理上分析使用傳統(tǒng)的測(cè)試工具對(duì)嵌入式軟件進(jìn)行分析和測(cè)試的優(yōu)缺點(diǎn)。 純軟件的測(cè)試工具 純軟件的測(cè)試工具采用的是軟件打點(diǎn)技術(shù),在被測(cè)代碼中插入一些函數(shù),用這些函數(shù)來完成數(shù)據(jù)的生成,并上送數(shù)據(jù)到目標(biāo)系統(tǒng)的共享內(nèi)存中。同時(shí)在目標(biāo)系統(tǒng)中運(yùn)行一個(gè)預(yù)處理任務(wù),完成這些數(shù)據(jù)的預(yù)處理,將處理后的數(shù)據(jù)通過目標(biāo)機(jī)的網(wǎng)口或串口上送到主機(jī)平臺(tái)。這一切都需借助于用戶的目標(biāo)處理器完成。 通過以上過程,測(cè)試者得以知道程序當(dāng)前的運(yùn)行狀態(tài)。 從上述分析可知,純軟件的測(cè)試工具的測(cè)試原理有兩個(gè)必然存在的特點(diǎn)——插樁函數(shù)和預(yù)處理任務(wù)。 由于插入插樁函數(shù)和預(yù)處理任務(wù)的存在,使系統(tǒng)的代碼增大,更嚴(yán)重的是這些代碼會(huì)對(duì)系統(tǒng)的運(yùn)行效率有很大的影響(超過50%)。函數(shù)本身要有它的實(shí)現(xiàn)過程,它要完成數(shù)據(jù)的生成和暫存,而且這些函數(shù)在它的實(shí)現(xiàn)過程中還可能被其他優(yōu)先級(jí)更高的中斷程序所中斷,預(yù)處理任務(wù)需要占用目標(biāo)系統(tǒng)CPU處理時(shí)間、共享內(nèi)存和通信通道完成數(shù)據(jù)的處理、數(shù)據(jù)的上送。由于這些弊端的存在,當(dāng)采用純軟件測(cè)試工具對(duì)目標(biāo)系統(tǒng)進(jìn)行測(cè)試時(shí),用戶目標(biāo)系統(tǒng)是在一種不真實(shí)的環(huán)境下運(yùn)行的,我們所捕獲的數(shù)據(jù)也是不夠精確。 所以采用純軟件的測(cè)試工具缺乏性能分析,它不能對(duì)用戶目標(biāo)系統(tǒng)中的函數(shù)和任務(wù)運(yùn)行的時(shí)間指標(biāo)進(jìn)行精確的分析。 當(dāng)做覆蓋率分析的時(shí)候,因?yàn)橐罅看螯c(diǎn),而打點(diǎn)多于200時(shí)就會(huì)影響系統(tǒng)的運(yùn)行,所以只能做單元覆蓋率分析且單元的程序量不能太大。 它不能對(duì)內(nèi)存的動(dòng)態(tài)分配進(jìn)行動(dòng)態(tài)的觀察。 純硬件的測(cè)試工具 純硬件工具通常用于系統(tǒng)的硬件設(shè)計(jì)與測(cè)試工作。當(dāng)它用于軟件的分析測(cè)試時(shí),卻無法滿足用戶的基本要求。  以邏輯分析儀為例,邏輯分析儀是通過監(jiān)控系統(tǒng)在運(yùn)行時(shí)總線上的指令周期,并以一定的頻率捕獲這些信號(hào),通過對(duì)捕獲的信號(hào)進(jìn)行分析來判斷程序當(dāng)前運(yùn)行的狀況。由于它使用的是采樣的方式,難免會(huì)遺失一些重要的信號(hào);同時(shí),分析的范圍也極其有限。以性能分析為例,當(dāng)使用某種邏輯分析儀進(jìn)行性能分析時(shí),我們只能以抽樣的方式,同時(shí)對(duì)80個(gè)函數(shù)做性能分析,得到一個(gè)不精確的結(jié)果;而若使用CodeTEST,我們可以同時(shí)對(duì)32000個(gè)函數(shù)做性能分析,得到一個(gè)精確的結(jié)果。 當(dāng)對(duì)程序做覆蓋率分析時(shí),因?yàn)橛布ぞ呤菑南到y(tǒng)總線捕獲數(shù)據(jù)的,如當(dāng)CACHE打開我們會(huì)采用指令預(yù)取技術(shù),從外存中讀一段代碼到一級(jí)CACHE中,這時(shí)邏輯分析儀在總線上監(jiān)視到這些代碼被讀取的信號(hào),就會(huì)報(bào)告這些代碼已經(jīng)被執(zhí)行了,但實(shí)際上被送到CACHE中的代碼可能根本沒有被命中。為了避免這種誤差必須把CACHE關(guān)閉掉,而CACHE關(guān)掉就不是系統(tǒng)真實(shí)的運(yùn)行環(huán)境了,有時(shí)甚至?xí)捎贑ACHE關(guān)閉而導(dǎo)致系統(tǒng)無法正常運(yùn)行。 而仿真器通常采用內(nèi)存標(biāo)記技術(shù),它所關(guān)心的也是處理器從外存的代碼段讀取數(shù)據(jù)的情況。所以也無法在CACHE打開的方式下工作。而它的性能分析也是以仿真器的時(shí)間系統(tǒng)以抽樣的方式進(jìn)行的,也無法實(shí)時(shí)對(duì)系統(tǒng)進(jìn)行真實(shí)的分析。所以我們所得出的結(jié)果也是不精確的。 純硬件工具根本不具有對(duì)內(nèi)存分配進(jìn)行分析和檢查的能力。 |