0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于MDK编译器AC5与AC6切换的问题

冬至子 来源:梅江松子 作者:梅江松子 2023-10-16 14:16 次阅读

1.jpg

如上图所示,作者将一个工程从AC5切换到AC6后,出现编译报错。

原因是在AC5环境下,部分源文件 #include "cmsis_armcc.h"头文件,此头文件是AC5编译器下使用的。

在AC6编译器环境下,需替换成 #include "cmsis_armclang.h"文件

同时宏 __CC_ARM __ARMCC_VERSION 分别是使用AC5和AC6编译器时,MDK定义的两个全局宏

#if defined(__ARMCC_VERSION)
#include "cmsis_armclang.h"
#elif defined(__ARMCC_VERSION)
#include "cmsis_armcc.h"
#endif

即可通过这两个宏控制头文件包含

在官方的BSP board.h 文件中也有对这两个宏的引用

#if defined(__CC_ARM) || defined(__ARMCC_VERSION)
extern int Image
RW_IRAM1
Limit;
#define HEAP_BEGIN ((void *)&Image

RW_IRAM1

Limit)
#elif ICCARM
#pragma section = "CSTACK"
#define HEAP_BEGIN (__segment_end("CSTACK"))
#else
extern int __bss_end;
#define HEAP_BEGIN ((void *)&__bss_end)
#endif
#define HEAP_END STM32_SRAM_END

补充:

使用scons —target=mdk5 创建MDK5工程 是基于 BSP目录下template工程建立的,在template工程中设置编译器版本为AC6

1.jpg

2.jpg

生成的MDK工程也会是AC6,但是有一个问题就是编译后进行debug,程序无法进入

#ifdef __ARMCC_VERSION
extern int Super$main(void);
/* re-define main function */
int Sub$main(void)
{
rtthread_startup();
return 0;
}

必须先手动改成AC5,然后再改回AC6,才行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM技术
    +关注

    关注

    0

    文章

    20

    浏览量

    7224
  • MDK5
    +关注

    关注

    0

    文章

    10

    浏览量

    5679
收藏 人收藏

    评论

    相关推荐

    Keil使用AC6编译提示CUDA版本过高怎么解决?

    今晚搞 ToughGFX 最后快成功了 ,Keil 编译又提示: *** Using Compiler \'V6.14\', folder: \'D:Keil_v5
    发表于 04-11 07:56

    请问TouchGFX如何用AC6编译器呢?

    最近几天 研究了下AC6编译器 ,想使用AC6 编译TouchGFX, 用ArmV5 编译 工程
    发表于 04-11 07:36

    使用mdkac6编译器一直报错是怎么回事?

    使用mdkac6编译器一直报错
    发表于 04-10 06:01

    printf在keil5AC6编译器下运行进入死循环的原因?

    Initialization ...n\");把信息显示在屏幕上,用AC5编译时运行正常,但是编译速度太慢;而用AC6编译时,速度快,但运
    发表于 04-07 06:46

    STM32CubeMX生成FreeRTOS的MDK工程不支持AC6编译器吗?

    使用STM32CubeMX生成FreeRTOS的MDK工程,选择AC5编译器可以编译成功,选择AC6编译
    发表于 03-06 08:24

    编译器的优化选项

    一个程序首先要保证正确性,在保证正确性的基础上,性能也是一个重要的考量。要编写高性能的程序,第一,必须选择合适的算法和数据结构;第二,应该编写编译器能够有效优化以转换成高效可执行代码的源代码,要做到
    的头像 发表于 11-24 15:37 413次阅读
    <b class='flag-5'>编译器</b>的优化选项

    基于ARM编译器版本5的工程迁移与适配到ARM编译器版本6.12

    AC5AC6的主要差异是AC6使用armclang代替了armcc,因此在AC6中就没有armcc这个编译工具了。并且armclang的
    的头像 发表于 11-12 11:17 7516次阅读
    基于ARM<b class='flag-5'>编译器</b>版本5的工程迁移与适配到ARM<b class='flag-5'>编译器</b>版本6.12

    MDK编译STM32F4开发板例程很慢是为什么?

    MDK编译STM32的HAL库确实是比较慢的,如果想使得编译速度更快,可以考虑使用编译器版本6编译
    发表于 10-24 07:53

    FAQ0115使用AC6编译器注意事项

    使用AC6编译器注意事项在使用ARM Compiler version 6AC6)时,可能会出现如下情形之一
    发表于 10-23 08:06

    Keil修改ARM编译器及配置方法

    Keil MDK自 V5.36 版本之后,默认就不带 Arm Compiler V5版本编译器。如果需要使用 V5 版本编译器,就需要自己下载并安装。
    发表于 09-19 10:41 2247次阅读
    Keil修改ARM<b class='flag-5'>编译器</b>及配置方法

    ARM编译器5.06版入门指南

    的ARMLINK支持的所有功能。 如果您使用ARM编译器作为独立产品,则默认使用32位版本。 对于DS-5中的ARM编译器,链接版本取决于主机平台。 32位工具具有32位链接
    发表于 08-23 07:25

    Arm编译器嵌入式FuSa 6.16.2版LTS用户指南

    和ARM Keil MDK的一个组件。 或者,您可以将用于Embedded Fusa 6的ARM编译器作为独立产品使用。 用于嵌入式FUSA 6的ARM
    发表于 08-18 06:42

    浅浅的出个无线AC的教程

    我们知道华三的最新模拟器支持了无线AC的配置,今天就浅浅的出个无线AC的教程,你上也会的那种。
    的头像 发表于 08-15 11:30 1070次阅读
    浅浅的出个无线<b class='flag-5'>AC</b>的教程

    如何在Windows 10上安装C编译器

    我想学习c,据我所知,我需要ac编译器。但是那里似乎有一些。在寻找教程时,我看到的最多的是 minGW 和 gcc,我不太确定该怎么做。有什么好的方法可以让 c 进入你的电脑吗?
    发表于 06-08 06:31

    使用ARMClang V6版本编译器出现错误的解决方法

    很多STM32开发者使用ARM mdk IDE进行开发,我们知道ARM MDK IDE早已推出ARMClang V6版本的编译器了。不过,当我们把在V5版本经ARMCC编译通过的工程文
    的头像 发表于 06-07 12:32 3331次阅读
    使用ARMClang V6版本<b class='flag-5'>编译器</b>出现错误的解决方法