stm32 内存

  • cortex-M3

在这里插入图片描述
在这里插入图片描述

  • stm32F407zgt6
    在这里插入图片描述
    在这里插入图片描述
  • 工程设置

128M 1M			512M 128K
				256M 64K

在这里插入图片描述

  • 下载设置
512M 4K

在这里插入图片描述

  • 擦写设置
总共1MB(1024KB),8sector,1个sector为 128KB,区间为(0x00000-0x1FFFF)

在这里插入图片描述

  • boot 配置了(BOOT1 1 BOOT0 0)使用了 user Flash(0x08000000-0x080FFFFF)
    在这里插入图片描述

  • 大小端

stm32 属于 小端模式,比如 0x11223344 在内存中的存储为

0x08000230 : 0x11 0x22 0x33 0x44

  • 代码分析
    在这里插入图片描述
    在这里插入图片描述
/// 代码 查找分析对象
                AREA    |.text|, CODE, READONLY

; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
        ;IMPORT  SystemInit					;寄存器代码,不需要在这里调用SystemInit函数,故屏蔽掉,库函数版本代码,可以留下
											;不过需要在外部实现SystemInit函数,否则会报错.
        IMPORT  __main
                 LDR     R0, =0xE000ED88    ; 使能浮点运算 CP10,CP11 // 分析对象

// 根据 调试时出现的 Disassembly 窗口

反编译为
0x08000228 480B      LDR           r0,[pc,#44]  ; @0x08000258


// map文件
    Symbol Name                              Value     Ov Type        Size  Object(Section)
    .text                                    0x08000228   Section       68  startup_stm32f40_41xxx.o(.text)
    $v0                                      0x08000228   Number         0  startup_stm32f40_41xxx.o(.text)

	
	Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object
    0x08000228   0x08000228   0x00000044   Code   RO            4    .text               startup_stm32f40_41xxx.o


	Symbol Name                              Value     Ov Type        Size  Object(Section)
    Reset_Handler                            0x08000229   Thumb Code    14  startup_stm32f40_41xxx.o(.text)
说明 
	1.伪指令 "LDR     R0, =0xE000ED88" 被编译为 "LDR           r0,[pc,#44]  ; @0x08000258"  0x08000258[pc,#44] 的内容
	2.伪指令 "LDR     R0, =0xE000ED88" 在 符号 Reset_Handler 内,且被编译为 thumb指令(2字节)
	3.Reset_Handler 在 .text段内, .text段 还包括除了 Reset_Handler 之外的其他内容
	4.伪指令 "LDR     R0, =0xE000ED88" 在 bin 文件中的位置 为 0x00000228,被烧写到stm32 主内存后,位置为0x08000228,被映射到0x00000228.(根据BOOT0BOOT1设置)
	5.伪指令 "LDR     R0, =0xE000ED88" 被汇编成的二进制数据为 0x480B,在内存中以小端格式存放,0B48.
	6. .text段的属性为仅读属性.
	7. 为什么 Reset_Handler 的地址 为 0x08000229,而 Reset_Handler 中的 0x08000228 比 Reset_Handler 小?不是应该相等?
	8. "LDR     R0, =0xE000ED88"为两个字节,"ORR     R1,R1,#(0xF << 20)"为四个字节
  • 函数入口
    Symbol Name                              Value     Ov Type        Size  Object(Section)
    Reset_Handler                            0x08000229   Thumb Code    14  startup_stm32f40_41xxx.o(.text)
	LED_Init                                 0x080003bd   Thumb Code    48  led.o(i.LED_Init)

    Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object
    0x080003bc   0x080003bc   0x00000040   Code   RO          250    i.LED_Init          led.o


LED_Init

0x080003BC 0000      MOVS          r0,r0
  • JMem.exe 读出来的0x00000000以及0x08000000以及bin文件以及hex文件的比较
// 前提
0x00000000-0x000FFFFF0 开始的 1MB 内容 被 BOOT 脚决定
aliased to Flash, system memory or SRAM depending on the BOOT pins
当前设置为
BOOT0 0
BOOT1 1
启动区域被映射为 主闪存存储器(0x08000000-0x080FFFFF)
// 结论
一样的.

--- C:\Users\admin\Desktop\data\32_mcu\mem\target.bin
+++ C:\Users\admin\Desktop\data\32_mcu\mem\data_read_08000000.bin
@@ -114,3 +114,5 @@
 7047 0000 3407 0008 0000 0020 0c00 0000
 c401 0008 4007 0008 0c00 0020 2c05 0000
 e001 0008 0000 0000 0000 0000 0000 0000
+ffff ffff ffff ffff ffff ffff ffff ffff
+ffff ffff ffff ffff ffff ffff ffff ffff

--- C:\Users\admin\Desktop\data\32_mcu\mem\target.bin
+++ C:\Users\admin\Desktop\data\32_mcu\mem\data_read_00000000.bin
@@ -114,3 +114,5 @@
 7047 0000 3407 0008 0000 0020 0c00 0000
 c401 0008 4007 0008 0c00 0020 2c05 0000
 e001 0008 0000 0000 0000 0000 0000 0000
+ffff ffff ffff ffff ffff ffff ffff ffff
+ffff ffff ffff ffff ffff ffff ffff ffff

data_read_08000000.bin 与 data_read_00000000.bin 没有区别
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值