<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式軟件跟蹤信息嵌套緩存機制和解析機制的設計

嵌入式軟件跟蹤信息嵌套緩存機制和解析機制的設計

作者: 時(shí)間:2014-10-18 來(lái)源:網(wǎng)絡(luò ) 收藏

  引言

本文引用地址:http://dyxdggzs.com/article/264077.htm

  系統是當今計算機軟件領(lǐng)域的熱點(diǎn),實(shí)時(shí)性是系統的基本要求。隨著(zhù)技術(shù)的不斷發(fā)展,在嵌入式應用的不斷增長(cháng)以及嵌入式系統復雜性不斷提高的情況下,調試階段在整個(gè)系統開(kāi)發(fā)過(guò)程中所占的比重越來(lái)越大。調試環(huán)境和調試技術(shù)直接影響軟件開(kāi)發(fā)的效率和質(zhì)量,高效的調試系統可以大大減少嵌入式系統開(kāi)發(fā)的時(shí)間,減輕系統開(kāi)發(fā)工作量。

  主要有在線(xiàn)調試和運行時(shí)跟蹤調試兩種方式。在線(xiàn)調試在調試實(shí)時(shí)系統時(shí)有很大的局限性,如通過(guò)斷點(diǎn)查詢(xún)完參數后系統無(wú)法再按照正常時(shí)序運行,以及無(wú)法檢測到系統順序化執行的變遷狀態(tài)。運行時(shí)跟蹤調試采用軟件插樁技術(shù),通過(guò)在程序中嵌入跟蹤點(diǎn),開(kāi)發(fā)人員可以在程序運行過(guò)程中通過(guò)跟蹤點(diǎn)實(shí)時(shí)觀(guān)察輸出的信息,如各模塊之間進(jìn)行交互的信息以及程序運行的順序等。

  本項目設計的實(shí)時(shí)跟蹤系統基于運行時(shí)跟蹤調試手段,采用ARM11系列處理器作為硬件開(kāi)發(fā)平臺,運行于Nucleus實(shí)時(shí)操作系統上。Nucl eus實(shí)時(shí)操作系統為搶先式多任務(wù)操作系統,在程序執行過(guò)程中,低優(yōu)先級任務(wù)會(huì )被高優(yōu)先級任務(wù)搶占,可能出現跟蹤任務(wù)沖突而導致跟蹤信息相互覆蓋、亂序等問(wèn)題。特別是在跟蹤信息量較大時(shí),一旦超過(guò)傳輸峰值就會(huì )造成跟蹤信息的丟失。該實(shí)時(shí)跟蹤系統采用特殊緩存機制和解析機制,能夠解決跟蹤信息丟失的問(wèn)題,實(shí)現跟蹤信息的完整、有序傳輸。

  1 原始跟蹤方案

  實(shí)時(shí)跟蹤系統由跟蹤信息緩存單元、傳輸控制單元和PC端解析單元組成,如圖1所示。其中,跟蹤信息緩存單元負責對跟蹤信息的組裝和跟蹤緩存的管理,傳輸控制單元負責將跟蹤信息從跟蹤緩存搬移到PC端,PC端解析單元負責對跟蹤信息進(jìn)行解析。

  

 

  跟蹤緩存管理機制是指如何管理該跟蹤緩存的讀寫(xiě)權限,如何記錄讀寫(xiě)索引的變化。在有跟蹤備份緩存的跟蹤方案中,跟蹤緩存管理機制還負責對備份緩存的管理。在跟蹤系統中,所有跟蹤信息在跟蹤點(diǎn)輸出時(shí)被封裝成為固定幀格式(消息頭+消息內容),寫(xiě)入到跟蹤信息緩存單元中同一個(gè)長(cháng)度為X字節的環(huán)形隊列。

  由于Nucleus多任務(wù)操作系統下實(shí)時(shí)跟蹤系統中跟蹤源主要分為低級中斷、高級中斷/定時(shí)器和任務(wù)等,因此在對跟蹤源中的跟蹤點(diǎn)進(jìn)行跟蹤的過(guò)程中,不同優(yōu)先級的跟蹤點(diǎn)可能出現對全局跟蹤信息緩存的競爭。跟蹤沖突場(chǎng)景如圖2所示。跟蹤信息緩存單元中僅設置了一個(gè)寫(xiě)指針訪(fǎng)問(wèn)跟蹤信息緩存,保證了跟蹤信息的有序性,但不同優(yōu)先級跟蹤源進(jìn)行切換時(shí)會(huì )產(chǎn)生沖突,需要對寫(xiě)指針現場(chǎng)進(jìn)行保護。

  

 

  由于阻塞高優(yōu)先級任務(wù)會(huì )造成系統流程異常,在產(chǎn)生沖突時(shí),為了保證跟蹤信息完整性,同時(shí)又不能阻塞高優(yōu)先級任務(wù),只能丟棄高優(yōu)先級任務(wù)中的跟蹤請求。當操作系統任務(wù)頻繁切換時(shí),會(huì )出現較多跟蹤信息丟棄的現象。跟蹤信息丟棄現象的特征是跟蹤信息整條丟失、連續丟失(主動(dòng)搶占任務(wù)中的所有跟蹤),且跟蹤信息丟棄與跟蹤信息傳輸損耗無(wú)關(guān)。因此,跟蹤系統中的緩存機制有待優(yōu)化。

  2 跟蹤優(yōu)化方案一

  2.1 物理緩存管理機制

  物理緩存管理機制采用含跟蹤頭、跟蹤信息內容和跟蹤尾的跟蹤信息幀格式,在跟蹤源數據相互被打斷的過(guò)程中不考慮跟蹤信息的完整性,按照打斷的優(yōu)先級順序將跟蹤信息寫(xiě)入跟蹤緩存。跟蹤信息寫(xiě)入場(chǎng)景如圖3所示。任務(wù)1跟蹤信息寫(xiě)入跟蹤信息緩存過(guò)程中,被高級中斷/定時(shí)器打斷。高級中斷/定時(shí)器將其跟蹤信息頭寫(xiě)入當前寫(xiě)指針處,直至整條跟蹤信息寫(xiě)入完成。任務(wù)1獲得執行權,其未寫(xiě)完的跟蹤信息緊接著(zhù)高級中斷/定時(shí)器跟蹤信息尾部寫(xiě)入,直至整條跟蹤信息寫(xiě)入完成。

  

 

  2.2 傳輸控制機制

  實(shí)時(shí)跟蹤系統通過(guò)串口進(jìn)行PC端和ARM子系統之間的通信,傳輸控制單元描述了PC端和ARM子系統之間的通信流程,它采用DMA總線(xiàn)控制器進(jìn)行跟蹤信息搬移。DMA是一種不經(jīng)過(guò)ARM處理器的CPU而直接從內存中存取數據的數據交換模式。在DMA模式下,CPU只需向DMA總線(xiàn)控制器下達指令,使其處理數據的傳送,接收數據傳送完畢的反饋信息,從而大大減輕了CPU資源占有率。傳輸控制單元采取DMA同步中斷發(fā)送跟蹤信息,每次以等長(cháng)字節傳輸,將跟蹤信息搬移至串口發(fā)送寄存器中,再通過(guò)配置串口發(fā)送寄存器,將跟蹤信息發(fā)送至PC端解析顯示單元。

  2.3 遞歸調用解析機制

  根據圖4中的跟蹤緩存場(chǎng)景,為保證跟蹤信息的完整連續性,解析單元采用遞歸調用的方式解析當前碼流。

  

 

  首先在PC端跟蹤信息解析單元開(kāi)辟一個(gè)環(huán)形隊列(即循環(huán)緩存)用于存放串口輸出的跟蹤信息,通過(guò)一個(gè)讀指針訪(fǎng)問(wèn)該循環(huán)緩存并進(jìn)行遞歸調用解析。同時(shí)在PC端開(kāi)辟一個(gè)大小為N×L的跟蹤緩存空間(即N個(gè)長(cháng)度為L(cháng)的連續緩存空間)用于存放解析出的完整跟蹤信息,每一塊長(cháng)度為L(cháng)的緩存存放一條完整的跟蹤信息。申請一個(gè)指針數組,用于保存每一個(gè)完整內存的起始地址,即記錄N×L緩存中每次寫(xiě)指針的變化情況。跟蹤信息遞歸解析函數流程如圖5所示。

  

 

  最后將解析完成的跟蹤信息碼流轉換成為可見(jiàn)字符,在PC機上顯示輸出。

  3 跟蹤優(yōu)化方案二

  3.1 備份緩存管理機制

  備份緩存管理機制采用含跟蹤頭和跟蹤信息的跟蹤信息幀格式,將跟蹤信息寫(xiě)入一個(gè)大小為N的全局跟蹤信息緩存中。為避免在任務(wù)切換頻繁時(shí)當前任務(wù)被高優(yōu)先級任務(wù)打斷造成數據丟失,申請一個(gè)嵌套深度為M的備份緩存來(lái)存放高優(yōu)先級任務(wù)跟蹤信息。其中,備份緩存區域每塊子緩存的長(cháng)度均為m,設置跟蹤忙碌標識位,初始值為0。跟蹤源通過(guò)調用跟蹤系統提供的跟蹤接口函數,將跟蹤忙碌標識置1,并將當前跟蹤源跟蹤信息填入全局跟蹤信息緩存。完成當前跟蹤信息寫(xiě)入操作后,將跟蹤忙碌標識置0。若當前跟蹤源在進(jìn)行寫(xiě)入操作,即跟蹤忙碌標識為1時(shí),高優(yōu)先級任務(wù)調用跟蹤接口,則將高級任務(wù)的跟蹤信息寫(xiě)入備份緩存中,當前跟蹤源繼續進(jìn)行未完成的寫(xiě)操作。每次寫(xiě)完當前跟蹤信息,檢查備份緩存中是否有數——若有,則將備份緩存中的跟蹤信息拷回至全局跟蹤信息緩存中(跟蹤緩存場(chǎng)景如圖6所示),即在當前任務(wù)跟蹤信息寫(xiě)入跟蹤信息緩存時(shí),若高級任務(wù)到來(lái),則將高級任務(wù)跟蹤信息進(jìn)行封裝并寫(xiě)入備份緩存。當前跟蹤結束寫(xiě)入操作輸出成功后,檢查備份緩存中是否存在跟蹤信息——若有,則將備份緩存中的跟蹤信息回拷至全局跟蹤信息緩存中,從而保證全局跟蹤信息緩存中跟蹤信息的連續性。

  

 

  3.2 傳輸控制機制

  同跟蹤優(yōu)化方案一中傳輸控制機制。

  3.3 普通查詢(xún)解析機制

  根據跟蹤緩存管理機制二,由于全局跟蹤信息緩存中跟蹤信息呈完整連續分布,解碼方式采用遍歷查詢(xún)方式。

  首先,在PC端跟蹤信息接收單元開(kāi)辟一個(gè)環(huán)形隊列(即解析前循環(huán)緩存),用于存放從串口接收的跟蹤信息。

  然后在PC端解析顯示單元開(kāi)辟一個(gè)解析后循環(huán)緩存,用于存放解析后的完整跟蹤信息。使用讀指針遍歷解析前循環(huán)緩存,查詢(xún)到以跟蹤頭標識X開(kāi)頭的字符串,將其后的完整跟蹤信息寫(xiě)入解析后循環(huán)緩存中,直至下一次遇到跟蹤頭標識X,記錄解析前循環(huán)緩存讀索引并保存當前解析后循環(huán)緩存寫(xiě)索引。循環(huán)以上操作,將解析前循環(huán)緩存中的跟蹤信息依次解析,并放入解析后循環(huán)緩存中。

  最后將解析后循環(huán)緩存中解析完成的完整跟蹤信息碼流轉換成為可見(jiàn)字符,在PC機上顯示輸出。

  4 性能分析比較

  4.1 跟蹤優(yōu)化方案一

  將跟蹤信息按物理連續存儲方式存儲數據,即跟蹤源在單條跟蹤信息組裝過(guò)程中,通過(guò)全局寫(xiě)指針控制跟蹤信息寫(xiě)入。所有跟蹤點(diǎn)均跟蹤當前優(yōu)先級秩序,對跟蹤信息緩存區進(jìn)行寫(xiě)操作,保證僅有一個(gè)跟蹤信息緩存,且跟蹤源相互搶占時(shí)根據優(yōu)先級高低對跟蹤緩存進(jìn)行寫(xiě)操作。該機制跟蹤緩存中的跟蹤信息呈現嵌套、打斷的不完整碼流。

  跟蹤信息發(fā)送機制采取跟蹤接口函數中觸發(fā)傳輸裝置搬移數據。在傳輸控制單元,通過(guò)配置DMA總線(xiàn),將全局跟蹤信息緩存中的跟蹤信息搬移至串口寄存器中。PC端接收裝置從串口寄存器中取出數據,放入PC端解析單元緩存空間,通過(guò)跟蹤信息遞歸解析機制,將不完整的跟蹤信息解析為完整連續的跟蹤信息。其中每個(gè)跟蹤信息緩存區尾部都設置一個(gè)保護數據區,保護區長(cháng)度為單條信息最大長(cháng)度L。

  該方案解決了跟蹤信息丟失問(wèn)題,在PC端解析顯示單元對不連續碼流進(jìn)行解碼。由于該機制在嵌入式跟蹤緩存單元中采取物理連續存儲數據方式,降低了跟蹤軟件對ARM系統資源的消耗,保證了在高速運行情況下跟蹤系統對ARM處理器CPU的消耗盡可能低。從而避免在高速運行的系統中,由于跟蹤系統占用大量CPU導致系統運行速率低。該方案適用于對ARM子系統運行速率要求較高的終端系統。

  4.2 跟蹤優(yōu)化方案二

  在嵌入式跟蹤信息緩存單元申請一個(gè)全局跟蹤信息環(huán)緩存空間,同時(shí)申請一組備份緩存。寫(xiě)指針沖突時(shí),高級任務(wù)的跟蹤信息被寫(xiě)入備份緩存中,當前跟蹤源繼續將其跟蹤信息寫(xiě)入全局跟蹤信息緩存。每次寫(xiě)完當前條跟蹤信息,檢查備份緩存中是否有數——若有,則將其拷回至全局緩存中。該機制根據任務(wù)優(yōu)先級高低來(lái)管理寫(xiě)指針,解決了寫(xiě)指針沖突導致跟蹤信息不連續的問(wèn)題。

  在傳輸控制單元,通過(guò)配置DMA總線(xiàn),設置發(fā)送目的地址及長(cháng)度,將全局跟蹤信息緩存中的跟蹤信息搬移至串口寄存器中。PC端接收裝置從串口寄存器中取出數據,放入PC端解析顯示單元跟蹤信息緩存區域,通過(guò)跟蹤信息普通查詢(xún)解析機制,將以X開(kāi)頭并以X結尾的完整跟蹤信息解析出來(lái)。其中每個(gè)跟蹤信息緩存區尾部都設置一個(gè)保護數據區,保護區長(cháng)度為單條信息最大長(cháng)度L。

  該方案通過(guò)備份緩存機制解決了數據丟失問(wèn)題,保證了跟蹤信息輸出的連續性和完整性。但由于備份緩存向全局跟蹤緩存進(jìn)行跟蹤信息回拷過(guò)程,要大量占用ARM處理器CPU資源,導致該方案在對嵌入式系統運行速率要求高的環(huán)境中運行效率較低。

  結語(yǔ)

  針對現有的跟蹤軟件運行速率低、跟蹤信息亂序、丟失嚴重等情況,提出了兩種解決方案。一種是在A(yíng)RM端采取物理連續存儲方式進(jìn)行編碼,在PC端通過(guò)遞歸調用算法對嵌套跟蹤信息進(jìn)行重新組裝,最后將解析后完整的碼流轉化為可見(jiàn)字符串輸出。此方案適用于對ARM子系統運行速率要求較高,且PC端可用資源充足的軟件跟蹤系統。另一種方案是在A(yíng)RM端將高級任務(wù)跟蹤信息寫(xiě)入備份緩存,再通過(guò)數據回拷方式將備份緩存中的跟蹤信息寫(xiě)入全局跟蹤信息緩存區域。該方案在PC端解碼時(shí)只需查詢(xún)跟蹤頭標識進(jìn)行解碼,并將解析后連續的碼流轉化為可見(jiàn)字符串輸出,適用于對嵌入式系統運行速率要求不高且PC端資源有限的軟件跟蹤系統。

  以上兩種方案均能保證輸出跟蹤信息的連續完整性,解決了Nucleus實(shí)時(shí)操作系統下低優(yōu)先級任務(wù)會(huì )被高優(yōu)先級任務(wù)搶占,從而可能出現的跟蹤任務(wù)沖突而導致的跟蹤信息相互覆蓋、亂序等問(wèn)題,為軟件開(kāi)發(fā)人員分析定位問(wèn)題提供了更可靠的嵌入式軟件實(shí)時(shí)跟蹤系統,提高了其分析解決問(wèn)題的效率。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 嵌入式 跟蹤調試系統 JTAG

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>