2009-11-25 104 views
5

我具有嵌入板具有32微控制器和定製的操作系統,高速跟蹤

  • 不幸的是,目前,連接 到PC只有通過串行 端口,
  • 內部存儲器限於512KB。
  • 有AT-至少10個任務在 系統

問題,

  • 我想捕捉的順序 其中任務切換髮生,
  • ,當我嘗試寫進入 內存,它溢出~~
  • 而當我嘗試通過 串行端口發送它時,系統行爲 的變化(因爲串口速度很慢)

沒有像NAND FLASH這樣的永久性存儲,

  • 你們能想到一些想法嗎?

如果沒有辦法用串口,

  • 你們可以推薦一些其他 接口或大於串口。

回答

5

您可能想要確定記錄時RAM溢出的原因,如果您僅記錄需要查看的內容,則不需要太多記錄。您可以登錄到循環緩衝區以防止溢出。使用Ram記錄您可能可以以接近真實速度運行。記錄到通信鏈路增加了等待時間,中斷和任務切換到系統。

不要從頭開始記錄所有內容。只記錄日誌以瞭解問題何時發生。一旦知道問題發生的時間,只要輸入問題部分,就會記錄更多細節。

如果您真的想立即解決問題,請獲取Green Hills Trace pod。您的硬件必須設計成允許Pod連接,而且價格非常昂貴。但結果令人難以置信......

1

首先計算您將有多少個任務切換並與串行速度進行比較。也許這是不可能推出這麼多的數據?考慮比

  • USB - 可達480Mb/s的
  • RS485 - 應以35MB/s的
  • I2C給你在100Kb/s的 - 圍繞在100Kb/s給出

如果序列是足夠的,比可能與緩存?首先寫入內存並且是單獨的任務從塊中的內存中獲取數據發送到串行。查找諸如circular buffering之類的內容以避免鎖定。

2

我不知道你用的是什麼平臺,但...

的ARM:■有一個名爲ETM塊,即解決您的問題。 並且使用Lauterbach的硬核調試器,您可以使用該塊。

缺點是成本高,大致相同的小型新車:)

而且我不知道,如果你的硬件有ETM塊...

1

你需要運行軌跡時的實時行爲?我的意思是,是否可以登錄RAM直到緩衝區(接近)滿,然後進入關鍵部分,防止應用程序進行任務切換和服務中斷,並通過串行線路轉儲緩衝區。這將暫時阻止應用程序的運行,但取決於您正在運行的測試,它可能是可以接受的。 任何通過串口,USB等實時跟蹤都會影響應用程序的行爲,因此不確定您測量的內容是否相關。

你可以做的另一件事情是(如果你還沒有做的話)就是使記錄儘可能小,例如:每個任務有1個字節,最重要的半字節是舊任務的任務ID,最不重要輕咬新任務的任務ID。這樣你就可以在512KB的內存中覆蓋很多任務切換。

5

如果您可以使用微控制器上的輸出端口而不會干擾其他硬件太多,則可以輸出當前任務編號並使用邏輯分析儀進行採集。

+0

就我個人而言,我認爲使用邏輯分析器來調試軟件是浪費時間,但我已經做了幾次自己...當用完選項。 – Gerhard 2009-11-26 05:28:55

+1

我喜歡它是即時的並且很少干擾時間。這不是複雜的邏輯錯誤的選擇方法,但是爲了解決時序問題,這很好。 – starblue 2009-11-26 10:07:06

3

比Johan強調的ARM ETM稍輕一點,MIPI System Trace Protocol就是專爲這種跟蹤活動而設計的。它專爲儀器跟蹤而設計,典型的實現通過四位端口提供約500 Mbit/s的跟蹤帶寬。

但是,您的主板不太可能支持它。 :-(另外,你需要一個跟蹤接收器,它可以再次不小的開支車的價格(勞特巴赫有一個)。

3
  • 當我嘗試寫到RAM,它溢出~~

你在登錄和多大的緩衝區是否允許?不知道你如何實現這一點,很難勸,但大概是多少,你可以做些什麼來優化內存記錄。

如果在每個上下文切換您記錄任務ID和時間電子郵票(例如每個事件3個字節),您應該每千字節獲得341次上下文切換。在許多系統中,這將是一個重要的時期,並且記住只有1K的緩衝區。如果您記錄的中斷也可能更昂貴,就像記錄所有系統調用而不僅僅是上下文切換一樣。也許你可以在日誌中實現一個過濾器,所以它只記錄任務或感興趣的事件。您也可以實施事件觸發器,以便在發生此類事件時(以及感興趣事件已發生,因此傳輸行爲不會侵入您的調查)時,記錄的數據會自動轉儲到您的串行端口。您還應該將緩衝區實現爲循環緩衝區,以便不會溢出,最舊的數據將被簡單地丟棄以爲新的區域騰出空間,以便在發生觸發事件時,將所有事件信息導向到該緩衝區。

2

您是否可以訪問任何gpio或測試點?根據您實際切換的任務數量,您可以爲每個任務切換器設置一個gpio,並使用示波器或邏輯分析儀進行觀察。瞭解問題任務的基本切換和性能就足夠了,它將比調試器便宜(至少部分成本和人工,如果你有權訪問並知道如何編程gpio)這可能是足夠的信息解決問題。

+0

+1一個特定平臺的好主意。但是,您能否給我一個通用的解決方案,我們可以在硬件平臺上進行推廣。 – Alphaneo 2009-12-08 01:47:05

+0

@Alphaneo - 同意GPIO對某個平臺有些特定。但是,如果不是大多數嵌入式微控制器/微處理器,那麼GPIO就是如此。您可以使用通用GPIO接口進行抽象,並將每個平臺的特定hw訪問權限隔離爲一個文件。 – simon 2009-12-08 01:56:54

2

當我試圖把它雖然串行端口,系統行爲的變化(如串口慢)

這使得它聽起來好像你正在做阻塞寫入到串行端口(如果我的猜測是錯誤的,我很抱歉)。

串行端口可能很慢,但是如果您使用基於中斷的TX,它應該會對您的系統產生較小的影響。也就是說,將數據寫入循環緩衝區,然後有一個串行TX中斷例程來從緩衝區獲取字節並在後臺傳輸它們。

在57,600 bps,8-N-1,您可以傳輸高達每秒5,760字節。如果您的任務切換器生成一個2字節時間戳和一個1字節任務ID,那麼您可以每秒追蹤多達1,900個任務切換。但是您可能想要對其進行設計,例如使用COBS,這意味着每個記錄5個字節,因此您可以跟蹤每秒最多1,100個任務切換。

+0

謝謝你的回答。我有一種感覺,我們只會在沒有做其他工作的情況下通過港口發送數據?這是錯的嗎?。順便說一句,任務切換要快得多,並且要按照微秒的順序:-( – Alphaneo 2009-11-26 01:25:17

+0

對不起,我不太瞭解你的問題。 – 2009-11-26 02:58:08

+0

你是說你每秒有10萬個任務切換嗎? – 2009-11-26 02:59:16