Keil5-MDK 使用编译步骤及异常与修改(生成axf文件和bin文件)

其实我是比较触头硬件编程这个事情的,因为我没学汇编计组还挂了,重修也没学明白,因为课时间重了办的免听,最后还是靠我的学弟们,贡献了他们老师给画的重点。结果毕业后找工作,就c++熟一些,急乎乎的找了c++的工作,又因为c++本身的性质,被提溜去硬啃ARM。

没有头绪的卡了一周,老板说你拿Keil写个程序,然后再反汇编看看。

那行,先试试怎么写第一个程序。

0 Keil安装

Keil的安装,这一步我就跳过了,因为这个软件是交接工作的时候别人帮我装的。
https://blog.csdn.net/ybhuangfugui/article/details/51501781

1 新建工程

打开软件 Project→New uVersion Project→设置存储路径→设置工程名称

设置单片机型号,我用的是ARMCM3。
(这两步懒得重新操作一遍截图了,反正所有的教程上都是)

点这个,新建一个空白文件,保存的时候文件名改成test.c,这里就是写c代码的地方。
在这里插入图片描述

在Source Group1 文件夹那里右键单击导入add.c(无视我下边绿色的那一些,那些是后面才生成的)
在这里插入图片描述

我就随便写了个a+b程序,然后点击Option for Target…
在这里插入图片描述

Create HEX File默认没有选,给它勾上。
在这里插入图片描述

Translate,我看别人管它叫转换。
在这里插入图片描述

此时一切正常
在这里插入图片描述

Build编译
在这里插入图片描述

然后就开始出现异常
在这里插入图片描述

2 异常. \Objects\Add.sct (7): error:I6236E: No section matches selector - no section to be FIRST/LAST.

这是没有加载启动文件

Manage Run-Time Environment
在这里插入图片描述

把这个勾上。
在这里插入图片描述

然后重新编译,出现新的问题。
在这里插入图片描述

3 异常 C:\Keil_v5\AEL ( PAcXN AERN(XNSIS\5.0.\pevice AM/ARNCXA3 \Inc1ude 2EANCN83, (110); error: 15: canmnot open scource input file “core _ams.h” : No such #include “core cm3.h”

把C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.0.1\CMSIS\Include路径下的文件(我是默认路径,自己设了别的话可以去相应位置找)
在这里插入图片描述
粘贴到
在这里插入图片描述

再编译就正常了。
在这里插入图片描述

现在生成了Add.axf文件

bin文件是真正的可执行文件;

axf文件是ARM的调试文件,除了包含bin的内容之外,还附加了其他的调试信息;

这些调试信息加在可执行的二进制数据的前面,所以把axf文件写到ARM的指令执行地址(一般是0x0)将不能运行,
因为在此地址前几十个字节的数据不是可执行的二进制数据,而是头部的调试信息;
而bin文件正是去掉了调试信息的可以执行的“精华”部分。

4 生成bin文件

还是点击那个很像魔法棒的Option for Target…
在这里插入图片描述
勾选After Build/Rebuild下的Run #1,并设置指令
在这里插入图片描述
C:\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe --bin --output ./Objects/Add.bin ./Objects/Add.axf
也就是
Keil自带的fromelf.exe路径 --bin --output 结果bin文件的存放位置(以工程文件位置为标准的相对路径) 对应的axf文件路径

再点击编译
在这里插入图片描述
在这里插入图片描述

5 运行

如果只是单纯想要运行程序的话,编译后点这里
在这里插入图片描述
Start/Stop Debug Session
然后点这个框出来的是run,旁边那个现在还是灰色的叉号是stop(因为我是还没有运行的时候截的图)
在这里插入图片描述
如果看不到程序运行结果的话点这里
在这里插入图片描述
运行结果就可以在下边这里看到了
在这里插入图片描述


相关链接

ARM映像文件
https://blog.csdn.net/chun_1959/article/details/43732373

使用IDA pro逆向ARM M系核心的Bin固件
https://zhuanlan.zhihu.com/p/58938992

STM32固件逆向
https://zhuanlan.zhihu.com/p/526613532

学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
https://blog.csdn.net/laogaoav/article/details/9259503

STM32——IDA反编译 Hex\Bin文件成C代码(转)
https://www.cnblogs.com/panda-w/p/11548121.html

【MCU】可怕,别人把我MCU固件给反汇编了!(逆向)
https://blog.csdn.net/qq_33471732/article/details/109507340

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值