首页 > 解决方案 > 什么是编译堆栈?

问题描述

我遇到了上述术语,并且已经发现它以某种方式用于微控制器,但没有找到任何解释。什么是编译堆栈,它的用途是什么,为什么?

标签: microcontroller

解决方案


编译堆栈是 PIC 系列微控制器中使用的技术。

来自MPLAB XC8 C 编译器用户指南

编译堆栈是内存的静态分配,用于可在多个数据库中构建的基于堆栈的对象。有关如何将对象分配到此堆栈的信息,请参见第 5.5.2.2.1 节“编译堆栈操作”。堆栈中的对象位于固定位置,可以使用标识符访问(因此它是静态分配)。因此,没有堆栈指针。编译堆栈的大小在编译时是已知的,因此编译器可以确认可用空间。编译后的堆栈分配给使用基本名称 cstack 的 psect;例如,cstackCOMMON、cstackBANK0。有关编译器生成的 psect 命名约定的更多信息,请参见第 5.15.2 节 “编译器生成的 psect”。

相比之下,软件堆栈的大小是动态的,并且随着程序的执行而变化。堆栈的最大大小在编译时并不确切知道,编译器通常会为堆栈在程序执行期间的增长预留尽可能多的空间。堆栈总是被分配一个单一的内存范围,它可以跨越存储体的边界,但是在这个范围内,它可以被隔离成一个用于主线代码的区域和一个用于每个中断例程的区域,如果需要的话。堆栈指针用于指示堆栈中的当前位置。该指针永久分配给 FSR1。


推荐阅读