stm32程序遇到OSStartHang的問題解決方法總結

遇到的問題,項目中主控程序運行一段時間後,時間有時長有時短便會進入HardFault,通過調試發現進入HardFault的原因是程序進入了OSStartHang異常,網上大部分貼子的介紹如下:

1、因爲STM32本身的異常中斷PendSV_Handler替代了UCOS的異常中斷OSPendSV,使其不能正常執行。這樣我們就需要更改PendSV_Handler爲OSPendSV以讓中斷正常。

方法如下:

—startup_stm32f10x_cl.s中定義了中斷向量表(中斷函數的入口地址)
—stm32f10x_it.c 中斷服務函數的C語言代碼。
在startup_stm32f10x_cl.s中有兩段代碼如下:
DCD PendSV_Handler
DCD SysTick_Handler
在stm32f10x_it.c中的服務函數如下
void PendSV_Handler(void)
void SysTick_Handler(void)
1:ucos系統中斷函數更名爲PendSV_Handler,註釋掉stm32f10x_it.c文件中void PendSV_Handler(void)函數。
2:在void SysTick_Handler(void)函數中添加如下代碼:
void SysTick_Handler(void)
{
OS_EXIT_CRITICAL();
OSTimeTick(); // Call uC/OS-II’s OSTimeTick()
OSIntExit(); // Tell uC/OS-II that we are leaving the ISR
}

2、如果你是連JTAG調試時偶爾出現的這種情況,不連JTAG板子自己跑時沒問題,那麼你可以忽略這個問題,因爲CONTEX-M3的內核用JTAG調試時偶爾會這樣,具體原因不詳,可能是JTAG鏈不夠健壯吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章