STM32里面全局变量y的值无缘无故被改变?

2019-07-20 07:58发布

好的,我贴一下关键代码:
u16 y[2048];
for(i=0;i<2048;i++){
y=4096/3.3*(sin(2*3.14*26000*i/100000)+1);
}
for(i=0;i<1024;i++){
buf01=y;
}
u16 buf01[1024];
float fft_inputbuf[2048];//在一个函数cre()里面定义的局部变量
接下来是cre()里面调用下面这个函数:
CCopyFill(u16 *buf01,float *fft_inputbuf){int i=0;
        float k=3.3/4096;
        for(i=0;i<BUFFERSIZE;i++){                                                        //éú3éD&#197;o&#197;DòáD
                                         fft_inputbuf[2*i]=(float)buf01*k;                //éú3éê&#228;è&#235;D&#197;o&#197;êμ2&#191;
                                         fft_inputbuf[2*i+1]=0;                                        //Dé2&#191;è&#171;2&#191;&#206;a0
                                printf("%d ",i);

        }

}

问题来了,在循环里到该i等于220的时候,全局变量数组y的值变了,可是在cre()函数和CCopyFill()函数里本页面对y组任何处理或者改变啊,
而且CCopyFill()里面也跟全局变量y没有任何关系,cre()函数里没有对y的指针进行任何操作,只有将y的值赋给其他:
for(i=0;i<1024;i++){
buf01=y;
}
下面附上内存变量表:

代码较多,我大概贴了一下,大佬看一下,哪里出了问题?
@正点原子

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
szczyb1314
1楼-- · 2019-07-20 09:46
 精彩回答 2  元偷偷看……
进无止境6A
2楼-- · 2019-07-20 11:47
 精彩回答 2  元偷偷看……
进无止境6A
3楼-- · 2019-07-20 16:29
szczyb1314 发表于 2018-5-29 11:28
你的启动文件里开辟的栈区大小多少?“float fft_inputbuf[2048];//在一个函数cre()里面定义的局部变量”这 ...

Stack_Size和Heap_Size最大能改到多少?它们分别代表什么?
szczyb1314
4楼-- · 2019-07-20 16:56
 精彩回答 2  元偷偷看……
szczyb1314
5楼-- · 2019-07-20 22:04
调用函数是所有函数内部的局部变量存储在栈区,函数内部的数组太大又多容易导致栈区溢出发生错误。使用malloc分配的内存存储在堆区,用malloc时设置的堆区的大小要合适,malloc(2048)分配2048个byte,你的堆区肯定要比2048要大才行。
进无止境6A
6楼-- · 2019-07-21 01:20
szczyb1314 发表于 2018-5-29 15:35
调用函数是所有函数内部的局部变量存储在栈区,函数内部的数组太大又多容易导致栈区溢出发生错误。使用mall ...

ram.png
请问下这里的堆和栈最大能改到多少?在哪里看?上图是我的开发板的资源,谢谢

一周热门 更多>