OpenEdv-开源电子网

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

浅谈 STM32 C++的移植

[复制链接]

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2012-6-15 17:39:11 | 显示全部楼层 |阅读模式
前段时间 花了一些时间 , 做了一些 移植的工作, 然后后续的工程项目 ,全部用c++开发 感觉效率提升了好多 ,可移植性要好的多
而且 执行效率 跟原来 也基本差不多

这个网站我是刚刚注册,最近 看了 Pony279 的帖子, 也打算 写写心得,跟高手们交流探讨一下。

1 为什么要用c++

                                                                                                                                                    明天继续...




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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-6-15 17:48:45 | 显示全部楼层
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2200
金钱
2200
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-6-15 17:54:32 | 显示全部楼层
先顶一下!
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2200
金钱
2200
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-6-18 13:07:11 | 显示全部楼层
咦。。。等了三天不见续了。。。
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
 楼主| 发表于 2012-6-19 14:31:56 | 显示全部楼层
不好意思 , 周末没上网
周一 就把这个网站网址 忘了, 今天才找到网址  保存下 
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
 楼主| 发表于 2012-6-19 14:36:12 | 显示全部楼层
这是我做的一个项目的截图, 
里面用到 的库 是自己移植过来的, 不过 在这个里面 只用到 几个


回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
 楼主| 发表于 2012-6-19 14:59:28 | 显示全部楼层
继续

为什么用C++ 
1.
从毕业开始 ,我用的是51单片机,而当时用的语言是汇编, 
后来 觉得 做一个稍大一点的项目,就力不从心,而且基本上如果稍有改动, 也会大费周章
所以 就选择了C 

之后 我主要用过 51 、PIC 8位机,AVR 也了解过,没在实际中应用, 一直也都在用C开发,其编译器支不支持C++ 我不清楚,不过那时从来没想过用c++, 它们资源太少了, flash 刚刚上k 一些低端的 还都按字节计 如何提高 资源利用率,提高代码效率 才是首要的

接触 stm32 后, 它运行速度 、内存、Flash 以及其它一些外设资源 都算是比较丰富, 所以才有了这样一种想法,并且发现效果比想象的要好的多
2. 现在芯片发展速度较快,速度越来越快, 资源也越来越丰富,即便是性能上有一点小小的损失,可换来的是开发效率的大大提升,何乐而不为
3. C++ 可以完全兼容C, 在考虑效率的情况下,在关键地方可以直接用C代码实现,甚至是汇编,对开发者来讲,可选择余地更多
4. c++ 移植性、安全性 、代码的健壮性 要好于C, 当然任何代码都取决于开发者本身 ,但是对于初学或入门级别而已, 选择C++会更快入手

当然,这些都不是我最初选C++ 的主要原因, 而是 在项目里面, 一是C对字符串的处理 太过于麻烦, 所以 我想到C++, 自己做了 MString的类库 , 之后,慢慢的 将有些功能加进去 ,二是 官方提供的库函数 效率太低,使用起来又比较麻烦,之前我用C作的项目里面,从来没用过库
目前还有好多工作没有完成,有好几个类库 还没有移植完成, 由于测试时间比较长,好多没办法测试,以后慢慢完善


回复 支持 反对

使用道具 举报

38

主题

248

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
463
金钱
463
注册时间
2011-2-11
在线时间
12 小时
发表于 2012-6-19 15:29:52 | 显示全部楼层
c++的好处在于库。首先就是设计类和继承之类的东西,还有用不好就是扯淡的设计模式,最后上升为方法学,开发流程管理,
最终超出工程师要解决的问题。
Openedv大力支持的开源RTOS  --Trochili RTOS(飞鸟)
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
 楼主| 发表于 2012-6-19 15:32:30 | 显示全部楼层
有关于 在嵌入式里面 使用 C++ 有几个问题 我想先注解一下, 当然这都是个人观点 不一定正确

1. 内存分配,    new , delete
    在 单片机的堆上分配内存,毕竟不同于在32位的PC上, 所以即便是使用了动态分配,也要注意分配容量的大小,
    个人觉得 除非有必要,不推荐 使用动态分配内存功能,尤其是在频繁被调用的函数中
    我在 MString库的i定义 都是使用模板的 ,
template <u16 N> 
class MString : public MCharStr
{
private:
    u16 Len;
    char Data[N];
public:
  ……
};
typedef MString<63>         MyString;
typedef MString<255>   LongString;
typedef MString<20>     ShortString;
typedef ShortString         String ;
typedef MyString AnsiString;

一般对LCD显示也好 串口数据也好 ,20字节的长度几乎都够了 
使用过程中 ,判断最大长度,并做一些 对超出长度的异常捕获
如果有需要 可以在设大些

我觉得无论 从执行效率还是 可靠性来说 ,都优于在对象实现时候动态分配
只不过 可能 在空间上有所浪费 

