STM32突然死机以及莫名奇妙错误的解决

问题描述:

在STM32程序开发过程中,原本代码正常,为了实现接下来的功能,增加了一个结构体数组后,调试过程中遇到32死机的情况。后来通过逐步排查发现注释了结构体数组,程序运行正常,于是将结构体数组换成若干个数组替代,发现又出现了问题,这次是在串口调试过程中,显示了莫名其妙的结果。


我们结构体及结构体定义数组定义如下:

#define max 100
struct m_data{
    
    
	u8 compute_flag;	//用于记录是否计算过的标志位
	float temp;			//若计算过则存储中间值
	float value;
};
m_data Data[max];

想要替换的数组定义如下:

float data[max]={
    
    0};
float temp[max]={
    
    0};
u8 compute_flag[max]={
    
    0};

原因分析:

由于每次问题的出现都是在我们定义了一个数组(无论是结构体数组还是普通数组)后出现的,我就开始思考是不是数组定义的有什么问题呢,一个数组除了类型是我们自己定义的以外,还有一个参数是我们定义的,没错就是数组的大小
后来,经过在网上查资料可以发现STM32的栈区大小只有1024Kb,在我们STM32的启动文件中我们可以看到栈区大小的定义:
在这里插入图片描述
当我们定义上述数组时,由于占用内存空间过大,导致栈无法存放我们的数组和临时变量,所以出现了死机和莫名其妙输出的情况。


解决方案:

将数组大小变小一点即可,例如:将数组大小修改为20

#define max 20
float data[max]={
    
    0};
float temp[max]={
    
    0};
u8 compute_flag[max]={
    
    0};

猜你喜欢

转载自blog.csdn.net/qq_42788340/article/details/109480504
今日推荐