用Eclipse替代Keil&IAR来开发ARM应用
本帖最后由 MAN 于 2013-11-29 22:51 编辑按惯例,这篇帖子还是以索引为主。
我使用Eclipse来开发c/c++,一是对Keil/IAR的界面及其不满,还停留在20世纪的界面风格,连个自动代码不全都没有!二来公司预算有限,Keil/IAR一个license就得5,6万人刀,现在有免费的用,何乐而不为呢,况且几个月评估下来,Eclipse绝对是把利器!下面,我争取用5句话来把安装说完。
1、花点小钱把你的机器升级下。Eclipse的缺点是基于Java,对开发机要求高。建议换个SSD硬盘,编译速度立马提升50%。内存4G以内的话开两三个Eclipse窗口无压力,想要更猛一些,建议升级到8G或更高。
2、到http://www.eclipse.org/downloads/下载最新的Eclipse IDE for C/C++ Developers。注意是C/C++版本,不是标准版,标准版的话你还得自己装C/C++的若干插件。截止发帖,Eclipse最新版本叫Kepler,140M的压缩包,解压缩后直接运行eclipse.exe即可,无需安装。
3、安装GNU ARM Toolchain。工具链有两种,一个是Yagarto,一个是sourcery g++ lite,建议两个都装上,我个人感觉yagarto编译速度更快一些。
3.1 Yagarto的安装包:http://www.emb4fun.de/archive/gabmt/index.html
3.2 sourcery的安装包见这篇教程《ARM Cortex M3开发环境搭建---(eclipse CDT和 Sourcery G++ Lite)》:http://hi.baidu.com/hyper99/item/c5462912a71d705e2b3e2257
4、makefile。
4.1 可以自己写makefile,参考:http://www.emb4fun.de/arm/examples/index.html,makefile在压缩包里。makefile适合高手,我自己用了俩月,直到遇到下面的插件,就彻底抛弃raw makefile了。
4.2 使用上面教程里介绍的GNU ARM Eclipse Plug-in,非常好用,强烈推荐!装了这个插件,和IAR/KEIL一样,只要填填菜单就好了,效果见截图。然后makefile都是自动生成,全自动哦,自动到你都感觉不到有makefile存在。
5、GDB Server,Eclipse下用gdb来调试程序,大概流程是这样:
Eclipse IDE <--> eclipse gdb plugin <--> J-Link gdb server软件 <--> J-Link <--> JTAG/SWD接口 <--> 目标板。
5.1 首先,安装GDB的插件,有两个:
一个是“GDB Hardware Debugging”,设置方法参考:http://www.emb4fun.de/archive/eclipse/index.html,搜索:Configure the debugger。如果没找到该插件,那就照该文章上面介绍的装一下。
还有一个是上面的教程里提到的Zylin Embedded CDT。这俩插件可以都装上用用看,我个人推荐第一个,还是原装的好用点。
5.2 安装JLink的软件包,打开“J-Link GDB Server via SWD”,选USB,确认
5.3 Eclipse里编译好后,选“Debug --> 配置好的gdb选项"。这一步最关键,可以按emb4fun上的教程做,有搞不定的联系我,偷偷告诉你一个取巧的办法,嘿嘿
好了,说好的5句话,变成了5大步。接下来,什么单步,什么断点,什么看内存、看变量、条件断点、乱七八糟的全支持。而且还有一堆牛b插件等着你去开发,比如如果你用FreeRTOS,有个插件可以实时显示stack使用量、优先级等等信息。
写的比较简单,有什么问题欢迎加入QQ群讨论,号码:185275258(STM32-USB)
MDK虽然老旧但是用户多,资源丰富,怎么省也得装个破解版吧 我只玩NXP的ARM,好歹配套个CODE RED,自己配置Eclipse真不太会 有没有这么强大? 我用stlink,swd方式。折腾了半天,都不支持。 johnsonzzd 发表于 2013-10-24 21:59 static/image/common/back.gif
我用stlink,swd方式。折腾了半天,都不支持。
我一开始用的就是stlink,不过是用Atollic的评估版Eclipse,后来嫌速度太慢,就换Jlink了。 johnsonzzd 发表于 2013-10-24 21:59 static/image/common/back.gif
我用stlink,swd方式。折腾了半天,都不支持。
stlink做gdb server的话,参考这个网页:
http://www.emb4fun.de/archive/stlink/index.html
主要是下载这个软件:http://www.emb4fun.de/download/arm/stlink/stlink-20130324-win.zip
然后在dos命令行下输入:st-util.exe
返回:
STLINK GDB Server (Dec 27 2012 19:29:29)
Many thanks to the STLINK development team.
(https://github.com/texane/stlink)
2012-12-28T17:30:08 INFO src/stlink-usb.c: -- exit_dfu_mode
2012-12-28T17:30:08 INFO src/stlink-common.c: Loading device parameters....
2012-12-28T17:30:08 INFO src/stlink-common.c: Device connected is: F4 device, id
0x20006411
2012-12-28T17:30:08 INFO src/stlink-common.c: SRAM size: 0x30000 bytes (192 KiB)
, Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes
Chip ID is 00000413, Core ID is 2ba01477.
KARL - should read back as 0x03, not 60 02 00 00
Listening at *:4242...
然后修改5.3步里的GDB配置->Startup,把端口号改成上面这个4242:
# connect to the J-Link gdb server
target extended-remote localhost:4242 wing 发表于 2013-10-24 14:26 static/image/common/back.gif
我只玩NXP的ARM,好歹配套个CODE RED,自己配置Eclipse真不太会
自己配的话是有些难度的,第一次弄搞个两三天是要的,不过上手了配置一下也就几分钟的事。
本帖最后由 johnsonzzd 于 2013-10-27 22:25 编辑
求助楼主。折腾了一天,最后一步又卡住了。
c:/sourcery_codebench_lite_for_arm_eabi/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text+0x12): undefined reference to `_sbrk'
collect2.exe: error: ld returned 1 exit status
cs-make: *** Error 1
查了一下,原因是使用了printf、malloc这种标准库函数,貌似需要自己实现。网上有实现的却是linux下的,太崩溃了。
楼主有办法么?
-------------------------------------------------------
已解决
https://sites.google.com/site/stm32discovery/open-source-development-with-the-stm32-discovery/getting-newlib-to-work-with-stm32-and-code-sourcery-lite-eabi 多谢楼主,stlink swd方式搞定了。问题:
1. 每一次开始调试都要先运行st-util .exe
2. 每次调试都要刷一遍flash
johnsonzzd 发表于 2013-10-27 23:15 static/image/common/back.gif
多谢楼主,stlink swd方式搞定了。问题:
1. 每一次开始调试都要先运行st-util .exe
2. 每次调试都要刷一 ...
1、那肯定要的,但每天开机时跑一次就行了吧?至少我的jlink gdb server是这样的
2、你可以在ram里跑,另外如果只是reset,不需要重新download,见图:
johnsonzzd 发表于 2013-10-27 21:34 static/image/common/back.gif
求助楼主。折腾了一天,最后一步又卡住了。
c:/sourcery_codebench_lite_for_arm_eabi/bin/../lib/gcc/arm ...
是的,其实我这个教程只是抛砖引玉,好多细节我都没说。:D
printf我用的是atollic提供的tiny_printf.c,具体到printf,代码如下:
/**
**===========================================================================
**Abstract: Loads data from the given locations and writes them to the
** standard output according to the format parameter.
**Returns:Number of bytes written
**
**===========================================================================
*/
int printf(const char *fmt, ...)
{
int length = 0;
va_list va;
va_start(va, fmt);
length = ts_formatlength(fmt, va);
va_end(va);
{
char buf;
va_start(va, fmt);
length = ts_formatstring(buf, fmt, va);
length = _write(1, buf, length);
va_end(va);
}
return length;
}
里面的_write重定向到syscalls.c
int _write(int file, char *ptr, int len)
{
int i;
for (i=0; i<len; i++)
{
__uart_putchar(*(ptr++));
}
return len;
}
__uart_putchar重定向到st提供的bsp函数
/**
* @briefRetargets the C library printf function to the USART.
* @paramNone
* @retval None
*/
int __uart_putchar(int ch)
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(EVAL_COM1, (uint8_t) ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
{}
return ch;
}
tiny_printf.c和syscalls.c网上搜搜看。
结束调试后st-util会自动结束,下次调试还需要再运行。还是jlink通用,就是体积有点大。 johnsonzzd 发表于 2013-10-28 17:18 static/image/common/back.gif
结束调试后st-util会自动结束,下次调试还需要再运行。还是jlink通用,就是体积有点大。
jlink的gdb server比较智能,除非你把它关掉,否则下次调试它会自动重连的。界面见下图:
页:
[1]