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-21 07:03
 精彩回答 2  元偷偷看……
szczyb1314
2楼-- · 2019-07-21 11:28
szczyb1314 发表于 2018-5-29 16:35
堆、栈区分配在启动文件中;
具体的大小根据你的使用来定义的。一般分配在内部ram,总和肯定不超过内部ram ...

上图中有个表述错误,栈顶指针写错了,栈顶指针应该是0x2000370+0x200.
0x2000370是栈底指针,32是小端模式
Psheng
3楼-- · 2019-07-21 17:07
本帖最后由 Psheng 于 2018-5-30 08:57 编辑

在启动代码中,在调用systenInit()函数之前    写一个 ldr sp,=0x68000000+0x40000
把栈放到外部sdram看看

一周热门 更多>