学习STM32单片机的时候,总是能遇到“堆栈”这个概念。
对于了解一点汇编编程的人,就能够知道,堆栈是内存中一段不间断的存储区域,拿来保存一些临时数据。堆栈操作由PUSH、POP两条指令来完成。而程序内存能够分为几个区:
·栈区(stack)
·堆区(Heap)
·全局区(static)
·文字常亮区程序代码区
///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程和毕业设计指导,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像白色字体加我也能领取哦,记得口令陈老师///
程序编译之后,全局变量,静态变量已经分配好内存空间,在函数运行时,程序须要为局部变量分配栈空间,当中断来时,也须要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。
栈是从高到低分配,堆是从低到高分配。
普通单片机与STM32单片机中堆栈的区别
普通单片机启动时,不须要用bootloader将代码从ROM搬移到RAM。但是STM32单片机须要。
这里我们能够先看看单片机程序执行的过程,单片机执行分三个步骤:
·取指令
·分析指令
·执行指令
依据PC的值从程序存储器读出指令,送到指令寄存器。其次分析执行执行。这样单片机就从内部程序存储器去代码指令,从RAM存取有关数据。
RAM取数的速度是远高于ROM的,但是普通单片机由于自身运行频次不高,所以从ROM取指令慢并不影响。
而STM32的CPU运行的频次高,远大于从