STM32的堆栈(Heap&Stack)空间

来源:互联网 发布:淘宝学生平价女装店 编辑:程序博客网 时间:2024/05/29 08:13

最近做的一个项目遇到一个很莫名的错误,程序运行到某一部分时便会卡死,分析后,感觉在逻辑上并无错误,但是就是会卡死,而且不是偶然。
后来在网上查找资料怀疑是内存溢出,然后调试发现是两个函数中的的局部变量申请的内存空间太大,所以错误应该是栈溢出了。将这两个变量使用malloc申请堆段空间完美解决。


下面是对STM32的堆栈(Heap&Stack)小结:

  • 内存分配空间
    • 内核保护区
    • 栈段
    • 堆段
    • 数据区
    • 代码区

  1. 代码区 :静态区
    常量(const)
    函数代码逻辑

  2. 数据区:静态区
    全局变量
    局部变量+static

  3. 堆段:动态区,管理者是程序员
    malloc申请的空间

  4. 栈段:动态区,管理每个子函数的空间,管理者是操作系统
    局部变量

  5. 内核保护区

STM32的启动文件中,开始便定义了堆栈的空间大小:

启动文件部分截图

Stack_Size 0x400 => 100 0000 0000 => 1024Byte =>1KByte
Heap_Size 0x200 =>10 0000 0000 =>512Byte

1 0
原创粉丝点击