我調試使用的IAR工作臺工具鏈的嵌入式系統的一些奇怪的ARM例外。有時候,當一個異常被捕獲時,SVC_STACK被報告超出範圍(超出範圍!)這是相關的,還是僅僅是J-Link JTAG調試器的工件?什麼是SVC_STACK用於?它被設置爲0x1000的大小,但是當它超出範圍時,它在我們的堆區域中是正確的。謝謝!輸入ARM9 SVC_STACK超出範圍?
3
A
回答
4
ARM的SVC模式發生異常時(未IRQ或FIQ - 快速IRQ)。它也可以通過設置CPRS寄存器在非用戶模式下執行的代碼直接輸入,但我認爲除了初始化系統時這種情況並不常見。
當異常發生時,處理器切換到SVC堆棧,它必須被設置在系統的初始化非常早。我猜你的初始化代碼沒有正確設置SVC堆棧,或者有可能是其中一個異常處理程序編碼不正確,並且正在摧毀堆棧。
第三種可能性是,您使用的是建立ARM棧它希望的方式(基本上覆蓋了IAR的初始化代碼可能設立SVC堆棧)的RTOS。如果是這樣的話,它可能是一切正常,但IAR調試認爲SVC堆棧超出範圍 - 調試器會得到鏈接器配置文件中的信息 - 但如果東西堆更改爲內存的另一個領域,那麼調試器會感到困惑。
使用RTOS時,IAR中的用戶模式堆棧始終發生在我身上 - 堆棧是基於任務控制塊進行分配的,調試器認爲它不在CSTACK段中,調試器會發出刺激性警告。有一些項目配置設置可以用來消除警告,但我不記得我的頭頂是什麼 - 我們很少對它感到困擾,只是隨着噪音而生活。
你需要驗證棧'堆在堆'的區域是有效的 - 如果你沒有明確的代碼,這很可能是錯誤的(或者你可能會需要詢問你的RTOS供應商)。
ARM Architecture Reference Manual(ARM ARM)可從arm.com免費獲得,並詳細瞭解ARM堆棧的工作原理。另一個很好的參考是Andrew Sloss等人的ARM System Developer's Guide。
相關問題
- 1. PreparedStatement拋出索引超出範圍時,它不超出範圍
- 2. RowIndex超出範圍
- 3. 蟒:超出範圍
- 4. Javascript:超出範圍?
- 5. android:pointerIndex超出範圍
- 6. NSNumber超出範圍?
- 7. IndexError ...超出範圍,
- 8. NSURL超出範圍
- 9. SDL_image超出範圍
- 10. googletesting超出範圍
- 11. arraylist超出範圍
- 12. Java超出範圍
- 13. NSDate超出範圍
- 14. List.nub超出範圍
- 15. nsstring - 超出範圍
- 16. 索引超出範圍(範圍可變)
- 17. deleteCharactersInRange:範圍或索引超出範圍'
- 18. NSString範圍或索引超出範圍
- 19. Python:索引超出範圍
- 20. 「sys.argv中[X]」 超出範圍
- 21. Gridview:索引超出範圍
- 22. ImageView超出版面範圍
- 23. QList索引超出範圍
- 24. 的UITableView IndexPath.row超出範圍
- 25. 子腳本超出範圍
- 26. SQL:超出範圍值
- 27. #list索引超出範圍
- 28. SoundPool速率超出範圍
- 29. 索引1超出範圍
- 30. Perl atan2值超出範圍
謝謝 - 正確的金錢。從IAR - 「EWARM 4.42版的堆棧插件不支持RTOS,所以它總是會抱怨堆棧溢出,如果你使用的是RTOS,你應該禁用堆棧插件。該死 - 我希望是那樣 - 更多的調試! – Jeff 2009-08-31 20:08:06