OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12764|回复: 34

Eclipse+GCC开发环境针对STM32F103ZE的开发模板,完美实现C++编程及JTAG调试

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-9-17
在线时间
0 小时
发表于 2015-9-17 21:23:32 | 显示全部楼层 |阅读模式
模板地址:https://code.csdn.net/zvvzxzko2006/eclipse_stm32_template
环境搭建需要的工具:
http://pan.baidu.com/s/1eQrY08M

为什么不用MDK?因为mdk代码提示不智能,因为mdk的编译器不支持c++11,因为MDK正版贵的要死..
其实主要就是前两点,由于我习惯用VisualStudio写C++程序,突然用MDK实在感觉很不爽。

工具安装参照这几篇来
http://blog.csdn.net/at91rm9200/article/details/22853621
http://blog.csdn.net/at91rm9200/article/details/23245001
http://blog.csdn.net/at91rm9200/article/details/23334661
这位大神太无私了!

关于调试,我之前使用的GDBServer版本太低,导致无法正常连接。安装新版的就可以了。
最后说一下我的模板里都干了什么:
1.设置好gcc的编译,链接选项
2.提供了链接器脚本
3.移植了原子的实验一,也就是跑马灯实验

其他实验,你可以直接复制到项目中,但是不要忘记修改GCC编译器选项中的包含路径。
有问题后面跟帖。
====================================================================================
更新了一下项目模板,这次用git clone后直接eclipse切换工作区到模板目录中即可。不用再设置其他东西,直接c++编译 然后JLink调试即可。
编译过程也许会弹出一个错误,没关系,点击OK然后重新build就行了。




====================================================================================
更新了项目管理 DEBUG/RELEASE
其中,Debug模式使用内部RAM调试运行,当使用RAM调试运行时,不要忘记切换开发板BOOT的2个短接帽B0  B1 连接到3.3V
Release模式使用正常的Flash运行开发板     使用Flash运行时,不要忘记检查开发板BOOT的2个短接帽B0 B1 连接到GND


有问题,后面跟帖
====================================================================================
更新了C / C++ 部分库支持
C库:malloc  free  memcpy memset strlen strcpy strcmp itoa 
C++库 : new delete


代码托管到CSDN平台上了,有兴趣的欢迎来贡献c / c++ 标准库的stm32实现

有问题,后面跟帖



====================================================================================
已更新ucos成功移植

这次更新是基于原子ucos实验1led交叉闪烁实验。移植到gcc编译环境由于汇编语法不同,主要修改了移植步骤的汇编部分。
需要的可git



========================================================================================
更新修复SRAM调试时出现的SP初始化错误
1.初始化时SP无法自动按照向量表设置的初始值进行初始化,导致运行在SRAM中的程序被堆栈破坏
2.通过重写入口点程序,在堆栈操作之前就修复SP值解决问题。







欢迎关注

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2015-9-20 01:52:59 | 显示全部楼层
早尝试过,用Eclipse折腾,Eclipse很庞大运行很慢,GCC还要自己会写Makefile,调试功能就不说了,只要查看内核的寄存器,外设的寄存无法查看,喜欢折腾的人可以试试,用来开发工作的话没什么意义
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复 支持 0 反对 2

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-9-17 22:44:05 | 显示全部楼层
多谢分享。。。
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2015-9-18 00:08:06 | 显示全部楼层
是c还是c++?感兴趣!
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-9-18 08:48:28 | 显示全部楼层
顶,能用jlink仿真吗
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-9-17
在线时间
0 小时
 楼主| 发表于 2015-9-18 12:17:48 | 显示全部楼层
回复【3楼】wangyan915205:
------------------------------
支持c++11的,虽然有待优化
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-9-17
在线时间
0 小时
 楼主| 发表于 2015-9-18 12:19:04 | 显示全部楼层
回复【4楼】ianhom:
---------------------------------
标题已经写出来了。完美支持Jlink仿真调试,跟MDK一样方便,不,本人觉得eclipse调试功能更强大
回复 支持 反对

使用道具 举报

