【快播报】STM32下载ELF文件、可执行bin文件的最小size测试

2023-04-22 04:09:58 来源:博客园
1、STM32能下载ELF格式的文件吗?

答:可以。因为所谓的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

标签:

【快播报】STM32下载ELF文件、可执行bin文件的最小size测试

1、STM32能下载ELF格式的文件吗?答:可以。因为所谓的bin文件就是ELF文件的 text代码段。当然前提是下...

2023-04-22 04:09:58

通讯!峄城区峨山镇海尔希望小学开展好书推荐活动

通讯员皮士进张娜与书为友,以书为鉴,读一本好书让人受益匪浅,为积极建设“书香校园”,营造浓厚书香...

2023-04-22 03:59:47

最新消息:面馆老板将支付宝借给食客“被贷款”9万元

“虽说是简易听证,但是检察官和评审员围坐在一起为我答疑解惑,感觉就像和朋友聊天一样。我就是想要个...

2023-04-22 03:36:39

当前速读:农业农村经济开局良好(锐财经)

时下,河北省中南部地区的冬小麦进入抽穗期,各地农业部门积极指导农民不误农时开展小麦管理作业,为夏...

2023-04-22 02:57:55

当前最新:大连城建投集团:变更财务报告审计机构

据企业预警通,大连市城乡建设投资集团有限公司公告,本公司将财务报告审计机构由立信会计师事务所(特...

2023-04-22 02:57:44

当前速看:刘邦的故事简介100字_刘邦的故事简介

1、周赧王五十九年(公元前256年)十一月二十四(12月28日),刘邦出生于沛丰邑(今徐州丰县)中阳里,...

2023-04-22 02:30:02

消息!俄罗斯别尔哥罗德市爆炸事故共致3人受伤

俄罗斯别尔哥罗德州州长21日表示,20日夜间的爆炸事故共造成三人受伤,其中一人无需住院治疗,另一名居...

2023-04-22 02:00:46

世界今日报丨矫罪

1、矫罪是一个汉语词语。2、读音是jiǎozuì。3、谓假托君命之罪。

2023-04-22 01:46:00

世界新资讯:股票行情快报:阿科力(603722)4月21日主力资金净卖出438.33万元

截至2023年4月21日收盘,阿科力(603722)报收于53 07元,下跌0 79%,换手率2 23%,成交量1 96万手,成交额1 04亿元。

2023-04-22 01:21:01

速递!什么是粒子特效视频转场(什么是粒度)

1、粒度的概念粒度是碎屑岩中碎屑颗粒最主要的结构特征。2、碎屑颗粒的粒度直接决定岩石的类型和性质,...

2023-04-22 01:01:40
x 广告
x 广告

Copyright ©  2015-2022 西南经营网版权所有  备案号:皖ICP备2022009963号-8   联系邮箱:39 60 29 14 2@qq.com