STM32栈stack 堆栈 注意事项 Stack_Size EQU 0x00000400

标题一、看STM32启动文件,例如startup_stm32f10x_cl.s

一般默认是Stack_Size EQU 0x00000400
表示工程中栈大小是1024字节,即局部变量不能大于1024字节。
如果函数中出现局部变量例如u8 temp[4000];
启动文件的栈应该修改为Stack_Size EQU 0x00001000 ,此时栈是4096字节。

特别注意:一个函数中定义的所有局部变量,加起来不能大于工程的栈大小,否则程序肯定会出现内存溢出,导致复位。

备注:栈stack是一块程序运行时用来存储临时变量的内存RAM空间。栈一般静态分配,并且后进先出,栈的生命周期从程序的起始直到程序结束。一个函数返回,其用到的栈空间就被释放给后续函数使用。

标题二、判断STM32编译后代码是否超出芯片容量

例如keil 5 编译后,如图:Program Size: Code=15280 RO-data=284 RW-data=980 ZI-data=15964
在这里插入图片描述
Code为程序代码部分
RO-data 表示 程序定义的常量const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量

Code, RO-data,RW-data …flash
RW-data, ZIdata…RAM

使用是CPU是STM32F103C8,FLASH有64kBytes,RAM有20kBytes。
在这里插入图片描述
查看工程的map文件

Total RO  Size (Code + RO Data)                15564 (  15.20kB)
Total RW  Size (RW Data + ZI Data)             16944 (  16.55kB)
Total ROM Size (Code + RO Data + RW Data)      16384 (  16.00kB)

工程代码使用的FLASH和ARM均小于CPU的额定大小,正常。

  • 13
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值