头像被屏蔽

65

主题

277

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2013-8-11
在线时间
29 小时
发表于 2015-9-18 12:48:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-20 08:51:04 | 显示全部楼层
不错,谢谢分享。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-9-17
在线时间
0 小时
 楼主| 发表于 2015-9-21 12:36:35 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
我用另一种方式实现了一次malloc,这种方式没有使用您的管理表管理方式,而是一种申请时自动生成链表的方式,
这种方式缺点是不适合申请小内存容量,大量的小内存会导致链表过长而降低堆的使用效率。
优点则是对大量内存申请,显得效率很高。

总之,代码还是第一次提交版本,需要修改的地方还有很多
回复 支持 反对

使用道具 举报

12

主题

432

帖子

0

精华

高级会员

Rank: 4

积分
729
金钱
729
注册时间
2012-6-21
在线时间
59 小时
发表于 2015-9-21 13:00:07 | 显示全部楼层
Eclipse很庞大运行很慢

用了一次。直接删除了。
产品代码都是C...

喜欢折腾的人,可以玩玩。
呵呵。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-9-17
在线时间
0 小时
 楼主| 发表于 2015-9-21 22:10:35 | 显示全部楼层
回复【11楼】无名氏:
---------------------------------
谢谢关注。

另外,提一下,毕竟目前主流开发集成环境都是MDK,
这里主要提供了一种支持C++11的集成开发环境,并且本开发环境理论上是可以用在Linux系统中的。
缺点就是不适合新手拿来学习,因为设置比MDK更加繁琐,不熟悉gnu工具链的人在设置的时候容易眩晕,而且由于编译器区别于mdk的编译器,导致部分代码不兼容,如字节对齐_packed()

幸运的是,
这个模板经过几天的折腾,终于也算是完成了我的最初目标,目前已经移植成功了一个前面在做的一个项目,SRAM中调试妥妥的。

总之,熟悉了就觉得好用了。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-9-17
在线时间
0 小时
 楼主| 发表于 2015-9-24 16:17:15 | 显示全部楼层
?已更新ucos成功移植
?
?这次更新是基于原子ucos实验1led交叉闪烁实验。移植到gcc编译环境由于汇编语法不同,主要修改了移植步骤的汇编部分。
?需要的可git
?
?
?欢迎关注
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-9-14
在线时间
0 小时
发表于 2015-9-25 10:46:05 | 显示全部楼层
你好,楼主~ 
请问用arm-none-eabi-gcc 如何实现printf重定向和软浮点运算支持??? 
因公司需要我用的是arm-none-eabi-gcc + makefile的编译方式。
之前参考过一篇帖子: http://www.openedv.com/posts/list/0/21518.htm#342035 , 貌似这种重定向方式可以在ARMCC上编译通过,运行也没有问题,但是在GCC的工具链上不行。
那么用arm-none-eabi-gcc编译的话printf函数的实现由什么不一样,编译器参数需要注意些什么 ?  多谢~~
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-9-17
在线时间
0 小时
 楼主| 发表于 2015-9-25 11:58:29 | 显示全部楼层
