函数内外数组

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
2019-08-14 08:04
1、函数内部定义数组u8 buf[4096];从栈上分配,动态分配,系统管理;栈一般设置不大,栈一般用于函数压栈、访问量大占用空间小的变量等;一口气取分配4k栈,肯定爆了;裸机的话在启动文件可以设置堆和栈的大小;
2、malloc从堆上分配内存,动态分配,程序员管理;
3、外部、全局变量、静态变量,从全局取分配内存,编译时已经确定。
回炉重炼C语言内存分配知识。

一周热门 更多>