zoukankan      html  css  js  c++  java
  • 堆栈指针SP设置

    在编写嵌入式程序时,尤其是在汇编程序中调用C函数之前,要设置堆栈指针SP,首先要搞清楚,堆栈是做什么。

        我们常说的堆栈,其实是栈,而不是堆,所谓“栈”从字面意思就能看出,跟“客栈”意思相同,意思是临时存放或入住的一个地方,对于程序来说,就是用于存储函数中的局部变量以及保存寄存器参数的,C程序函数一般都会用到很多的临时变量,这一点可能程序员看不到也不关心,但是CPU在运行程序时,会自动的使用堆栈,所以堆栈指针SP就必须要在调用C程序前设定。
        我们知道对于ARM处理器来说,堆栈是向下生长的,即从高地址向低地址递减,而堆栈本身就是一块连续的内存空间,CPU的内存RAM空间存放规律一般是分段的,从地址向高地址,依次为:程序段(.text),恒常量段(.RO),带初始化值的全局变量段(.RW),不带初始化值的全局变量段(.ZI),静态变量,(其中.ZI和静态变量又统称为BSS段),然后上面还可能会有堆空间,然后最上面才是堆栈段,这样安排堆栈,是因为堆栈的特点决定的,所以堆栈的指针SP初始化一般在堆栈段的高地址,也就是内存的高地址,然后让堆栈指针向下增长(其实就是递减)。这样做的好处就是堆栈空间远离了其他段,不会跟其他段重叠,造成修改其他段数据,而引起不可预料的后果,还有设置堆栈大小的原则,要保证栈不会下溢出到数据空间或者程序空间。所谓堆栈溢出,是指堆栈指针SP向下增长到其他段空间。
        每个处理器的RAM大小可能不同,而且有时往往会用到SDRAM,所以要根据板子的硬件特点而设置堆栈指针。
  • 相关阅读:
    使用SDL2显示一张图片,SDL2上手贴
    两种方法操作其它mac应用的窗口
    golang子进程的启动和停止,mac与linux的区别
    自己动手,装一个液晶电视
    在Ubuntu上搭建kindle gtk开发环境
    macOS的OpenCL高性能计算
    量子计算及量子计算的模拟
    iPhone多次输入错误密码锁机后刷机恢复(原有内容会丢失)
    Day 2 总结
    Day 13 linux 的输入输出与管道的使用
  • 原文地址:https://www.cnblogs.com/AcmenLiang/p/6782466.html
Copyright © 2011-2022 走看看