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

    文章

    22

    浏览量

    7642
  • MDK5
    +关注

    关注

    0

    文章

    10

    浏览量

    6035
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    nano版本使用AC6编译器下,不显示msh怎么解决?

    ;gt; 字符串。 排查问题大概猜测应该是 FinSH 根本就不工作,主要原因很可能是 AC6 版本没有把FinSH那些代码编译到最终的bin文件。 网上说要修改链接文件,但是网上的资源都是gcc编译器的链接文件。 暂时不知道
    发表于 09-25 07:19

    rt_list_for_each_entry编译失败怎么解决?

    ,这个宏是在rtservice.h中定义的 网上搜了一遍,有好心的网友说可以在AC5编译器里增加—gnu 我尝试了一下行不通,AC6编译器AC
    发表于 09-18 07:14

    如何在Keil中将NuMicro BSP从Arm编译器5迁移到编译器6

    在Keil中将NuMicro BSP从Arm编译器5迁移到编译器6
    发表于 08-20 06:29

    使用STM32CubeMX生成FreeRTOS的MDK工程,选择AC6编译器有很多错误,为什么?

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

    STM32H750VBT6程序只有在调试时可以运行,为什么?

    最近在调试 STM32H750VBT6 时遇到程序只有在调试时可以运行,虽然勾选了 rest and run ,但下载完任然不运行。检查了 boot 和 reset 电压均正常。最后,是用了 AC5 编译一遍后下载,就解决了问题
    发表于 03-07 06:19

    什么样的代码会被编译器优化

    现在的编译器有多智能,可能你辛辛苦苦写的代码,在编译器看来就是几句废话,直接被删除掉。
    的头像 发表于 01-16 16:38 928次阅读

    Triton编译器与GPU编程的结合应用

    Triton编译器简介 Triton编译器是一种针对并行计算优化的编译器,它能够自动将高级语言代码转换为针对特定硬件优化的低级代码。Triton编译器的核心优势在于其能够识别并行模式,
    的头像 发表于 12-25 09:13 1309次阅读

    Triton编译器如何提升编程效率

    在现代软件开发中,编译器扮演着至关重要的角色。它们不仅将高级语言代码转换为机器可执行的代码,还通过各种优化技术提升程序的性能。Triton 编译器作为一种先进的编译器,通过多种方式提升编程效率,使得
    的头像 发表于 12-25 09:12 1186次阅读

    Triton编译器的优化技巧

    在现代计算环境中,编译器的性能对于软件的运行效率至关重要。Triton 编译器作为一个先进的编译器框架,提供了一系列的优化技术,以确保生成的代码既高效又适应不同的硬件架构。 1. 指令选择
    的头像 发表于 12-25 09:09 1805次阅读

    Triton编译器的优势与劣势分析

    Triton编译器作为一种新兴的深度学习编译器,具有一系列显著的优势,同时也存在一些潜在的劣势。以下是对Triton编译器优势与劣势的分析: 优势 高效性能优化 : Triton编译器
    的头像 发表于 12-25 09:07 1856次阅读

    Triton编译器在机器学习中的应用

    1. Triton编译器概述 Triton编译器是NVIDIA Triton推理服务平台的一部分,它负责将深度学习模型转换为优化的格式,以便在NVIDIA GPU上高效运行。Triton编译器支持
    的头像 发表于 12-24 18:13 1617次阅读

    Triton编译器支持的编程语言

    Triton编译器支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译器通过Python接口提供了对Triton语言和编译器的访问,使得用户可以在Python环境中
    的头像 发表于 12-24 17:33 1444次阅读

    Triton编译器与其他编译器的比较

    Triton编译器与其他编译器的比较主要体现在以下几个方面: 一、定位与目标 Triton编译器 : 定位:专注于深度学习中最核心、最耗时的张量运算的优化。 目标:提供一个高度抽象、灵活、高效
    的头像 发表于 12-24 17:25 1570次阅读

    Triton编译器功能介绍 Triton编译器使用教程

    Triton 是一个开源的编译器前端,它支持多种编程语言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一个可扩展和可定制的编译器框架,允许开发者添加新的编程语言特性和优化技术
    的头像 发表于 12-24 17:23 2667次阅读

    分享关于编译器的科普

    源代码分析工具和IDE集成。GCC被构建成一个单一的静态编译器,这使得它非常难以被作为API并集成到其他工具中。 GCC比Clang支
    的头像 发表于 12-09 09:49 901次阅读