找回密码
 注册
关于网站域名变更的通知
查看: 422|回复: 1
打印 上一主题 下一主题

ARM裸机编程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-12-30 13:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
程序编译过程" B) [% G0 B, [4 l: F+ S! \
        * 预编译:执行宏扩散,文件包含,条件编译和注释处理等动作,为编译做准备( F* o' e7 [9 t4 C
        * 编译:将源码编译为机器目标代码,文件以.o结尾,目标代码中包含了程序最初的二进制程序,只是还没有被链接起来
2 X) k1 Z3 Y/ a6 a& e; g3 H        * 链接:将目标代码按照-Ttext或者lds链接成可执行的二进制程序整体,链接时按照链接脚本指定的规则来进行( b  R) j! a6 C/ a; Y4 X, m* V
        * (可选)strip:删除二进制可执行程序中的符号表,也就是函数表,以减少程序体积,符号表可以在程序反编译的时候提供程序的函数信息,但是在实际运行中符号表是没有用的# b* F4 r; W' C8 P. g/ T1 o3 t
        * (可选)objcopy:将二进制可执行程序转换为可下载烧写的bin文件,以便烧写到NAND Flash或者其他介质中3 p' i* K  [, y% Z1 ^- G4 _3 g% ]2 _. R
--------------------------------------------------------------------------------------------------------------------
* _# u9 |" d+ F应用程序必须经过编译、汇编和链接后才变成可执行文件,在链接时,要对所有的目标文件进行重定位( relocation) ,建立符号引用规则,同时为变量、函数等分配运行地址。当程序执行时,系统必须把代码加载到链接时所指定的地址空间,以保证程序在执行过程中对变量、函数等符号的正确引用,使程序正常运行。在具有操作系统的系统中,重定位过程由操作系统自动完成。
- l) q2 \; |: [* F* J运行地址<--->链接地址
" G4 J8 x9 ^6 _* W* ?1 W加载地址<--->存储地址
: e1 `( V1 o/ W. n$ ~运行地址:程序在SRAM、SDRAM中执行时的地址。就是执行这条指令时,PC应该等于这个地址,换句话说,PC等于这个地址时,这条指令应该保存在这个地址内。
, ^. i7 o! t& U加载地址:程序保存在Nand flash中的地址。
) \, ^' D6 j  |+ y+ R' k$ }位置无关码:B、BL、MOV都是位置位置无关码。依赖于程序当前运行的PC值,进行相对的跳转,导致的结果就是,无论代码在哪,总能达到指令的正常目的,因此是位置无关的。  d0 @- H8 W. B" B
位置有关码:LDR PC,=LABEL等类似的代码都是位置有关码。不依赖当前PC值,是绝对跳转,只有程序运行在链接地址处时,才能达到指令的正常目的,因此是位置有关系的。
- A! B2 T7 p) M/ S( z6 M. ]% C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 01:55 , Processed in 0.171875 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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