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链不够健壮吧。

你可能感兴趣的:(stm32)