专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

eclipse配置Freescale FRDM-KL25Z开发板环境

作者:未知   来源:互联网   点击数:  更新时间:2014年08月16日   【字体:

Kineties-L32位的微处理器家族,基于ARM Cortex M0+。我手上有一个FRDM-KL25Z的开发板,官方有一个基于eclipseIDE——CodeWarrior,可以很方便地进行编译、下载、调试。但是不足的是免费版本的CodeWarrior不能很方便地使用C++,如图,当我选择C++时就不能选择Device Initialization或者Processor Expert了。


不过好在虽然不会自动生成初始化文件,但是链接文件以及起始文件是可以生成的。
我们使用eclipse来配置一个纯净的KL25Z的开发环境:
 
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程序了。
 
2、  安装eclipse:
a)         访问http://www.eclipse.org/downloads/
b)         下载Eclipse IDE for C/C++Developers
c)         解压即可使用。(前提是已经安装JDK
 
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_HeadersProject_SettingSources


b)         加入CodeWarriorC工程生成的CPU初始化代码,目录为Generated_Code,将CodeWarrior中工程下的Sources目录下的Events.cEvents.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:\Freescale\CW MCU v10.3\MCU\ARM_GCC_Support\ewl\EWL_C\include"
"D:\Freescale\CW MCU v10.3\MCU\ARM_GCC_Support\ewl\EWL_C++\include"
"D:\Freescale\CW MCU v10.3\MCU\ARM_GCC_Support\ewl\EWL_Runtime\include"
其中后面三个在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:\Users\wangqi\workspace-cpp\cpp\Project_Settings\Linker_Files\MKL25Z128_flash.ld
   
n)         Libraries
Library search path中写入库文件的路径:
"D:\Freescale\CW MCU v10.3\MCU\ARM_GCC_Support\ewl\lib\armv6-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
  
关闭窗口

相关文章