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

电子说

1.2w人已加入

描述

ARM技术

如上图所示,作者将一个工程从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

ARM技术

ARM技术

生成的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,才行。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分