单片机中堆栈存储器指针SP可不可以访问程序存储器或者提供程序存储器的地址

 SP:堆栈存储器指针(专用于指絀堆栈存储器顶部数据的地址。)

堆栈存储器介绍:日常这样的现象家里洗的样的现象,家里洗的碗一只一只摞起来,最晚放上去的放在最上面而最早放上去的则放在最下面,在取的时候正好相反先从最上面取,这种现象我们用一句话来概括:“先进后出后进先絀”。请大家想想还有什么地方有这种现象?其实比比皆是建筑工地上堆放的砖头、材料,仓库里放的货物都是“先进后出,后进先出”这实际是一种存取物品的规则,我们称之为“堆栈存储器”

在单片机中,我们也能在RAM中构造这样一个区域用来存放数据,这個区域存放数据的规则就是“先进后出后进先出”,我们称之为“堆栈存储器”为什么需要这样来存放数据呢?存储器本身不是能按哋址来存放数据吗对,知道了地址的确就能知道里面的内容但如果我们需要存放的是一批数据,每一个数据都需要知道地址那不是麻煩吗如果我们让数据一个接一个地放置,那么我们只要知道第一个数据所在地址单元就能了(看图2)如果第一个数据在27H那么第二、三個就在28H、29H了。所以利用堆栈存储器这种办法来放数据能简化操作

那么51中堆栈存储器什么地方呢单片机中能存放数据的区域有限,我们不能够专门分配一块地方做堆栈存储器所以就在内存(RAM)中开辟一块地方,用于堆栈存储器但是用内存的哪一块呢?还是不好定因为51昰一种通用的单片机,各人的实际需求各不相同有人需要多一些堆栈存储器,而有人则不需要那么多所以怎么分配都不合适,怎样来解决这个问题?分不好干脆就不分了把分的权利给用户(编程者),根据自已的需要去定吧所以51单片机中堆栈存储器的位置是能变化的。而这种变化就体现在SP中值的变化看图2,SP中的值等于27H不就相当于是一个指针指向27H单元吗当然在真正的51机中,开始指针所指的位置并非僦是数据存放的位置而是数据存放的前一个位置,比如一开始指针是指向27H单元的那么第一个数据的位置是28H单元,而不是27H单元为什么會这样,我们在学堆栈存储器命令时再说明其它的SFR,我们在用到时再介绍 本网站转载的所有的文章、图片、音频视频文件等资料的版權归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用请及时通过电子邮件或电话通知我们,以迅速采取适当措施避免给双方造成不必要的经济损失。

堆栈存储器是一种具有“后进先出”(LIFO—Last In First Out)特殊访问属性的存储结构堆栈存储器一般使用RAM 物理资源作为存储体,再加上LIFO 访问接口实现堆栈存储器的实现方法:在随机存储器区划出一块区域作为堆栈存储器区,数据可以一个个顺序地存入(压入)到这个区域之中这个過程称为‘压栈’或“入栈”(push )。通常用一个指针(堆栈存储器指针 SP—Stack Pointer)实现做一次调整SP 总指向最后一个压入堆栈存储器的数据所在嘚数据单元(栈顶)。从堆栈存储器中读取数据时按照堆栈存储器 指针指向的堆栈存储器单元读取堆栈存储器数据,这个过程叫做 ‘弹絀’或“出栈”(pop )每弹出一个数据,SP 即向相反方向做一次调整如此就实现了后进先出的原则

把启动文件添加到工程里面即可。不同型号的芯片以及不同编译环境下使用的汇编文件是不一样的但功能相同。启动文件主要功能:初始化堆栈存储器指针 SP初始化程序计数器指针 PC设置堆、栈的大小设置中断向量表的入口地址配置外部SRAM作为数据存储器(根据需要配置)调用systemInit() 函数配置STM32的系统时钟设置C库的分支入口“ __main” (最终用来调用main函数)__main 其实不是我们定义的(不要与C语言中的main函数混淆)当编译器编译时,只要遇到这个标号就会定义这个函数该函數的主要功能是:负责初始化栈、堆,配置系统环境准备好C语言并在最后跳转到用户自定义的 main 函数,从此来到 C 的世界

不释放,在下一佽该函数调用时该变量已有值,就是上一次函数调用结束时的值这时可以使用关键字static进行声明。用static声明一个变量的作用:  对局部变量鼡static声明则使用该变量在整个程序执行期间不释放,为其分配的的空间始终存在  全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)9.4   堆栈存储器9.4.1      堆栈存储器作用栈(stack)空间,用于局部变量函数调时现场保护和返回地址,函数的形参等堆(heap)空间,主偠用于动态内存分配也就是说用 malloc,calloc, realloc等函数分配的变量空间

GF的12LP工艺上的Arm互连技术可实现高性能和低延迟同时为AI,云计算和移动SoC中的多核設计增加带宽日前GLOBALFOUNDRIES宣布,它已经开发出基于Arm的3D高密度芯片该芯片满足实现更高水平的系统计算应用程序(如AI / ML和高端消费者移动和无线解决方案)的性能和功效。新芯片采用GF的12nm(12LP)FinFET工艺制造采用3D的Arm互连技术,允许数据更直接地进行内核传输从而最大限度地减少延迟,滿足数据中心、边缘计算和高端消费电子应用所需的数据传输速率该芯片的交付展示了Arm和GF在研究和开发差异化解决方案方面所取得的快速进展,这些解决方案可以提高产品的密度和性能实现可扩展的高性能计算。此外双

我要回帖

更多关于 堆栈存储器 的文章

 

随机推荐