完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
有个叫Thumb的指令集。。。
|
|
|
|
今天上午又研究了一下,cortex-m3 m4来说,使用的是thumb2指令集,那么32位和16位的指令都有, 又查了下bin的组成 ARM映像文件的组成 所谓ARM映像文件就是指烧录到ROM中的bin文件,也称为image文件。以下用Image文件来称呼它。 Image文件包含了RO和RW数据。之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。 Q:为什么Image中必须包含RO和RW? A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。 想起来由于const类型的数据也要写到flash,那么我想bin的大小就很难说了吧 |
|
|
|
语法格式:AREA 段名{,属性 1}{,属性 2}……
AREA 命令指示汇编程序汇编一个新的代码段或数据段。段是独立的、指定的、不可见的代 码或数据块,它们由链接程序处理。 段名:可以为段选择任何段名。但是,以一个数字开始的名称必须包含在竖杠号内,否则会 产生一个缺失段名错误。例如,|1_DataArea|。 有些名称是习惯性的名称。例如:|.text|用于表示由 C 编译程序产生的代码段,或用于以某 种方式与 C 库关联的代码段。 属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用的属性如下: ——CODE 属性:用于定义代码段,默认为 READONLY。 ——DATA 属性:用于定义数据段,默认为 READWRITE。 ——READONLY 属性:指定本段为只读,代码段默认为 READONLY。 ——READWRITE 属性:指定本段为可读可写,数据段的默认属性为 READWRITE。 ——ALIGN 属性:使用方式为 ALIGN 表达式。在默认时,ELF(可执行连接文件)的代码 段和数据段是按字对齐的,表达式的取值范围为 0~31,相应的对齐方式为 2 表达式次方。 ——NOINIT 属性:表示数据段是未初始化的或初始化为零。其只包含零初始化的空间保留 命令 SPACE 或 DCB、DCD、DCDU、DCQ、DCQU、DCW 或 DCWU。可以决定在链接时 AREA 是未初始化的还是零初始化的。 一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据 段 |
|
|
|
luciferz 发表于 2015-12-22 11:41 注意上边给你贴的那段中,align指明对齐方式。可以了解下编译和链接的具体细节,甚至反汇编,winhex查看二进制文件等。。。然后恭喜你就又掉进一个坑 |
|
|
|
xixilvtt 发表于 2015-12-22 15:45 果然是个大坑。话说我汇编还没怎么学,也不打算现在学。。。 话说我的问题是生成的bin文件的大小的问题, 我昨天测了一下,const类型增加1个字节或增加4个字节都是占用4字节的flash, 增加一个16位的汇编指令,或增加2条16位的汇编指令,flash也都是占用4字节, 我现在就想知道bin文件大小是否一定是4字节的倍数。 你的意思是align对齐方式会影响bin文件的对齐方式吗? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1085 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1041 浏览 2 评论
2145 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1240 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1660 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 21:20 , Processed in 0.866898 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号