函数内部直接定义数组与分配动态内存的区别

2019-07-20 14:57发布

void func_1(void)
{
    u8  temp[256];
    ……
}

void func_2(void)
{
    u8 *temp;

    temp = (u8*)mymalloc(SRAMIN,sizeof(u8)*256);
    ……
    myfree(SRAMIN,temp);
}

如上所示,按照我的理解,这两个函数应该并没有区别,无论是直接定义一个数组,还是下面的动态内存分配,其结果都是在内存中
开辟一块256的空间,函数结束后,清除该空间。

但实际测试时发现,用分配动态内存的方式,可以正常运行。
但如果是直接定义数组的话,则程序会卡死,跳转到HardFault_Handler
有大神能够帮忙指点一下么?

PS. 这是添加在uCOSiii中一个task中的函数,该task 堆栈设置的是1024 ,是否跟这个有关系呢?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
taizonglai
1楼-- · 2019-07-20 15:35
 精彩回答 2  元偷偷看……
异曲
2楼-- · 2019-07-20 17:02
zuozhongkai 发表于 2017-4-21 18:19
你需要去学习堆和栈的区别!这两种方法肯定都是开辟一段内存!但是如果直接在函数里面定义一个数组的话这个 ...

哦,明白了。看来我这方便的知识还有很大欠缺,多谢多谢!

一周热门 更多>