Keil5使用AC6编译后,生成bin文件变为生成文件夹的解决办法

  • KEIL AC5到AC6需要注意的地方
  • 从AC5移植到AC6
  • 解决流程
  • 关键步骤

最近同事咨询改用keil的最新版本编译器编译原来的程序后,出现了报警以及生成bin文件异常的情况(源程序为IAP升级程序app程序部分)。经过查找相关资料后,问题得到解决。现在将该过程记录如下。

KEIL AC5到AC6需要注意的地方

Keil5 目前安装完毕编译选项会出现两种不同的编译器

从AC5移植到AC6

Keil官方有一个文档特别针对这个有说明,具体链接如下
https://www.keil.com/appnotes/files/apnt_298.pdf

解决流程

原工程为CORTEX M0的IAP升级的APP程序,因为cortexM0在执行跳转时需要将中断跳转地址复制到RAM内才能实现跳转(这一点和cortexM3有很大不同)。原工程选择的AC5编译版本,采用的绝对地址定义如下:

__IO uint32_t VectTable[VECTOR_SIZE] __attribute__((at(APP_VectStoreAddr)));

采用V6.14版本即AC6编译后,由于编译器不同,keil会提示“warning: unknown attribute ‘at’ ignored [-Wunknown-attributes]“。针对AC6在keil的官方文档提到的信息,我们可以采用如下代码来替换之前的at方式达到指定存储地址的目的。

__IO uint32_t VectTable[VECTOR_SIZE] __attribute__((section(".ARM.__at_0x20000000")));

或者

#define APP_VectStoreAddr "0x20000000"
__IO uint32_t VectTable[VECTOR_SIZE] __attribute__((section(".ARM.__at_"APP_VectStoreAddr)));

做出如上修改后,采用AC6能够正常编译,使用
fromelf.exe --bin --output $L@L.bin $L@L.axf 命令会在输出目录下生成一个.bin的目录,目录内含有以下两个文件。

关键步骤

这个时候需要将target设置选项下的iram地址分成两段写,如图位置

具体设置的大小要根据实际规划的内容区域进行相应的设置。
设置完毕后,先删除object目录下的文件,然后点击编译,则可以正常生成bin文件。
通过对比是否增加IRAM1和IRAM2的内容后生成的sct文件可以看出一定的差别

个人理解:由于采取在定义绝对位置时采用了section的办法,编译器会将程序分成两个区域来对待,而在target界面之前我们仅仅指定义了个偏移量,原来程序空间前面保留部分未进行强制定义,导致使用fromelf.exe无法正确执行生成bin操作。在target界面显示的进行区域设定后,问题得到了解决。仅为个人理解,可能存在错误,还望大家能够帮忙指正。

(参考链接)

https://www.keil.com/support/docs/4030.htm
https://blog.csdn.net/ybhuangfugui/article/details/109375969

Keil5使用AC6编译后,生成bin文件变为生成文件夹的解决办法相关推荐

  1. 编译提示“/usr/bin/ld: cannot find -lgflags-shared“错误的解决办法

    先看的这一篇博客: Linux下编译程序/usr/bin/ld: cannot find -l*错误的解决方法 一般的出现 /usr/bin/ld: cannot find -lxxx 这种错误的时候 ...

  2. java 源码哪个文件夹_JAVA项目——项目编译后的类路径和源码文件夹图解

    JAVA项目--项目编译后的类路径和源码文件夹图解 前言: 一定要很清楚哪个是源码文件夹,哪个是类路径以及类路径的形成机制. 项目编译后不同的源码文件夹会被合并到bin目录下,形成类路径.不同的源码文 ...

  3. 关于texpad编译后无法找到目录的.toc文件

    关于texpad编译后无法找到目录的.toc文件的问题,是因为texpad对编译生成的一些文件主动隐藏了,这时只需要点击软件左上角的文件夹图标,寻找即可.

  4. Qt直接运行生成的exe文件提示“缺少Qt5Core.dll”的解决办法

    Qt直接运行生成的exe文件提示"缺少Qt5Core.dll"的解决办法 [错误描述] 在QtCreator下,程序可以正常运行,但是当关闭QtCreator后,在"de ...

  5. 自己动手编译QGIS 3.18源代码,含出错大全和解决办法

    从2月19日开始打包,到2月23日,QGIS 3.18的安装包经过漫长的4天才完成打包,在这等待的4天里,大家有没有像我一样萌生出自己动手编译源代码的想法呢?今天想分享的是QGIS3.18源代码编译的 ...

  6. 关于程序集生成失败 -- 引用的程序集没有强名称的解决办法

    关于程序集生成失败 -- 引用的程序集没有强名称的解决办法 我在PetShop4程序中加入了一个业务外观层,然后在业务逻辑层(PetShop.BLL)引用这个程序集,点"生成",出 ...

  7. E: Sub-process /usr/bin/dpkg returned an error code (1)解决办法

    E: Sub-process /usr/bin/dpkg returned an error code (1)解决办法 安装libapache2-svn出现了这个错误,是由于apt-get安装软件时出 ...

  8. 未能找到路径“\bin\roslyn\csc.exe”的一部分 的解决办法

    在Visual Stuido中从Git或SVN迁出Asp.Net MVC项目到本地,编译运行时经常遇到如下问题: 未能找到路径"\bin\roslyn\csc.exe"的一部分 在 ...

  9. keil5报警告warning:implicit declaration ‘xxxxxxxx’ is invalid in C99 大部分解决办法

    keil5报警告warning:implicit declaration 'xxxxxxxx' is invalid in C99 大部分解决办法 我遇到这个问题是在RM战队调裁判系统的时候遇到的. ...

最新文章

  1. 基于python的人工智能Jiagu深度学习自然语言处理开源工具
  2. sql server 2008数据复制
  3. mysql实现gb18030转utf8_将编码是GB18030的小文件转为UTF8
  4. html 图片墙效果,基于html5实现的图片墙效果
  5. yum mysql安装 日志_yum 安装与使用MySQL
  6. 支付宝、财付通、网银、百度钱包、京东钱包接口费率
  7. 超详细的Python面向对象编程讲解
  8. PS教程 | 美女面部剥落碎片效果
  9. python爬虫之QQ空间登陆获取信息(超级详细)
  10. 【转载】Linux下用dd命令扇区读写SD卡
  11. 期权、期货和权证比较
  12. GIT提交代码到远程创库
  13. 南京邮电大学——陈健教授
  14. CentOS8安装与配置jdk1.8 与远程分发复制jdk到另一个虚拟机
  15. jiffies与HZ、定时器、原子操作
  16. java 中常用框架、intell idea简单使用、爬虫系统
  17. RHCA 8环境说明
  18. 乐鑫Esp32学习之旅14 esp32 sdk编程实现门户强制认证,连接esp32热点之后,自动强制弹出指定的登录html界面。(附带Demo)
  19. Android自定义View之年度账单曲线图
  20. 林萧谈如何进入BAT

热门文章

  1. cadence SPB17.4 - allegro - 区域规则设置 - 以smd_pin_to_smd_pin为例
  2. android 简书饿了么,饿了吗
  3. 网络硬件知识个人汇总
  4. 在失意之时内心也要有一份诗意
  5. sqlite查询慢的问题
  6. 当爱吐槽的美女遇到羊驼,话多会被羊驼怼,这种短视频如何配音
  7. [BEV] 学习笔记之BEVDet(原理+代码解析)
  8. iphone通讯录恢复
  9. Vue 中的 Render 全面详解 (渲染函数 JSX)
  10. 女程序员的键盘,你一定没见过!