回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2200
金钱
2200
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-6-19 16:11:53 | 显示全部楼层
呵呵,楼主继续努力!

我现在用到的 C++ 特性也不多,

现在主要用到的是模板,继承和重载,
模板的强大就不用说了,最近看了点模板元编程的东西,感觉我对模板了解和发挥的不够好
继承可以提高代码的复用性,代码的结构也会更清晰,
而重载则可以在代码的使用上提供的方便。

至于C++的其他新特性,我也没做啥项目,所以到现在还没用上。
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
 楼主| 发表于 2012-6-21 13:22:16 | 显示全部楼层
2 关于标准库 
不知道 keil 下 是否提供了 标准库接口 比如 输入输出流 、文件操作等 
我想即便是提供了 应该 自己做一定的工作吧
比如 重载 putc  getchar 等  底层函数

我没仔细研究过, 对SD卡读写等 都是参照其他开发板的c程序 
不知道 有没有这方面的资料 ,可供参考一下
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2011-12-17
在线时间
0 小时
发表于 2012-10-17 16:27:04 | 显示全部楼层
怎么创建一个C++的工程项目,高手们能说一下吗
回复 支持 反对

使用道具 举报

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
886
金钱
886
注册时间
2011-12-25
在线时间
12 小时
发表于 2012-10-17 21:50:35 | 显示全部楼层
回复【10楼】Pony279:
---------------------------------
我也想学C++,但是我师兄说,C++用的不多,不如学JAVA。。
很喜爱电子行业
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2200
金钱
2200
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-11-18 15:25:47 | 显示全部楼层
回复【13楼】 冰是睡着的水 :
---------------------------------
 
世界编程语言排行榜是 C 和 JAVA 在前两位,C++ 和 Objective-c 在三四位 http://www.cnbeta.com/articles/204112.htm
而 C++ 是 C 的拓展,除非 C 语言被抛弃了,不然 C++ 是不会死的。现在C语言标准自 C99 以后已经没有更新了,只有 C++ 的标准再继续完善,目前最新的为 C++ 11, 2011 年定的标准。不过在嵌入式领域,由于市场并不大,所以很多编译器只支持比较老的标准,不会花太多精力在支持新的标准上(KEIL 论坛上的人说的 http://www.keil.com/forum/21830/),比如 mdk 支持的是 03 年的 C++ 标准 ISO C++ 2003 。如果是在 C 语言环境,MDK 默认用的是 C90,配置一下可以支持 C99。
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
401
金钱
401
注册时间
2014-6-4
在线时间
89 小时
发表于 2014-6-4 16:34:43 | 显示全部楼层
偶然看到这篇帖子,花了一下午重新了一个STM32 控制串口的C++ 类库,太累人了,没这样干过。脑子里没的概念,这东西有没的官方的库啊。自己写库压力山大!
一路狂奔!
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-4-10
在线时间
3 小时
发表于 2016-4-10 13:33:50 | 显示全部楼层
大神,我用c++编写的串口的程序不好使啊
回复 支持 反对

使用道具 举报

19

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2016-6-8
在线时间
47 小时
发表于 2016-7-25 14:29:57 | 显示全部楼层
keil创建C++工程,和C工程有什么区别吗?
回复 支持 反对

使用道具 举报

8

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2015-3-4
在线时间
44 小时
发表于 2016-8-9 13:16:38 | 显示全部楼层
创建C++工程和创建C工程没什么区别
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2013-6-21
在线时间
13 小时
发表于 2016-8-23 14:26:49 | 显示全部楼层
aleda303 发表于 2012-6-21 13:22
2&nbsp;关于标准库&nbsp;
不知道&nbsp;keil&nbsp;下&nbsp;是否提供了&nbsp;标准库接口&nbsp;比如&nbsp;输入 ...

有例程吗?能提供一个点灯例程吗? 想学习一下。。。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-3-30
在线时间
1 小时
发表于 2016-11-21 10:36:29 | 显示全部楼层
我很早以前,就已经使用C++ + os方式了,经过无数的验证与尝试,我几乎已经放弃了C,如果说,你永远都不使用arm类的芯片,永远只是用stc89c52,那么,请无视,如果你使用arm类的芯片,并且随时都会尝试arm的新产品与高端一些的cortex A,x86,mips等的芯片,那么,可以完全放弃C了
回复 支持 反对

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-21 10:46:47 | 显示全部楼层
主要是是对RAM和ROM的消耗,不知题主是否有数据~
回复 支持 反对

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-21 10:47:46 | 显示全部楼层
liu_hei 发表于 2016-11-21 10:36
我很早以前,就已经使用C++ + os方式了,经过无数的验证与尝试,我几乎已经放弃了C,如果说,你永远都不 ...

嵌入式系统上了大型OS,C做应用的方式已经很少了~
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 05:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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