回复【14楼】lxing_1988:
---------------------------------
我的模板并没有使用gnu提供的标准库,因为涉及到c运行时库对cm3的移植确实很麻烦,所以我的模板直接使用我自己定义的一个c运行时库,而对于CTL中的printf实现起来也很简单,如果使用官方库,你需要重定义fputc函数,原子提供的就可以
int fputc(int ch, FILE *f)
{      
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
USART1->DR = (u8) ch;      
return ch;
}
因为printf是要调用fputc函数实现的。不过事实并没有那么简单,你会发现链接过程还会出现一堆未定义函数的问题,实际上,这些问题都是使用官方库造成的,你可以根据缺失的函数相应的定义出一个个空函数体,不过不可确定因素比较多。
另一种方法,也是我推荐的:如果你只用到printf,或用到很少的标准库函数,那么干脆不要使用官方提供的标准库,而是自己定义一个接受不定长参数的printf.具体方法网上文章不少
编译器参数 有几个必加的
-mcpu=cortex-m3 
-mthumb
-mlittle-endian
分别是cpu选择,指令集选择,小端选择(低字节在前,高字节在后)
这个是我工程模板中的一个例子
arm-none-eabi-gcc -mcpu=cortex-m3 -march=armv7-m -mthumb -mlittle-endian -O0 -fmessage-length=0 -fsigned-char -fno-builtin -Wall  -g3 -gdwarf-2 -DSTM32F10X_HD -DVECT_TAB_RAM -DUSE_STDPERIPH_DRIVER -DHSE_VALUE=8000000 -DDEBUG -I"../include"  -std=gnu11 -Wa,-adhlns="src/HARDWARE/RS485/rs485.o.lst" -MMD -MP -MF"src/HARDWARE/RS485/rs485.d" -MT"src/HARDWARE/RS485/rs485.d" -c -o "src/HARDWARE/RS485/rs485.o" "../src/HARDWARE/RS485/rs485.c"
比较长,不过元素不是很多,
其中-Dxxxx是定义宏,
-MT -MF是文件依赖性相关
-g3    -gdwarf-2    是调试信息相关的
-Wa,-adhlns=   是往汇编器传送编译选项-adhlns=...
就这些东西

你可以使用我的模板,模板中根据设置自动生成makefile文件,使用jlink调试很方便
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2015-9-10
在线时间
0 小时
发表于 2015-9-25 12:43:04 | 显示全部楼层
很好的资料  学习
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-9-17
在线时间
0 小时
 楼主| 发表于 2015-9-25 13:27:41 | 显示全部楼层
回复【16楼】njayk:
---------------------------------
eclipse确实很好用,比如quickfix 功能,如果我想修改工程中的一个全局变量名称,只需要quickfix一下,就会自动替换工程中用到这个变量的名字成为我想要的名字。这个功能是MDK所不具有的,甚至visualstudio也不具备。
eclipse的强大功能可不仅仅局限于此,作为一个完全开放的软件,真的很强大。目前由于我的工程模板已经成功建立,而且成功移植了ucos,所以以后的stm32开发我也不打算再回头用MDK了,真的没法比。
为了使更多人能用着这么强大的开发环境,我打算抽空写一个使用手册,敬请期待。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-9-17
在线时间
0 小时
 楼主| 发表于 2015-9-27 14:55:41 | 显示全部楼层
更新 
修复SRAM调试时出现的SP初始化错误
1.初始化时SP无法自动按照向量表设置的初始值进行初始化,导致运行在SRAM中的程序被堆栈破坏
2.通过重写入口点程序,在堆栈操作之前就修复SP值解决问题。
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2015-9-10
在线时间
0 小时
发表于 2015-10-24 15:26:05 | 显示全部楼层
回复【17楼】白霖:
---------------------------------
好的 谢谢您 受益匪浅
回复 支持 反对

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-1-15
在线时间
6 小时
发表于 2016-6-4 11:02:41 | 显示全部楼层
白霖 发表于 2015-9-25 13:27
回复【16楼】njayk:
---------------------------------
eclipse确实很好用,比如quickfix 功能,如果 ...

请问使用手册写好了吗?我目前也在尝试使用eclipse来开发,但是遇到很多编译问题,如__packed,__asm等兼容问题。希望楼主在手册中关注这些兼容问题是
回复 支持 反对

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-1-15
在线时间
6 小时
发表于 2016-6-4 16:57:45 | 显示全部楼层
兄弟,你csdn的模板现在不能下载/git了啊?
回复 支持 反对

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-1-15
在线时间
6 小时
发表于 2016-6-5 20:07:13 | 显示全部楼层
千万不要使用64bit工具链!!!
__asm还没解决
回复 支持 反对

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-8-13
在线时间
13 小时
发表于 2016-7-23 22:17:58 | 显示全部楼层
白霖 发表于 2015-9-25 13:27
回复【16楼】njayk:
---------------------------------
eclipse确实很好用,比如quickfix 功能,如果 ...

