stm32可执行文件

仅仅为了弄清楚大体框架

代码
供把资料和指示输入自动计算机或制表机的任何符号系统;亦指这种符号的记录(如靠打孔资料卡片或磁带上的受磁点)。(百度百科词条)
图灵机,任何复杂的运算都能分解成有限个基本运算指令。
这些运算指令在计算机底层电路都有自己的编号,给每个编号起个名字,然后人类用这些名字写程序(这就是汇编吗?)。

计算机的本质(学习微机原理)

寄存器,由触发器组成的能存储二进制数的器件。
DR,数据寄存器,特定的集成电路区域
AR,地址寄存器,特定的集成电路区域
IR,指令寄存器,特定的集成电路区域
ID,指令译码器,特定的集成电路区域
ALU,算术逻辑单元,一块能执行运算的区域(如,加减乘除)
PC,程序计数器,指示指令的地址,PC每次执行完会自动+1,一步一步在可执行文件上移动,如果需要跳转会在跳转前给PC赋值跳转的地址。

上电后第一个指令:PC–>AR–>ROM–>DR–>IR–>ID–>
0.初上电,硬件电路给PC赋值,如写 0,
1.PC的值送入AR,同时PC自动+1
2.AR的值送入存储器ROM,
3.ROM译码地址,将地址上存储的数送到DR数据寄存器,
4.DR将值送入IR指令寄存器,
5.ID指令译码器译码IR的值,
6.经过ID译码,配置集成电路的电路状态,为接下来的程序执行配置环境,如使用加法器还是乘法器。
7.AR从PC取值,PC自动+1,。。。
8.一直执行下去。。。

**计算机的本质就是不停的获取控制指令,获取数据,执行指令,输出数据

程序的三部分:bss data text

bss: block started by symbol,顾名思义,这个区域最开始时是个占位的标号,没有确定的值
那个A区域留着,我后面要用,我预定了,都不要使用(如堆栈空间)

data 一些有初值的变量的值
如,char A = 3;
(开辟一个 char 空间 A,初值为 3,这个 3 就会存储在data区,程序开始执行时再自动将 3 放到RAM A 位置)

text 真程序代码部分,const变量也会存储在这个区域
如,

MOVS r0,r0    ==> 存储形式 0000
MOVS r0,#0x02 ==> 存储形式 2002
MOVS r1,#0x01 ==> 存储形式 2101
const char B = 3;

(这些指令和这个3会存储在这个区域)

stm32可执行代码

Code 代码
RO-data read-only 只读
RW-data read-wirte 读写
ZI-data zero-initialized 0初始化

==============================================================================

      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   

      5544        558        480        120      12072     292938   Grand Totals
      5544        558        480        120      12072     292938   ELF Image Totals
      5544        558        480        120          0          0   ROM Totals

==============================================================================

    Total RO  Size (Code + RO Data)                 6024 (   5.88kB)
    Total RW  Size (RW Data + ZI Data)             12192 (  11.91kB)
    Total ROM Size (Code + RO Data + RW Data)       6144 (   6.00kB)

==============================================================================

code里面也包含data,指令和只读data合体了。

为什么等于后面的值相加

RO Size (Code + RO Data)
代码(即机器指令,如 加法指令) + 只读的数据(如 const 变量)

RW Size (RW Data + ZI Data)
有初值的变量 + 没有初值的变量及分配的地址空间

ROM Size (Code + RO Data + RW Data)
代码 + 只读数据 + 可读写数据的初始值

可执行文件存储结构

##ROM

|- ...
|- RW data 初始值
|- RO data 值
|- ...
|- C.s code
|- B.c code
|- A.c code
|- code,stm32的特性,栈地址,异常入口,初始化赋值等
|- ...
|- 0x0800 0000

##RAM

|- ...
|- main STACK
|- HEAP
|- ZI data
|- RW data
|- ...
|- 0x2000 00000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值