环境:
软件:keil uvision5,ucosii2.86
硬件:stm23f407ZG(用FPU),ST-link,时钟是25MHz外部晶振,低速是32.768KHz
问题:在OSStart()函数处死掉,单步查看是在os_cpu_a.asm文件OSStartHighRdy()函数处最后一句 B OSStartHang ;should never get here
死掉。 说明系统配置等什么原因导致崩溃
死在 B OSStartHang ;should never get here
原本程序是不应该到这来来的,应该总是在循环中,但现在走到这来了。说明程序走出了循环。是什么原因导致走出循环呢?
在网上百度过。网友的解决方法总结如下:
1 时钟配置错误。检查,我这里没有问题,SYSCLK=168MHz,HCLK=168MHz,PCLK2=168/2=84MHz,PCLK1=168/4=42MHz。同时在stm32f4xx.h中将HSE改为2500000.应该没有问题。分别在stm32f4xx.h,system_stm32f4xx.c中完成。
2 PendSV问题。启动文件startup_stm32f40_41xxx.s中PendSV_Handler,对应的ucosii port文件夹下OS_CPU.h有声明函数void PendSV_Handler(void);
同时在OS_CPU.h将声明函数void Systick_Handler(void);删除。该函数在stm32f4xx_it.c中实现。
void SysTick_Handler(void)
{
OSIntEnter(); //½øÈëÖжÏ
OSTimeTick(); //µ÷ÓÃucosµÄʱÖÓ·þÎñ³ÌÐò
OSIntExit(); //´¥·¢ÈÎÎñÇл»ÈíÖжÏ
}
3 os_CPU_C.c文件中的OS_STK *OSTaskStkInit()函数,检查也没有什么问题。
4 堆栈设定。三个任务,startTask,TasK1,Task2,优先级分别是5,15,16,堆栈大小均为64。Task1时延50ms,Task2时延1s。感觉也没有什么问题。
5 keil设置。
上述前四项均检查没有什么问题。但就是无法运行。无操作系统正常运行。
现附上工程程序。恳请那位高手帮忙看看,到底问题出在什么地方。谢谢。