我有一個運行在ARM uC上的VxWorks應用程序。如何確定一個任務破壞的原因,VxWorks?
首先讓我總結一下這個應用程序;
應用程序由第三方堆棧和網關應用程序組成。 我們已經實現了一個操作系統抽象層來支持操作系統依賴。
底層堆棧有自己的內存管理&控制工具,它將內存塊保存在一個雙向鏈表中。
例如;我們不直接執行malloc/new,free/delege。相反,我們調用OSA圖層的例程,它從OS獲取內存並將其放入列表中,然後將此內存返回給應用程序(例程:XXAlloc,XXFree,XXReAlloc)
當釋放內存時,我們再次使用XXFree。
其實這一塊是具有
-Magic數字指示開始和內存塊 -size用戶要求源於對齊問題是一個和下一個指針 分配 -size在現實中的末端結構 - 返回給應用程序的指向內存塊的指針。鏈接寄存器顯示應用程序xxAlloc被調用的位置。
使用此塊結構堆棧可以檢查塊是否損壞。
這是從Linux的,我們用它來 -create移植同樣,我們也pthread庫/終止線程(目前有22個線程) -synchronization對象(事件,互斥..)
有主要任務由taskSpawn調用,隨後此任務創建其他線程。
這是對應用程序及其VxWorks接口的描述。
的問題是:
任務中的一個突然被通過的VxWorks沒有給出關於什麼是錯的信息銷燬。 我也有一個jtag調試器,它碰到了VxWorks的taskDestoy()例程,但調用堆棧不會給出任何信息,既不是PC或r14。
我懷疑在代碼的特定程序,用戶龐大的xxAlloc完成,但出現問題 非常分散給不知道,我可以把它映射到源代碼。
我認爲操作系統檢測到異常並且默默執行它的處理。
任何幫助將是巨大的
問候
建議重新格式化問題一下:在開始和後面的信息問題陳述。這樣讀者就不需要閱讀整個故事來了解它是否匹配。 – Adriaan 2009-08-06 08:05:19