答:可以。因为所谓的bin文件就是ELF文件的.text代码段。
当然前提是下载工具能识别ELF文件格式,STM32下载ELF文件并不意味着STM32可以把ELF download到Flash上,而是下载工具能从ELF提取到bin文件,下载时通信链路上传输的也只有要bin文件。
(资料图)
例如有elf文件:
$ arm-none-eabi-objdump.exe -s main2.elfmain2.elf: file format elf32-littlearmContents of section .text: 8000000 00100020 09000008 01488546 fee70000 ... .....H.F.... 8000010 00100020 ...Contents of section .ARM.attributes: 0000 41200000 00616561 62690001 16000000 A ...aeabi...... 0010 05436f72 7465782d 4d340006 0d074d09 .Cortex-M4....M. 0020 02
arm-none-eabi-objcopy -O binary main2.elf main2.bin, 它生成bin文件为:
address 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 AscII00000000 00 10 00 20 09 00 00 08 01 48 85 46 fe e7 00 00 ... .....H.F....00000010 00 10 00 20 ...
使用STM32 cube programmer直接打开elf文件不仅可以预览,还能直接下载ELF文件,看到的数据和上面使用objump生成的bin文件一样的。
在cube programmer里连下载地址都不用设置,若打开的是bin文件,无论Segger J-Flash还是cube programmer,都是需要手动设置Flash下载地址的。
2、STM32最小的可执行bin文件是多大?答:10字节。
按照STM32编程手册,STM32启动是从0x0地址取堆栈指针(MSP),从0x04地址取复位入口的PC指针,还需要设置堆栈地址(1或2条指令),最后是mian函数loop,所以最小的代码至少是4+4+4+2合计14字节或4+4+8+2合计18字节。倘若不考虑代码通用性,可以把堆栈地址去掉,合计10字节即可,实际代码只有1条2字节。0x00地址:MSP值。
0X04地址:reset handler地址,值为0x08
0x08地址:BL . (死循环,thumb指令2字节)
举例如下:下面的汇编代码中0x04地址为PC初始值: 09 00 00 08,小端格式实际值为0x08000009,为何是奇数?
答:cortex MCU不可能产生奇数指令,ARM模式4字节对齐低2位是0,Thumb模式2字节对齐低1位是0,所以PC最低位就属于空闲的,而Cortex MCU需要识别当前是ARM模式还是Thumb模式,所以使用PC最低位就能识别这两种模式。
R15是程序计数器,在汇编代码中用PC表示,ARM规定PC最低位LSB用于表示是ARM指令(0)还是Thumb指令(1)。
设计代码,直接写汇编
.syntax unified.cpu cortex-m4.fpu softvfp.thumb// Global memory locations..global vtable.global reset_handler// The actual vector table..type vtable, %objectvtable: .word _estack .word reset_handler.size vtable, .-vtable/* * The Reset handler. Called on reset. */.type reset_handler, %functionreset_handler: // Set the stack pointer to the end of the stack. //LDR r0, =_estack //MOV sp, r0 //MOVS r0, #0 main_loop: //ADDS r0, r0, #1 B main_loop.size reset_handler, .-reset_handler
link文件很简单:
_estack = 0x20001000;SECTIONS{. = 0x08000000; /* The starting address of flash */}
编译生成二进制文件如下:
main2.elf: file format elf32-littlearmDisassembly of section .text:08000000: 8000000: 00 10 00 20 09 00 00 08 ... ....08000008 : 8000008: e7fe b.n 8000008
这并不是一个理论demo,而是一个可以执行的程序。
第一步下载:
第二步,执行,由于这个程序没有任何有效的命令,所以无论如何单步都看不到变化,只能看到SP和PC指针已经正确的load了。
简单修改,加一个寄存器做累加计算方便看到效果,每点一次单步寄存器值加1,代码由10字节变为了14字节。
$ arm-none-eabi-objdump.exe -d main2.elfmain2.elf: file format elf32-littlearmDisassembly of section .text:08000000: 8000000: 00 10 00 20 09 00 00 08 ... ....08000008 : 8000008: 2000 movs r0, #00800000a : 800000a: 3001 adds r0, #1 800000c: e7fd b.n 800000a
第一步:下载
第二步:复位,执行指令
8000000: 00 10 00 20 09 00 00 08
8000008: 2000 movs r0, #0
单步:执行指令 ,累加和循环
0800000a
800000a: 3001 adds r0, #1
800000c: e7fd b.n 800000a
单步:
单步:
单步
单步:
直接全速run后暂停:
尊重技术原创,转载请注明:https://www.cnblogs.com/pingwen/p/17341740.html
标签:
1、STM32能下载ELF格式的文件吗?答:可以。因为所谓的bin文件就是ELF文件的 text代码段。当然前提是下...
从我个人的角度来说,我觉得大暑节气属于中伏阶段你就可以选择喝一些绿豆粥,我个人觉得的时候喝一些绿...
有人说“娱乐圈就是个粪坑”。这话虽然难听但有一定道理,因为有些事如果是真的,简直是太恶臭了。接下...
4月21日,红土创新深圳安居REIT发布了红土创新深圳人才安居保障性租赁住房封闭式基础设施证券投资基金20...
1、口臭的原因有多种,有的患者口臭是因为身体疾病,但大多数人口臭的原因都在于牙齿不够干净,牙结石,...
图说:申尚全民高尔夫来源/上海体育挥动球杆,让小小的白球在绿茵场上飞驰出去。今天,“上海体育”带...
1、1.调查报告力求客观真实、实事求是调查报告必须符合客观实际,引用的材料、数据必须是真实可靠的。2...
格隆汇4月21日丨中原证券(601375 SH)公布2023年第一季度报告,报告期实现营业收入4 64亿元,同比增长19
直播吧4月21日讯 国王97-114惨败勇士,大比分被扳为2-1。本场比赛蒙克发挥低迷,9投1中,三分4中0,罚...
北京日报客户端|记者张骜4月21日,在世界读书日前夕,西城区图书馆走进武警北京市总队执勤第三支队执勤...
北京日报客户端|记者张骜书籍是人类进步的阶梯,4月21日,西城区党群服务中心里添了一家名为“墨香‘展...
4月21日北向资金减持99 14万股海南机场。近5个交易日中,获北向资金减持的有3天,累计净减持115 53万...
当地时间21日,世界气象组织发布《2022年全球气候状况报告》。该年度报告指出,由于温室气体达到了创纪...
00:37大众网见习记者刘善政刘子琳济宁报道4月20日,共青团济宁市任城区一届九次全委(扩大)会议召开,...
早稻插秧正当时智慧农机来助力
·“星舰”空中解体后,马斯克在推特上祝贺SpaceX团队完成了“激动人心”的测试,“为准备几个月后的下...
在今天(21日)举行的外交部例行记者会上,有记者问:有报道称在苏丹已经达成了72小时停火协议,一些国...
4月21日,在经历了昨日AI方向的短线情绪再度高潮后,今日以人工智能为代表的科技主线遭遇集体重挫,数据...
截至2023年4月21日收盘,中天金融(000540)报收于0 84元,下跌2 33%,换手率4 86%,成交量338 86万手,成交额2 88亿元。
国际在线报道(记者许弢):根据中国国家统计局最新公布数据,中国2023年第一季度国内生产总值(GDP)较上...
X 关闭
X 关闭