初级会员

- 积分
- 90
- 金钱
- 90
- 注册时间
- 2017-8-2
- 在线时间
- 19 小时
|
1金钱
外部 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]
就不会有事了,这是为什么?
|
最佳答案
查看完整内容[请看2#楼]
1、函数内部定义数组u8 buf[4096];从栈上分配,动态分配,系统管理;栈一般设置不大,栈一般用于函数压栈、访问量大占用空间小的变量等;一口气取分配4k栈,肯定爆了;裸机的话在启动文件可以设置堆和栈的大小;
2、malloc从堆上分配内存,动态分配,程序员管理;
3、外部、全局变量、静态变量,从全局取分配内存,编译时已经确定。
回炉重炼C语言内存分配知识。
|