OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4720|回复: 2

关于SRAM与启动代码的堆栈问题

[复制链接]

14

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-7-23
在线时间
1 小时
发表于 2014-8-6 19:18:28 | 显示全部楼层 |阅读模式
5金钱
1,
stm32裸奔的程序,一般是不是都不会用到SRAM,因为在flash就可以跑了
我发现一般的裸奔实验程序都不会再copy程序到SRAM了,所以这时候SRAM就没什么用了,这样理解对吗
2,
在flash中0x8000000前四个字节存放栈顶指针,后面0x80000004存放中断向量表如下,为startup_stm32f10x_hd.s中的前面内容,怎么看不出来啊,还有这个arm的汇编是不是和标准的不太一样啊,感觉怪怪的,有些看不懂

Stack_Size      EQU     0x00000400
                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp                                                
; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size       EQU     0x00000200

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

                PRESERVE8
                THUMB


; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler
。。。。。。。。
。。。。。。。。
。。。。。。。。
。。。。。。。。
; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                ;IMPORT  SystemInit
                ;LDR     R0, =SystemInit
                ;BLX     R0                  
                LDR     R0, =__main
                BX      R0
                ENDP
还有一个更重要的,汇编里面没有设置堆栈就直接运行了,而且调用main函数前也没有设置堆栈程序就直接LDR了,为什么啊,堆栈的设置在什么地方,中断表的第一项为__initial_sp    干什么啊        

最佳答案

查看完整内容[请看2#楼]

1,错误,SRAM的主要作用是变量存储用,而不是仅仅给你跑代码的. 2, 体现在这里: __Vectors       DCD     __initial_sp               ; Top of Stack                 DCD   ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-6 19:18:29 | 显示全部楼层
1,错误,SRAM的主要作用是变量存储用,而不是仅仅给你跑代码的.
2,
体现在这里:
__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler

至于汇编细节,我也不懂.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-7-23
在线时间
1 小时
 楼主| 发表于 2014-8-8 17:43:40 | 显示全部楼层
我明白一点了,我们的FLASH是nandflash,只能复制到SRAM中运行,这就靠内核做了,我们看不见。。。。一般的单片机什么的无RAM,flash是NORFLASH,直接偏上运行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-5 11:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表