我們有一個小的嵌入式系統,沒有任何視頻或串口(即我們不能通過printf輸出文本)。
我們希望通過初始化序列來跟蹤我們代碼的進度。
是否有一些簡單的事情可以幫助我們做到這一點。
它沒有運行任何操作系統,並且硬件平臺有些可定製。可以使用什麼簡單的方法來調試沒有串口或視頻的嵌入式處理器?
回答
最簡單的最具擴展性的解決方案是狀態LED。根據操作切換LED,無論是二進制形式還是某些操作發生時,如果您可以縮小焦點。
最強大的將是一個硬件JTAG設備。您甚至不需要設置斷點 - 只需停止應用程序並檢查內存狀態可能就足夠了。請注意,某些硬件平臺不支持「奇特」選項,如內存手錶或硬件斷點。前者通常伴隨着不斷停止處理器和讀取存儲器(將10MHz系統變成1kHz系統),而後者有時使用代碼替換(用不同的跳轉代替目標指令),有時會掩蓋其他問題。請注意這些問題以及它們適用的嵌入式處理器。
有,你可以聘請,以幫助調試幾個策略:
如果你有輸出引腳可用,你可以連接起來,以發光二極管(或示波器),並切換輸出引腳高/低指示代碼中已經達到了某些要點。
例如,1個眨眼可以被程序加載,2眨眼foozbar初始化,3眨眼是接受輸入...
如果有可用的多條輸出線,則可以使用一個7段LED傳達更多的信息(數字/字母而不是眨眼)。
如果您有能力讀取內存並獲得一些RAM,則可以使用sprint函數執行類似printf的調試,但不是轉到屏幕/串行端口,而是寫入內存。
雖然設置麻煩,但JTAG調試器也是一個選項。
如果您沒有JTAG,其他人建議的LED是一個好主意 - 儘管您最終會在測試/重建週期中嘗試追蹤問題。
如果你有更多的時間,備用硬件引腳和內存空閒,你總是可以低速串行接口。我發現過去非常有用。
這取決於您正在嘗試執行的調試類型 - 特別是在您使用臨時跟蹤方法之後,或者您嘗試提供可用作狀態指示的工具時項目(或產品)的壽命。
對於其中一種情況,深入的源跟蹤和調試時,在線調試器(例如.jtag)會非常有幫助。然而,當你的調試需要設置斷點和調查內存和寄存器時,它們是最有幫助的 - 在處理時間緊迫的問題時,這幾乎沒有什麼好處。
如果您需要確定程序狀態而不會對系統的執行產生重大影響,那麼使用連接到備用I/O引腳的LED將會很有幫助。這些也可以用作數字存儲示波器(DSO)或邏輯分析儀的輸入。 通過選擇可在DSO上識別的獨特脈衝模式,可以使此技術更加強大。
對於更多功能的調試工具,串口是一個很好的解決方案。爲了節省成本和PCB空間,您可能會發現使用包含RS232轉換器的插入式模塊很有用。
如果您試圖提供更長期的狀態指示作爲產品正常操作的一部分,LED仍然是一種便宜的簡單方法。然而,在這種情況下,最好選擇足夠慢的脈衝模式,以便通過視覺檢查輕鬆識別。隨着時間的推移,你將會學到一種代表「正常」行爲的特定模式。
其他人已經提出了使用輸出引腳的一些不錯的主意,所以我不會建議,儘管它可能是一個非常好的解決方案,並且非常划算。如果您的預算和目標處理器支持它,那麼硬件跟蹤系統(舊式仿真器或具有總線監聽跟蹤支持的花式BDM)對於此類事物可能非常有用。儘管如此,它非常昂貴。
您可以使用來自系統IO引腳的位反轉來輕鬆模擬串行通信(UART)。將它連接到卡的一個引腳上,並連接到一個RS232轉換器(TTL到RS232轉換器很容易購買或構建),這轉到您的PC的串行端口。
我從來沒有想過要對接口進行一下位反轉。輝煌! – Benoit 2008-09-17 17:51:57
使用bit-banged軟件UART的想法很好,但是在編寫一個軟件時需要一些努力,而且你還需要一些空閒的定時器和中斷。如果您的硬件有任何其他未使用的串行接口(SPI,I2C,..),使用它們會更容易。使用小型微控制器,您可以將接口轉換爲RS-232。
如果你不得不進行位反轉,那麼製作一個同步串行可能是一個更簡單的選擇,因爲它對時序並不重要。
- 1. 有沒有什麼簡單的方法來「使用sfFacebookConnect
- 2. 有沒有更簡單的方法來處理來自tfrecords的批量輸入?
- 3. 有沒有簡單的方法來處理基地13(或通用基地N)?
- 4. 有沒有什麼簡單的方法可以用CakePHP使用Hoptoad?
- 5. 有什麼合理的簡單方法可以在Web瀏覽器上提供.avi和.wmv視頻嗎?
- 6. 以MVVM方式處理html5視頻標籤的正確方法是什麼?
- 7. 有沒有簡單的方法來使嵌套數組平坦?
- 8. 以通用方式嵌入YouTube視頻
- 9. 有沒有簡單的方法來使用F#可變結構
- 10. 有沒有什麼辦法可以在eclipse中調試spring批處理
- 11. xcode試圖嵌入視頻。沒有錯誤,但沒有視頻或者
- 12. 有沒有辦法以編程方式進入IntelliJ調試器?
- 13. 有沒有可以處理方法調用依賴性的設計模式?
- 14. 有什麼方法可以調試來自AJAX文章的調用?
- 15. 有什麼方法可以使嵌入式EJB容器更快啓動?
- 16. 有沒有一種簡單的方法來處理PHP的表單?
- 17. 簡單的方法來處理嵌套事務
- 18. 對於C#中的調試器可視化器有沒有什麼簡單的,類似於編輯C++的autoexp.dat?
- 19. 嵌入簡單的方式使用HTML,JavaScript或jQuery的
- 20. 有沒有簡單的方法來在elisp中調用函數?
- 21. 爲什麼沒有簡單的方法來使用Java中的Web服務?
- 22. 有沒有更簡單的方法來檢查以允許所有視頻格式?
- 23. 以編程方式嵌入Blip.tv視頻
- 24. 有什麼方法可以改變視頻的質量嗎?
- 25. 有沒有什麼辦法來簡化WebService的異步調用
- 26. 有沒有什麼方法可以使用'unset'作爲方法?
- 27. 有沒有更快的方式來處理嵌套linq查詢?
- 28. 有沒有更簡單的方法來取消嵌套數組?
- 29. 有沒有什麼辦法可以從視圖的值處理列標題?
- 30. 有什麼簡單的方法來格式化日期在PHP?
關於位反轉串行接口的好主意 – Benoit 2008-09-17 17:52:42