什么是编译堆栈?

时间:2019-09-17 14:29:27

标签: microcontroller

我碰到了这些术语,并且已经意识到它已经以某种方式用于微控制器,但是没有找到任何解释。什么是编译堆栈,其用途是什么?为什么?

1 个答案:

答案 0 :(得分:0)

编译堆栈是PIC系列单片机中使用的技术。

来自MPLAB XC8 C Compiler User's Guide

  

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

     

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

相关问题