初级会员

- 积分
- 102
- 金钱
- 102
- 注册时间
- 2014-7-23
- 在线时间
- 1 小时
|
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 ...
|