嵌入式軟件跟蹤調試技術的研究與設計
3 跟蹤優化方案二
3.1 備份緩存管理機制
備份緩存管理機制采用含跟蹤頭和跟蹤信息的跟蹤信息幀格式,將跟蹤信息寫入一個大小為N的全局跟蹤信息緩存中。為避免在任務切換頻繁時當前任務被高優先級任務打斷造成數據丟失,申請一個嵌套深度為M的備份緩存來存放高優先級任務跟蹤信息。其中,備份緩存區域每塊子緩存的長度均為m,設置跟蹤忙碌標識位,初始值為0。跟蹤源通過調用跟蹤系統提供的跟蹤接口函數,將跟蹤忙碌標識置1,并將當前跟蹤源跟蹤信息填入全局跟蹤信息緩存。完成當前跟蹤信息寫入操作后,將跟蹤忙碌標識置0。若當前跟蹤源在進行寫入操作,即跟蹤忙碌標識為1時,高優先級任務調用跟蹤接口,則將高級任務的跟蹤信息寫入備份緩存中,當前跟蹤源繼續進行未完成的寫操作。每次寫完當前跟蹤信息,檢查備份緩存中是否有數——若有,則將備份緩存中的跟蹤信息拷回至全局跟蹤信息緩存中(跟蹤緩存場景如圖6所示),即在當前任務跟蹤信息寫入跟蹤信息緩存時,若高級任務到來,則將高級任務跟蹤信息進行封裝并寫入備份緩存。當前跟蹤結束寫入操作輸出成功后,檢查備份緩存中是否存在跟蹤信息——若有,則將備份緩存中的跟蹤信息回拷至全局跟蹤信息緩存中,從而保證全局跟蹤信息緩存中跟蹤信息的連續性。本文引用地址:http://www.j9360.com/article/149589.htm
3.2 傳輸控制機制
同跟蹤優化方案一中傳輸控制機制。
3.3 普通查詢解析機制
根據跟蹤緩存管理機制二,由于全局跟蹤信息緩存中跟蹤信息呈完整連續分布,解碼方式采用遍歷查詢方式。
首先,在PC端跟蹤信息接收單元開辟一個環形隊列(即解析前循環緩存),用于存放從串口接收的跟蹤信息。
然后在PC端解析顯示單元開辟一個解析后循環緩存,用于存放解析后的完整跟蹤信息。使用讀指針遍歷解析前循環緩存,查詢到以跟蹤頭標識X開頭的字符串,將其后的完整跟蹤信息寫入解析后循環緩存中,直至下一次遇到跟蹤頭標識X,記錄解析前循環緩存讀索引并保存當前解析后循環緩存寫索引。循環以上操作,將解析前循環緩存中的跟蹤信息依次解析,并放入解析后循環緩存中。
最后將解析后循環緩存中解析完成的完整跟蹤信息碼流轉換成為可見字符,在PC機上顯示輸出。
4 性能分析比較
4.1 跟蹤優化方案一
將跟蹤信息按物理連續存儲方式存儲數據,即跟蹤源在單條跟蹤信息組裝過程中,通過全局寫指針控制跟蹤信息寫入。所有跟蹤點均跟蹤當前優先級秩序,對跟蹤信息緩存區進行寫操作,保證僅有一個跟蹤信息緩存,且跟蹤源相互搶占時根據優先級高低對跟蹤緩存進行寫操作。該機制跟蹤緩存中的跟蹤信息呈現嵌套、打斷的不完整碼流。
跟蹤信息發送機制采取跟蹤接口函數中觸發傳輸裝置搬移數據。在傳輸控制單元,通過配置DMA總線,將全局跟蹤信息緩存中的跟蹤信息搬移至串口寄存器中。PC端接收裝置從串口寄存器中取出數據,放入PC端解析單元緩存空間,通過跟蹤信息遞歸解析機制,將不完整的跟蹤信息解析為完整連續的跟蹤信息。其中每個跟蹤信息緩存區尾部都設置一個保護數據區,保護區長度為單條信息最大長度L。
該方案解決了跟蹤信息丟失問題,在PC端解析顯示單元對不連續碼流進行解碼。由于該機制在嵌入式跟蹤緩存單元中采取物理連續存儲數據方式,降低了跟蹤軟件對ARM系統資源的消耗,保證了在高速運行情況下跟蹤系統對ARM處理器CPU的消耗盡可能低。從而避免在高速運行的系統中,由于跟蹤系統占用大量CPU導致系統運行速率低。該方案適用于對ARM子系統運行速率要求較高的終端系統。
4.2 跟蹤優化方案二
在嵌入式跟蹤信息緩存單元申請一個全局跟蹤信息環緩存空間,同時申請一組備份緩存。寫指針沖突時,高級任務的跟蹤信息被寫入備份緩存中,當前跟蹤源繼續將其跟蹤信息寫入全局跟蹤信息緩存。每次寫完當前條跟蹤信息,檢查備份緩存中是否有數——若有,則將其拷回至全局緩存中。該機制根據任務優先級高低來管理寫指針,解決了寫指針沖突導致跟蹤信息不連續的問題。
在傳輸控制單元,通過配置DMA總線,設置發送目的地址及長度,將全局跟蹤信息緩存中的跟蹤信息搬移至串口寄存器中。PC端接收裝置從串口寄存器中取出數據,放入PC端解析顯示單元跟蹤信息緩存區域,通過跟蹤信息普通查詢解析機制,將以X開頭并以X結尾的完整跟蹤信息解析出來。其中每個跟蹤信息緩存區尾部都設置一個保護數據區,保護區長度為單條信息最大長度L。
該方案通過備份緩存機制解決了數據丟失問題,保證了跟蹤信息輸出的連續性和完整性。但由于備份緩存向全局跟蹤緩存進行跟蹤信息回拷過程,要大量占用ARM處理器CPU資源,導致該方案在對嵌入式系統運行速率要求高的環境中運行效率較低。
結語
針對現有的跟蹤軟件運行速率低、跟蹤信息亂序、丟失嚴重等情況,提出了兩種解決方案。一種是在ARM端采取物理連續存儲方式進行編碼,在PC端通過遞歸調用算法對嵌套跟蹤信息進行重新組裝,最后將解析后完整的碼流轉化為可見字符串輸出。此方案適用于對ARM子系統運行速率要求較高,且PC端可用資源充足的軟件跟蹤系統。另一種方案是在ARM端將高級任務跟蹤信息寫入備份緩存,再通過數據回拷方式將備份緩存中的跟蹤信息寫入全局跟蹤信息緩存區域。該方案在PC端解碼時只需查詢跟蹤頭標識進行解碼,并將解析后連續的碼流轉化為可見字符串輸出,適用于對嵌入式系統運行速率要求不高且PC端資源有限的軟件跟蹤系統。
以上兩種方案均能保證輸出跟蹤信息的連續完整性,解決了Nucleus實時操作系統下低優先級任務會被高優先級任務搶占,從而可能出現的跟蹤任務沖突而導致的跟蹤信息相互覆蓋、亂序等問題,為軟件開發人員分析定位問題提供了更可靠的嵌入式軟件實時跟蹤系統,提高了其分析解決問題的效率。
評論