keil设置程序起始地址及生成bin文件的方法

这篇具有很好参考价值的文章主要介绍了keil设置程序起始地址及生成bin文件的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.keil设置程序起始地址

1.1FLASH APP 的起始地址设置

随便打开一个之前的实例工程,点击 Options for Target→Target 选项卡

keil设置程序起始地址及生成bin文件的方法

默认的条件下,图中 IROM1 的起始地址(Start)一般为 0X08000000,大小(Size)为 0X80000, 即从 0X08000000 开始的 512K 空间为我们的程序存储区。而图中,我们设置起始地址(Start) 为 0X08020000,即偏移量为 0X20000(128K 字节),因而,留给 APP 用的 FLASH 空间(Size)只有 0X80000-0X20000=0X60000(384K 字节)大小了。设置好 Start 和 Szie,就完成 APP 程序的起始地址设置。

这里的 128K字节,需要大家根据 Bootloader 程序大小进行选择,比如我们本章的 Bootloader 程序为 70K左右,理论上我们只需要确保 APP 起始地址在 Bootloader之后,并且偏移量为 0X200 的倍数即可(相关知识,请参考:http://www.openedv.com/posts/list/392.htm)。这里我们选择 128K(0X20000)字节,留了一些余量,方便 Bootloader 以后的升级修改。

1.2这是针对 SRAM APP 的起始地址设置

起始地址设置如图

keil设置程序起始地址及生成bin文件的方法

这里我们将 IROM1 的起始地址(Start)定义为:0X20001000,大小为 0X14000(80K 字 节),即从地址 0X20000000 偏移 0X1000 开始,存放 APP 代码。因为整个 STM32L475VET6 的SRAM1大小(不算SRAM2)为96K字节,所以IRAM1(SRAM1)的起始地址变为0X20015000, 大小只有 0X3000(12K 字节)。这样,整个 STM32L475VET6 的 SRAM1(不含 SRAM2)分配 情况为:最开始的 4K 给 Bootloader 程序使用,随后的 80K 存放 APP 程序,最后 12K,用作 APP 程序的内存。这个分配关系大家可以根据自己的实际情况修改,不一定和我们这里的设置 一模一样,不过也需要注意,保证偏移量为 0X200 的倍数(我们这里为 0X1000)。

1.3中断向量表的偏移量设置方法

在系统启动的时候,会首先调用 SystemInit 函数初始化时钟系统,同时 SystemInit 还完成了中断向量表的设置,我们可以打开 SystemInit 函数,看看函数体的结尾处有 这样几行代码:

keil设置程序起始地址及生成bin文件的方法

从 代 码 可 以 理 解 , VTOR 寄 存 器 存 放 的 是 中 断 向 量 表 的 起 始 地 址 。 默 认 的 情 况

VECT_TAB_SRAM 是没有定义,所以执行 SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; 对于 FLASH APP,我们设置为 FLASH_BASE+偏移量 0x20000,所以我们可以在 SystemInit 函数里面修改 SCB->VTOR 的值。当然为了尽可能不修改系统级别文件,我们可以也可以在 FLASH APP 的 main 函数最开头处添加如下代码实现中断向量表的起始地址的重设:

SCB->VTOR = FLASH_BASE | 0x20000;

以上是 FLASH APP 的情况,当使用 SRAM APP 的时候,我们设置起始地址为: SRAM_BASE+0x1000,同样的方法,我们在 SRAM APP 的 main 函数最开始处,添加下面代码:

SCB->VTOR = SRAM_BASE | 0x1000;

这样,我们就完成了中断向量表偏移量的设置。通过以上两个步骤的设置,我们就可以生成 APP 程序了,只要 APP 程序的 FLASH 和 SRAM 大小不超过我们的设置即可。

二.keil生成bin文件的方法

我们通过 MDK 自带的格式转换工具 fromelf.exe,来实现.axf 文件到.bin 文件的转换。该工具在 MDK 的安装目录\ARM\ARMCC\BIN 文件夹里面。

fromelf.exe 转换工具的语法格式为:fromelf [options] input_file。其中 options 有很多选项可 以设置。

我们通过在 MDK 点击 Options for Target→User 选项卡,在 After Build/Rebuild 栏, 勾选 Run #1,并写入:fromelf --bin --output "$L@L.bin" "#L",如图:

keil设置程序起始地址及生成bin文件的方法

通过这一步设置,我们就可以在 MDK 编译成功之后,调用 fromelf.exe,根据当前工程的 RTC.axf,生成一个 RTC.bin 的文件(比较便捷)。并存放在 axf 文件相同的目录下,即工程的 OBJ 文件夹里 面。在得到.bin 文件之后,我们只需要将这个 bin 文件传送给单片机,即可执行 IAP 升级。

提示:如果想根据具体实际文件路径生成bin的指令如

D:\tools\MDK5.2\ARM\ARMCC\bin\fromelf.exe --bin -o ..\OBJ\RTC.bin ..\OBJ\RTC.axf

调用 fromelf.exe(注意,我的 MDK 是安装在 D:\tools\MDK5.2 文件夹下,如果你是安装在其他目录,请根据你自己的目录修改 fromelf.exe 的路径),根据当前工程的 RTC.axf,生成一个 RTC.bin 的文件。并存放在 axf 文件相同的目录下。文章来源地址https://www.toymoban.com/news/detail-484864.html

到了这里,关于keil设置程序起始地址及生成bin文件的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32】Keil5中生成bin文件

    一、打开魔术棒  二、点击“User”,勾选After Build的Run#1 三、 添加fromelf文件的路径(若fromelf文件路径未添加到环境变量,请在这里添加详细的路径。例如: D:keil5ARMARMCCbinfromelf.exe  --bin  --output ..OBJIAP.bin ..OBJIAP.axf)  四、一定要注意格式!!! ① ..OBJIAP.bin  其中“

    2024年02月05日
    浏览(79)
  • ESP32 bin文件生成及多个bin文件合并指南

    在ESP32开发过程中,对于我们实际的开发人员来说,将程序烧录进入ESP32内不是什么复杂的事情,直接输入 idf.py flash 指令即可实现,但是当我们开发完成之后,如何将对应的bin文件提供给测试人员进行相应的测试,以及如何提供bin文件给到产线进行生产呢? 通常将工程文件直

    2024年02月09日
    浏览(68)
  • MDK Keil查看map文件及编译占用内存信息、函数入口地址

    一、在哪里打开map文件查看 (1)第一种,在keil软件下,双击你的工程名,map就会弹出 (2)第二种,点击魔术棒,查看 Lis文件输出的位置入口 我的在output...文件下,那我们工程的文件夹下,找到output 二、查看map文件信息 (1)函数定义的位置信息 如图,这些你定义函数的

    2024年02月05日
    浏览(48)
  • Keil5如何生成反汇编文件

    在Keil5界面下点击选项,选择“User”,勾选“After Build/Rebuild”中“RUN #1”,复制 fromelf --text -a -c --output=xxx.dis xxx.axf 在Linker栏中找到“Linker Control string”里最后-o后的.axf文件,将其复制下来替换第一步语句中的xxx.axf,然后点击OK 再次编译生成xxx.dis反汇编文件

    2024年02月01日
    浏览(53)
  • Linux系统移植二:生成fsbl引导文件并制作BOOT.bin(非petalinux版)

    对于ZYNQ而言,在引导过程中,先运行FSBL来设置PS,然后运行U-Boot用于加载Linux内核映像并引导Linux Linux系统移植一:移植U-BOOT 添加自己的板子并编译(非petalinux版) 一文中已成功生成了u-boot文件 然后将u-boot文件重命名为u-boot.elf mv u-boot u-boot.elf 备用 生成BOOT.BIN文件还需要fs

    2023年04月09日
    浏览(34)
  • KEIL快捷键+自定义快捷键设置方法

    快捷键 keil专用 快捷键 keil专用 Ctrl + l 删除当前行 tab 将选中内容整体右移 Ctrl + N 新建文件 shift + tab 将选中内容整体左移 Ctrl + O 打开文件 home 光标移到行首 Ctrl + S 保存文件 end 光标移到行末 Ctrl + u 选择内容全变小写 F2 跳转到下一个书签 Ctrl + ←→ 快速横移光标 F5 运行 Ctr

    2024年02月11日
    浏览(51)
  • mac ppt设置起始页码

    今天发现我的ppt的左边ppt的缩略图的开始页码是从2开始的,觉得很奇怪,这个解决的办法就是 点击ppt-文件-页面设置-页眉和页脚-幻灯片编号

    2024年02月12日
    浏览(44)
  • 【uniapp 动态设置 起始页 默认展示页面 】

    在开发一次uiapp app时,需要动态设置起始页,默认展示页,没有登录去登录页,登录了去首页 因为uniapp 是 pages 的第一个是默认页 所以这里我们需要处理 一下才能完美的实现。 1:manifest.json 设置app 的启动页 也就是最开始 转圈的那个页面 不要他自动关闭 设置了这一步后,

    2024年02月12日
    浏览(38)
  • 【FPGA】51的IP核烧进FPGA,配合keil生成的.hex文件调试

    IP核:89C51 FPGA芯片类型:EP4CE6E22CN8 FPGA_LED12 交替亮灭 灯 先创建 工程1 生成 51IP核 的 原理图符号 ,供 工程2 使用。再建另一个 工程2 创建原理图,把所需要的 符号 都添加进来 或者 利用 宏功能 生成添加。(除了51IP核,其余的都可以利用 宏功能 生成添加)再将其烧录进FP

    2023年04月17日
    浏览(38)
  • 关于STM32生成Bin文件,出现Error: Q0122E: Could not open file问题小结

    目录 1.出现这一个问题的主要表现为,编译器找不到该文件的路径。 2.注意         解决方法1:添加绝对路径:          2.解决方法2:直接添加                          C:Keil_v5ARMARMCCbinfromelf.exe这个文件路径要修改成自己Keil文件夹的路径位置。 在绝对路径

    2024年01月25日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包