如上圖所示,作者將一個工程從AC5切換到AC6后,出現(xiàn)編譯報錯。
原因是在AC5環(huán)境下,部分源文件 #include "cmsis_armcc.h"頭文件,此頭文件是AC5編譯器下使用的。
在AC6編譯器環(huán)境下,需替換成 #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
補(bǔ)充:
使用scons —target=mdk5 創(chuàng)建MDK5工程 是基于 BSP目錄下template工程建立的,在template工程中設(shè)置編譯器版本為AC6
生成的MDK工程也會是AC6,但是有一個問題就是編譯后進(jìn)行debug,程序無法進(jìn)入
#ifdef __ARMCC_VERSION
extern int Super$main(void);
/* re-define main function */
int Sub$main(void)
{
rtthread_startup();
return 0;
}
必須先手動改成AC5,然后再改回AC6,才行。
-
ARM技術(shù)
+關(guān)注
關(guān)注
0文章
22瀏覽量
7290 -
MDK5
+關(guān)注
關(guān)注
0文章
10瀏覽量
5740
發(fā)布評論請先 登錄
相關(guān)推薦
評論