现象:最近在用Keil对STM32的程序进行仿真时出现下面的现象。
1、仿真时,程序有时会跑飞,也就是说程序在执行一会儿就不知道执行到哪里了。
2、停止仿真时,程序会停在HardFault_Handler函数里的死循环while(1)中。
可能原因:由于定义变量太多,堆栈溢出
解决办法:将定义的局部变量尽量定义为全局变量。
理论原因:在C编译器中,局部变量和函数参数名是存在栈中的,全局变量和静态局部变量是存在静态区。局部变量太多,栈满了就会导致溢出。
现象:最近在用Keil对STM32的程序进行仿真时出现下面的现象。
1、仿真时,程序有时会跑飞,也就是说程序在执行一会儿就不知道执行到哪里了。
2、停止仿真时,程序会停在HardFault_Handler函数里的死循环while(1)中。
可能原因:由于定义变量太多,堆栈溢出
解决办法:将定义的局部变量尽量定义为全局变量。
理论原因:在C编译器中,局部变量和函数参数名是存在栈中的,全局变量和静态局部变量是存在静态区。局部变量太多,栈满了就会导致溢出。