期待,谢谢楼主
回复 支持 反对

使用道具 举报

19

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2016-6-8
在线时间
47 小时
发表于 2016-7-25 15:53:14 | 显示全部楼层
模板地址:https://code.csdn.net/zvvzxzko2006/eclipse_stm32_template ;打不开这个网址了。
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-10-13
在线时间
0 小时
发表于 2016-8-14 22:24:39 | 显示全部楼层
mzwhhwj 发表于 2015-9-20 01:52
早尝试过,用Eclipse折腾,Eclipse很庞大运行很慢,GCC还要自己会写Makefile,调试功能就不说了,只要查看 ...

未必需要自己写Makefile
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-10-13
在线时间
0 小时
发表于 2016-8-14 22:25:30 | 显示全部楼层
lxing_1988 发表于 2015-9-25 10:46
**** 作者被禁止或删除 内容自动屏蔽 ****

char printf_buffer[128] = {0};
int COMPrintf(const char* fmt, ...)
{
        va_list ap;
    va_start(ap, fmt );
    vsprintf(printf_buffer,fmt,ap);
    va_end( ap );
        CUartFactory().Create(USART1)->WriteString(printf_buffer,CUart:OLL);   
}
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-10-13
在线时间
0 小时
发表于 2016-8-14 22:35:56 | 显示全部楼层
原来楼主去年就做这个事情。我最近也在弄这个,正移植ucosiii过去
回复 支持 反对

使用道具 举报

15

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2015-11-30
在线时间
39 小时
发表于 2016-9-22 16:13:59 | 显示全部楼层
wallekuang 发表于 2016-8-14 22:35
原来楼主去年就做这个事情。我最近也在弄这个,正移植ucosiii过去

请问一个编译的问题,Eclipse在打开之后会有一个工程模版,是可以编译过的,但是在查看库文件的的时候,发现很多源文件是没有被编译过的,这个编译哪个文件是怎么选择的呢?我现在弄usart的时候总是提示usart的函数找不到,查看usart的源程序发现是没有被编译的,这个具体是怎么设置的呢?请教!!!

编译情况

编译情况
回复 支持 反对

使用道具 举报

48

主题

537

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1369
金钱
1369
注册时间
2014-2-13
在线时间
169 小时
发表于 2016-9-22 16:45:28 | 显示全部楼层
最近在学linux,一直搭不起Eclipse的开发环境,各种折腾,缺乏一个完整的教程。
回复 支持 反对

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
发表于 2017-8-1 17:52:57 | 显示全部楼层
马克,多谢楼主分享,另外想问楼主有脱离硬件仿真调试的方法吗?
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
245
金钱
245
注册时间
2019-5-6
在线时间
71 小时
发表于 2019-9-9 09:26:32 | 显示全部楼层
AC6 可以~~别人弄好的 你拿来直接用就可以了  还可以跟STM32CUBE 配合使用 很方便了
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2013-8-26
在线时间
21 小时
发表于 2019-9-11 22:22:22 | 显示全部楼层
最近收到了ARM的法务函,内心是崩溃的。换一个试试~
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-12-28
在线时间
0 小时
发表于 2020-3-5 17:17:37 | 显示全部楼层
David_Lew 发表于 2019-9-11 22:22
最近收到了ARM的法务函,内心是崩溃的。换一个试试~

怎么了?
为啥?
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2013-8-26
在线时间
21 小时
发表于 2020-3-16 14:52:51 | 显示全部楼层
leonzheng 发表于 2020-3-5 17:17
怎么了?
为啥?

公司离职出去了一个“牛人”,带跑了公司的技术人员,还举报公司。然后我刚入职嘛,结果我的名字在遥远的上海ARM公司已经被知道了~
回复 支持 反对

使用道具 举报

7

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2013-2-21
在线时间
30 小时
发表于 2021-9-10 16:26:22 | 显示全部楼层
我也在折腾eclipse但是编译的bin文件就是不对,能运行的bin文件27kb,eclipse编译的bin文件只有2kb,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 11:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表