发新帖本帖赏金 10.00元(功能说明)我要提问
返回列表
打印
[技术讨论]

【Keil使用记录】Part1:使用Keil生成内部和外部BIN文件

[复制链接]
1773|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创#
1.介绍
最近的项目上使用内部Flash存储程序代码,外部Flash储存图片文字等数据,无线更新的时候只更新内部Flash,那么就需要从程序中将内部Flash的二进制文件生成出来,接下来就开始操作吧!
2.工程建立
首先我选择TouchGFX生成工程,这里选择了STM32L4R9I_DISCOVERY这个开发套件,然后选择官方提供的Demo,最终界面图如下图1。

图1
然后生成代码,点击图1的【Generate Code】,这个软件的使用等后面有机会出一个连载教程,这里就不多说明了,然后生成代码成功后,打开分散加载文件,打开方式如图2。

图2
通过图3可以看到程序部分存储在内部Flash,图片和文字数据存储在外部Flash。

图3
3.生成BIN文件
这时候添加一串生成BIN文件的命令。
fromelf --bin --output STM32L4R9I_DISCOVERY\BIN_Data.BIN STM32L4R9I_DISCOVERY\STM32L4R9I_DISCOVERY.axf
添加在如图4所示位置,这个位置是编译通过之后会执行的命令。

图4
编译一下,查看生成的BIN文件,可以看到一个奇怪的现象,生成了一个为【Bin_Data.BIN】的文件夹,如图5所示。

图5
进入文件夹之后可以看到两个文件,分别是【ER_EROM1】和【ER_IROM1】两个文件,如图6但是文件类型未知。

图6
虽然这个文件也是一个BIN文件,只是后缀名不正确,我们用【WinHex】软件打开其中一个文件如图7,可以看到文件是可以被正常打开的,内容也是正确的。

图7
但是这个文件后缀不太如意,这时候我发现了一件事,文件名与分散加载文件中的某一些名字一样,那么我如果修改这个名字是不是可以达到我想要的以BIN为后缀的文件,说做就做,把文件中的名称加上【.BIN】后缀,如图8所示。

图8
然后将生成的文件夹名字中的【.BIN】删除,如图9,修改后的代码如下。
fromelf --bin --output STM32L4R9I_DISCOVERY\BIN_Data.BIN STM32L4R9I_DISCOVERY\STM32L4R9I_DISCOVERY.axf

图9
编译一下,可以看到生成的了一个新的【BIN_Data】的文件夹,如图10。

图10
点击进去后可以看到这两个文件名有了【.BIN】的后缀如图11,说明我猜想的没有问题。

如图11
4.总结
生成BIN文件的整体操作其实很简单,但是在网上找不到相关的教程,所以就写了一篇,对于文中提到的【分散加载文件】的教程网上也比较少,网上都是一些官方的说明,下一篇我写一下【分散加载文件】的使用,让你灵活分配内存。当然对于这篇**有任何问题欢迎拍砖,有困难的童鞋也可以【查看我的资料】联系我,顺便提一下我接外包,谢谢!!!

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 10.00 元 2021-01-06
理由:恭喜通过原创文章审核!请多多加油哦!

评论
二哲科技 2021-1-19 13:34 回复TA
@电子小网虫 :对的! 
电子小网虫 2021-1-18 14:29 回复TA
用来远程升级还是有用的 

相关帖子

沙发
yangjiaxu| | 2021-1-1 22:36 | 只看该作者
这个生成BIN文件一般还是有些示例的,不过一般都直接通过仿真器下载了 就不习惯生成bin文件,如果需要远程升级啥的 就有必要了

使用特权

评论回复
板凳
二哲科技|  楼主 | 2021-1-2 10:26 | 只看该作者
yangjiaxu 发表于 2021-1-1 22:36
这个生成BIN文件一般还是有些示例的,不过一般都直接通过仿真器下载了 就不习惯生成bin文件,如果需要远程 ...

网上基本都是生成单个ROM的示例,多个我查找的时候没找到,就自己弄了一下。这次确实主要是用来无线升级。

使用特权

评论回复
地板
leaproud| | 2021-1-2 17:43 | 只看该作者
厉害!

使用特权

评论回复
5
改名了| | 2021-1-5 14:20 | 只看该作者
加油

使用特权

评论回复
6
caizhiwei| | 2021-1-10 16:38 | 只看该作者
没看懂,一次编译可以生成2个bin文件吗?

使用特权

评论回复
7
二哲科技|  楼主 | 2021-1-11 09:36 | 只看该作者
caizhiwei 发表于 2021-1-10 16:38
没看懂,一次编译可以生成2个bin文件吗?

这个教程是生成两个,还可以多个!

使用特权

评论回复
8
ilymqdh| | 2021-1-20 13:48 | 只看该作者
软件安装程序分享一下呗,谢谢

使用特权

评论回复
9
二哲科技|  楼主 | 2021-1-21 09:13 | 只看该作者
ilymqdh 发表于 2021-1-20 13:48
软件安装程序分享一下呗,谢谢

你指的是哪个?

使用特权

评论回复
10
Capital海| | 2021-1-25 10:10 | 只看该作者
厉害了,正在解决这个问题。  您好,还想请教一下,使用TOUCHGFX 生成代码有点大,使用Jlink下载都要5分钟左右,您也是这样嘛?(我一个png图片80k,生成的代码查看map占用了1M的空间)

使用特权

评论回复
11
二哲科技|  楼主 | 2021-1-26 09:13 | 只看该作者
Capital海 发表于 2021-1-25 10:10
厉害了,正在解决这个问题。  您好,还想请教一下,使用TOUCHGFX 生成代码有点大,使用Jlink下载都要5分钟 ...

下载时间久这个问题没办法,不过五分钟有点夸张吧,如果只下载内部Flash基本只要一分钟内,只要不修改素材(图片、文字、文本等),外部的可以不必每次都下载。

使用特权

评论回复
发新帖 本帖赏金 10.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

173

帖子

2

粉丝