microcontroller - 什么是编译堆栈?
问题描述
我遇到了上述术语,并且已经发现它以某种方式用于微控制器,但没有找到任何解释。什么是编译堆栈,它的用途是什么,为什么?
解决方案
编译堆栈是 PIC 系列微控制器中使用的技术。
编译堆栈是内存的静态分配,用于可在多个数据库中构建的基于堆栈的对象。有关如何将对象分配到此堆栈的信息,请参见第 5.5.2.2.1 节“编译堆栈操作”。堆栈中的对象位于固定位置,可以使用标识符访问(因此它是静态分配)。因此,没有堆栈指针。编译堆栈的大小在编译时是已知的,因此编译器可以确认可用空间。编译后的堆栈分配给使用基本名称 cstack 的 psect;例如,cstackCOMMON、cstackBANK0。有关编译器生成的 psect 命名约定的更多信息,请参见第 5.15.2 节 “编译器生成的 psect”。
相比之下,软件堆栈的大小是动态的,并且随着程序的执行而变化。堆栈的最大大小在编译时并不确切知道,编译器通常会为堆栈在程序执行期间的增长预留尽可能多的空间。堆栈总是被分配一个单一的内存范围,它可以跨越存储体的边界,但是在这个范围内,它可以被隔离成一个用于主线代码的区域和一个用于每个中断例程的区域,如果需要的话。堆栈指针用于指示堆栈中的当前位置。该指针永久分配给 FSR1。
推荐阅读
- javascript - 不能为不可为空的字段返回 null
- r - lmer中主体间因素的自由度错误
- wordpress - Woocommerce 产品页面图像大小
- swift - SwiftUI if ZStack 中的条件
- mysql - 将 sysbench 累积摘要转换为 csv
- android - BottomSheet 关闭后调用哪个生命周期状态?
- python - 为 3D 体积绘制 seaborn 热图动画时出错
- javascript - 我无法使用 document.querySelectorAll('*:focus') 在 JS 中选择所有焦点样式
- vim - 如何添加正确的 vim `帮助词`,以便我可以用 K 打开帮助部分
- perl - 如何在 Perl 中运行 shell 命令,比如 Raku?