打印
[产品应用]

单片机堆栈详解

[复制链接]
楼主: albertaabbot
手机看帖
扫描二维码
随时随地手机跟帖
21
uiint| | 2024-6-11 13:27 | 只看该作者 回帖奖励 |倒序浏览
栈的空间通常有限,如果超出限制可能会导致栈溢出,从而引发程序崩溃。
堆空间较大,但也不是无限大,其大小取决于可用的RAM。

使用特权

评论回复
22
i1mcu| | 2024-6-11 16:58 | 只看该作者
函数在执行时会创建局部变量,这些变量通常存储在堆栈中,因为这样可以避免对全局变量名的冲突,并允许函数之间互不干扰。

使用特权

评论回复
23
dspmana| | 2024-6-11 20:23 | 只看该作者
在中断处理和函数调用过程中,堆栈用于保存断点和返回地址,确保程序能够正确返回到中断前的执行状态或函数调用后的执行点。

使用特权

评论回复
24
lihuami| | 2024-6-12 10:09 | 只看该作者
尽量减少深层嵌套的子程序调用,以降低堆栈的使用频率。

使用特权

评论回复
25
houjiakai| | 2024-6-12 13:27 | 只看该作者
每当一个函数被调用时,一个新的栈帧会被创建。栈帧包含了该函数的局部变量、参数、返回地址以及可能的其他信息。函数执行完毕后,其栈帧会被释放,堆栈指针会恢复到调用前的状态。

使用特权

评论回复
26
maqianqu| | 2024-6-12 16:42 | 只看该作者
如果程序尝试向已满的堆栈中压入更多数据,就会发生堆栈溢出。这通常会导致不可预知的行为,甚至程序崩溃。因此,在设计程序时,确保有足够的堆栈空间是非常重要的。

使用特权

评论回复
27
minzisc| | 2024-6-12 19:54 | 只看该作者
栈遵循先进后出(FILO/LIFO)的原则,这意味着最后进入的数据将最先被取出。
堆则没有固定的访问顺序,其分配和释放完全由程序员控制。

使用特权

评论回复
28
1988020566| | 2024-6-13 19:46 | 只看该作者
当程序执行函数调用时,堆栈用于保存当前的程序计数器(PC)值和寄存器的状态。这样,当函数执行完毕后,可以通过弹出堆栈恢复到调用前的状态。

使用特权

评论回复
29
abotomson| | 2024-6-14 09:09 | 只看该作者
当发生中断时,单片机会将当前的处理现场(包括程序计数器、寄存器等)压入堆栈,以便能够在中断处理完后恢复到中断发生前的状态。

使用特权

评论回复
30
sanfuzi| | 2024-6-14 12:19 | 只看该作者
当执行一个函数时,单片机会将当前的程序计数器(PC)、状态寄存器(PSW)以及其他必要的信息压入堆栈,以便之后能够返回到调用它们的函数。这被称为函数的堆栈帧(stack frame)。

使用特权

评论回复
31
pl202| | 2024-6-14 15:28 | 只看该作者
遵循后进先出(LIFO)原则。
主要存储临时数据、返回地址和程序执行中断时的现场信息(如地址和数据)。

使用特权

评论回复
32
burgessmaggie| | 2024-6-14 18:34 | 只看该作者
在单片机中,堆栈指针(SP)是一个特殊的寄存器,它指向堆栈的顶部。每次执行PUSH操作时,SP会自动减少,而每次执行POP操作时,SP会自动增加。

使用特权

评论回复
33
pixhw| | 2024-6-14 21:42 | 只看该作者
栈通常从高地址向低地址增长,即“向下增长”。
堆则相反,从低地址向高地址增长,即“向上增长”。

使用特权

评论回复
34
vivilyly| | 2024-6-15 12:52 | 只看该作者
在执行子程序或中断处理前,保存现场信息(寄存器值);执行完毕后,从堆栈中恢复这些信息。

使用特权

评论回复
35
sdCAD| | 2024-6-15 15:59 | 只看该作者
如果堆栈的大小不足以容纳所有的函数调用和局部变量,就会发生堆栈溢出。这可能导致程序崩溃或不稳定。为了避免堆栈溢出,需要合理地设置堆栈大小,并确保程序中的递归调用和局部变量使用不会超过堆栈的容量。

使用特权

评论回复
36
软核硬核| | 2024-6-16 09:59 | 只看该作者
堆栈只能通过推和弹出指令访问,不能像其他内存区域那样直接读写。

使用特权

评论回复
37
小夏天的大西瓜| | 2024-6-17 22:42 | 只看该作者
堆栈现在是标准的库文件嘛?

使用特权

评论回复
38
LLGTR| | 2024-6-19 21:05 | 只看该作者
堆通常从高地址增长到低地址,而堆则从低地址增长到高地址。

使用特权

评论回复
39
OKAKAKO| | 2024-6-21 20:11 | 只看该作者
堆栈区由特殊功能寄存器堆栈指针SP管理 堆栈区可以安排在 RAM区任意位置

使用特权

评论回复
40
中国龙芯CDX| | 2024-6-26 16:51 | 只看该作者
在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则