1、 安装交叉编译工具:
a) 首先安装交叉编译工具,推荐使用Codesourcery。
http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/
b) 选择ARM processors,点击Download the EABI Release,在随后的页面中注册账户(有账户的话直接登录),下载链接会发送到你注册的邮箱中。
c) 然后下载,安装。
d) 安装完毕后就能在命令行下编译ARM程序了。
3、 安装GNU ARM Eclipse Plug-in
这是一个eclipse的插件,装上这个插件之后,eclipse就能够编译ARM程序了。
a) 在eclipse中点击Help->Install New Software,输入
http://gnuarmeclipse.sourceforge.net/updates/
b) 安装成功后就能使用GNU ARM Eclipse插件了。
4、 新建C++工程
a) 输入工程名
b) 工程类型选择ARM Cross Target Application->Empty Project
c) 工具链选择ARM Windows GCC (Sourcery G++ Lite)
d) 点击Next->Finish,工程新建完成。如图所示
5、 加入程序代码
a) 首先加入在CodeWarrior中新建C++工程时生成的代码,包括三个目录:Project_Headers、Project_Setting、Sources
b) 加入CodeWarrior为C工程生成的CPU初始化代码,目录为Generated_Code,将CodeWarrior中工程下的Sources目录下的Events.c、Events.h复制到eclipse工程下的Sources目录下。将ProcessorExpert.c中的内容复制到main.cpp中。
6、 配置工程
因为CodeWarrior也是使用eclipse来配置工程的,所以可以参照CodeWarrior来配置工程。
a) 在工程文件夹上单击右键,选择Properties。在弹出的对话框中选择C/C++ Build->Setting。
b) Target Processor:
Processor: cortex-m0
Endiannes: Little Endian (-mlittle-endian)
Float ABI: Library (-mfloat-abi=soft)
c) Debugging
Debug level: Maximum (-g3)
Debug format: dwarf-2
Other debugging flags: -gstrict-dwarf
d) Additional Tools
e) ARM Sourcery Windows GCC Assembler
Command line pattern:
${COMMAND} ${INPUTS} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT}
f) ARM Sourcery Windows GCC C Compiler
因为eclipse会根据源文件的后缀名来判断使用gcc还是g++,为了统一使用g++来编译程序,将Command修改为arm-none-eabi-g++。
Command line pattern:
${COMMAND} ${INPUTS} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT}
g) Preprocessor
将Do not search system directories (-nostdinc)打钩
h) Directories
加入Include路径:
"${workspace_loc:/${ProjName}/Project_Headers}"
"${workspace_loc:/${ProjName}/Sources}"
"${workspace_loc:/${ProjName}/Generated_Code}"
"${workspace_loc:/${ProjName}/Project_Settings/Startup_Code}"
"D:FreescaleCW MCU v10.3MCUARM_GCC_SupportewlEWL_Cinclude"
"D:FreescaleCW MCU v10.3MCUARM_GCC_SupportewlEWL_C++include"
"D:FreescaleCW MCU v10.3MCUARM_GCC_SupportewlEWL_Runtimeinclude"
其中后面三个在CodeWarrior的安装目录下。
i) Optimization
在Function sections (-ffunction-sections)和Data sections (-fdata-sections)前打钩
j) Miscellaneous
在Other flags写入:-c -fmessage-length=0 -Iinclude -include lib_ewl_c++.prefix
k) ARM Sourcery Windows GCC C++ Compiler
和前面的ARM Sourcery Windows GCC C Compiler配置相同。
l) ARM Sourcery Windows GCC C++ Linker
Command line pattern:
${COMMAND} ${INPUTS} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT}
m) ARM Sourcery Windows GCC C++ Linker
Script file (-T)中写入工程中的链接文件
C:Userswangqiworkspace-cppcppProject_SettingsLinker_FilesMKL25Z128_flash.ld
n) Libraries
Library search path中写入库文件的路径:
"D:FreescaleCW MCU v10.3MCUARM_GCC_Supportewllibarmv6-m"
o) Miscellaneous
Linker flags (-Xlinker [option])中写入:
--undefined=__pformatter_
--defsym=__pformatter=__pformatter_
--start-group
-lc++ -lrt -lsupc++ -lc -lgcc -luart
--end-group
Other flags中写入:
-n
7、 修改程序
此时如果运行程序会发生这样的错误:
问题出在Vector.c中,打开Vector.c文件寻找__thumb_startup(void)声明。
将extern void __thumb_startup( void );改成extern "C" void __thumb_startup( void );
8、 将elf文件转化成bin文件
点击工程目录右键,选择Properties->C/C++ Build->Setting->Build Steps
在Post-build steps一项的Command中输入
arm-none-eabi-objcopy -O binary -S cpp.elf cpp.bin