//2440INIT.S

;The location of stacks
UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~
SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~
UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~
AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~
IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 ~
FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~ ;function initializing stacks
InitStacks
    ;Do not use DRAM,such as stmfd,ldmfd......
    ;SVCstack is initialized before
    ;Under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'
    mrs    r0,cpsr
    bic    r0,r0,#MODEMASK
    orr    r1,r0,#UNDEFMODE|NOINT
    msr    cpsr_cxsf,r1        ;UndefMode
    ldr    sp,=UndefStack        ; UndefStack=0x33FF_5C00     orr    r1,r0,#ABORTMODE|NOINT
    msr    cpsr_cxsf,r1        ;AbortMode
    ldr    sp,=AbortStack        ; AbortStack=0x33FF_6000     orr    r1,r0,#IRQMODE|NOINT
    msr    cpsr_cxsf,r1        ;IRQMode
    ldr    sp,=IRQStack        ; IRQStack=0x33FF_7000     orr    r1,r0,#FIQMODE|NOINT
    msr    cpsr_cxsf,r1        ;FIQMode
    ldr    sp,=FIQStack        ; FIQStack=0x33FF_8000     bic    r0,r0,#MODEMASK|NOINT
    orr    r1,r0,#SVCMODE
    msr    cpsr_cxsf,r1        ;SVCMode
    ldr    sp,=SVCStack        ; SVCStack=0x33FF_5800     ;USER mode has not be initialized.     mov    pc,lr
    ;The LR register will not be valid if the current mode is not SVC mode.
_ISR_STARTADDRESS    EQU 0x33ffff00
_ISR_STARTADDRESS到0x33ff8000这一段内存空间存储的是中断的入口.
0x33ff8000到0x33ff4800是各种异常的栈空间;
0x33ff4800到0x30000000是留给usermode的栈空间,实际上用的是其中一部分,因为程序运行还有相当一部分空间(heap、从flash加载过来的代码也要内存空间等). 例如MDK中用ARM的库函数_init_alloc(base,top)来设置堆地址_init_alloc(0x37000000,0x38000000-8)。 //heap
 

s3c2440栈分配情况(fl2440裸机 stack)的更多相关文章

  1. [No0000145]深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing)理解堆与栈2/4

    前言   虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC).另外,了解内存管理可以帮助我们理解在每一个程 ...

  2. [No0000144]深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing)理解堆与栈1/4

    前言   虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC).另外,了解内存管理可以帮助我们理解在每一个程 ...

  3. 简述 C、C++程序编译的内存分配情况【转】

    面试题 9:简述 C.C++程序编译的内存分配情况  C.C++中内存分配方式可以分为三种:  (1)从静态存储区域分配:  内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在.速度快. ...

  4. 【STM32H7教程】第10章 STM32H7的FLASH,RAM和栈使用情况(map和htm文件)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第10章       STM32H7的FLASH,RAM ...

  5. SQLSERVER新建表的时候页面分配情况是怎样的?

    SQLSERVER新建表的时候页面分配情况是怎样的? 再次感谢sqlskill网站和转载sqlskill网站文章并翻译的人,因为您们的转载和翻译让小弟又学习到新的东西o(∩_∩)o 文章中用到的工具: ...

  6. 怎么从代码中拿到栈回溯信息(call stack trace)

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:怎么从代码中拿到栈回溯信息(call stack trace).

  7. 探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别

    探讨C++ 变量生命周期.栈分配方式.类内存布局.Debug和Release程序的区别(一) 今天看博客园的文章,发现博问栏目中有一个网友的问题挺有趣的,就点进去看了下,标题是“C++生存期问题”,给 ...

  8. 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来

    /** * 如何仅用递归函数和栈操作逆序一个栈 * 题目: * 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. * 将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就 ...

  9. 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明

    [VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...

随机推荐

  1. protel99与win7兼容问题的解决方案

    一些用户大概都已经把自己的 PC 从 winXP 换到了 win7,在 win7 给我们带来的视觉上的冲击和功能上的更换.也不时的带来了各方面的软件兼容问题 ,而一般上的兼容都可以在 win7 的自动 ...

  2. liunx 同步时间

    ntpdate stdtime.gov.hk (美国) time.nist.gov (复旦)(国内用户推荐) ntp.fudan.edu.cn 微软公司授时主机(美国) time.windows.co ...

  3. github中的ssh配置

    1.配置git信息 设置git的user name和email: $ git config --global user.name "tigerjibo"$ git config - ...

  4. MyGui 3.2.0(OpenGL平台)的编译

    MyGui是一个用来创建用户图形界面的库,用于游戏和3D应用程序.这个库的主要目标是达到:快速.灵活.易用. 1.下载准备: 源代码:http://svn.code.sf.net/p/my-gui/c ...

  5. redis 缓存技术与memcache的最大差别

    1 什么是redis  redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对很多其它,包含string(字符串).list(链表).set(集合)和zs ...

  6. Node.js模块os

    OS 操作系统模块 os.hostname() 操作系统的主机名. os.type() 操作系统的名称 os.release() 操作系统的发行版本 os.uptime() 当前系统的时间 以秒为 o ...

  7. UVa10082 WERTYU

    #include <stdio.h>#include <string.h> int main(){ // 用C++提交AC    char s[] = "`12345 ...

  8. c++ primer plus 习题答案(7)

    p427.4 //头文件: #include<iostream> #ifndef STACK_H_ #define STACK_H_ typedef unsigned long Item; ...

  9. 10条PHP编程习惯

    过去的几周对我来说是一段相当复杂的经历.我们公司进行了大裁员,我是其中之一,但却体验到了其中的乐 趣.我从来没有被开除过,所以很难不去想得太多.我开始浏览招聘板块,一个全职PHP程序员的职位很吸引人, ...

  10. mysql xtrabackup 备份恢复实现,mysql命令备份数据库,打包压缩数据库

    简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠 ...