单片机常用的堆栈知识汇总(后续不断更新)

单片机常用的堆栈知识汇总

先来聊聊为什么要说这个吧,因为今天代码首先遇到在运行Freertos代码,只能运行一个task,另一个task无法运行,debug后,报hardfault错误,查询后,可能是堆栈分配异常。查阅资料后,修改代码,又遇到了代码No space in execution regions with .问题,单片机资源有限,报这个错误,是我之前并没有考虑过的,因此做出这个汇总,以便阅者和作者自查。

首先关于堆栈空间分配问题

在这里插入图片描述

这里0x400,默认是1024(1K)字节(Byte)大小。

讲到字节,我们就来聊聊一点基础知识:

1字节=8位(1 byte = 8bit)
1字=2字节(1 word = 2 byte)
char = uint_8 = 1字节
uint_16 = u16 = 2字节
int_32 = int = 4字节

来举个例子 char a[1024],也就是1024字节空间

接下来继续:

栈(stack)空间,用于局部变量,函数调时现场保护和返回地址,函数的形参等。

堆(heap)空间,主要用于动态内存分配,也就是说用 malloc,calloc, realloc 等函数分配的变量空间是在堆上。

全局区(static)

文字常亮区程序代码区

我们再来聊聊一点基础知识:
  • stm32f103c8t6 小容量芯片 RAM容量为20KB,FLASH容量为64KB

​ 使用CubeMX对该芯片创建一个工程,然后点击魔术棒可以看到:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值