函数内外数组

2019-08-14 04:52发布

外部 Flash 写函数,如果我在函数内直接定义数组:
[mw_shl_code=c,true]void EXFLASH_WriteData(u8 *p, u16 len, u32 addr)
{
        u8 buf[4096];...;
}[/mw_shl_code]
程序会卡在这边(工程还有mmalloc,FATFS等);
我是觉得这里数组存在栈里,所以爆栈了?

如果我放外面:
[mw_shl_code=c,true]u8 pbuf[4096]
void EXFLASH_WriteData(u8 *p, u16 len, u32 addr)
{
        u8 *buf = pbuf;
}[/mw_shl_code]



就不会有事了,这是为什么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
Acuity
1楼-- · 2019-08-14 08:04
1、函数内部定义数组u8 buf[4096];从栈上分配,动态分配,系统管理;栈一般设置不大,栈一般用于函数压栈、访问量大占用空间小的变量等;一口气取分配4k栈,肯定爆了;裸机的话在启动文件可以设置堆和栈的大小;
2、malloc从堆上分配内存,动态分配,程序员管理;
3、外部、全局变量、静态变量,从全局取分配内存,编译时已经确定。
回炉重炼C语言内存分配知识。
wxjhby
2楼-- · 2019-08-14 10:18
写里面是局部变量,写外面是全局变量,两个变量的位置不一样,更详细的看有没有大神来解释一下   用IAR可以看每个变量分配的地址,不知道KEIL怎么弄
我好像是神啊
3楼-- · 2019-08-14 11:37
在定义前面加个static  静态变量试试
hstar
4楼-- · 2019-08-14 14:25
 精彩回答 2  元偷偷看……
尚磊12323
5楼-- · 2019-08-14 18:55
如果你用了ucos,,,建议增大栈的空间。

一周热门 更多>