OpenEdv-开源电子网

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

在51和STM32单片机上使用面向对象的编程,并应用于实际项目

[复制链接]

8

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-2
在线时间
83 小时
发表于 2018-5-2 14:38:27 | 显示全部楼层 |阅读模式
本帖最后由 safu枫 于 2018-5-5 21:04 编辑

首先说明一下写这篇文章的由来,最初的目的就是为了解决实际工作中的几个问题本人从事单片机工作以来,遇到以下一些想死的情况:

1:面对客服今天一个需求明天一个需求

2 : 功能需求不明确,随时需要修改

3:一个代码量较大的工程(别人写的),过了N久突然说要修改维护,在茫茫码海里面寻找那一个个全局变量,以及它的作用

4:移植,51移到32,32移到51,其实并没有什么要写的,只是封装不够好,要改动的东西太多

总的来说,我就是想要写出一种可维护,可拓展,易理解的高质量代码;

所以我就学习了相关书籍,然后并把这些知识应用于实际项目中,瞬间感觉战斗力飙升!(书单:《大话设计模式》《C现代编程》《嵌入式OOPCXXX》-高焕堂)

还有一些我的想法,就是在CPU性能大大提升的如今,可以牺牲一定的性能来换取更易读,易维护的代码,因为维护的成本可能是很高的,我有在网上搜过一些相关的帖子,看到很多人说,单片机内存小啊,实现不了面向对象,单片机的功能需求相对简单啊(简单你个鸡儿);把代码模块化,实现快速开发;

另外这些帖子,大多都没有实际项目,实用性低;

本人写这个话题的目的是:

1:想与大家分享一些在学习和工作中的经验,能相互提高的战斗力

2:第一次写博客,也很少逛论坛,工作中可交流的人也少,也想知道我这些东西到底好不好,有什么不好的有问题的地方欢迎大家指出。。

接下来的文章,我会从具体的应用开始(按键,LED灯,数据处理),用到的面向对象的概念(类的概念,封装,继承,多态,接口),设计模式和思维(单一职责,状态机,访问者,职责链),并附上STM32源码工程(使用的是正点原子战舰V3的板子,下载直接可用),以及相关的函数操作说明,关于51系列的单片机工程,可以实现一样的效果,但是部分代码的写法需要做一些改动

晚点,会更新。。。。


在51和STM32单片机上使用面向对象的编程,第一篇:炫酷地点亮一盏LED灯:

http://www.openedv.com/forum.php?mod=viewthread&tid=270548&extra=

在51和STM32单片机上使用面向对象的编程,第二篇:强大的按键

http://www.openedv.com/forum.php?mod=viewthread&tid=270631&extra=


在51和STM32单片机上使用面向对象的编程,第三篇:按键控制开灯关灯也能爆炸

http://www.openedv.com/thread-270786-1-1.html




补充内容 (2018-5-26 11:48):
在51和STM32单片机上使用面向对象的编程,第四篇:数据流处理:
http://www.openedv.com/forum.php ... d=272121&extra=

状态机.rar

5.72 MB, 下载次数: 619

第三篇

KEY.rar

5.35 MB, 下载次数: 613

第二篇工程

LED.rar

5.33 MB, 下载次数: 650

第一篇工程

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

使用道具 举报

23

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2014-3-9
在线时间
103 小时
发表于 2018-5-2 18:23:12 | 显示全部楼层
魔法王子
回复 支持 1 反对 0

使用道具 举报

5

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2014-8-7
在线时间
59 小时
发表于 2018-5-2 15:30:39 | 显示全部楼层
不烂尾必定是精华贴~先顶了
回复 支持 反对

使用道具 举报

31

主题

71

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2018-4-22
在线时间
17 小时
发表于 2018-5-2 15:58:54 来自手机 | 显示全部楼层
在线等哈哈
回复 支持 反对

使用道具 举报

15

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
650
金钱
650
注册时间
2016-5-20
在线时间
171 小时
发表于 2018-5-2 16:02:26 | 显示全部楼层
此贴不能沉,必须置顶!
回复 支持 反对

使用道具 举报

57

主题

316

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1344
金钱
1344
注册时间
2018-1-11
在线时间
156 小时
发表于 2018-5-2 16:10:59 | 显示全部楼层
必顶,等更新
回复 支持 反对

使用道具 举报

8

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-2
在线时间
83 小时
 楼主| 发表于 2018-5-2 16:20:22 | 显示全部楼层
大家先看这个,第一次发帖子,还不太熟,我整理一下,好像格式不对  h ttps://blog.csdn.net/qq_  32079231/article/details/80166667
回复 支持 反对

使用道具 举报

8

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-2
在线时间
83 小时
 楼主| 发表于 2018-5-2 16:20:38 | 显示全部楼层
ndthome 发表于 2018-5-2 15:30
不烂尾必定是精华贴~先顶了

大家先看这个,第一次发帖子,还不太熟,我整理一下,好像格式不对  h ttps://blog.csdn.net/qq_  32079231/article/details/80166667
回复 支持 反对

使用道具 举报

8

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-2
在线时间
83 小时
 楼主| 发表于 2018-5-2 16:20:52 | 显示全部楼层

大家先看这个,第一次发帖子,还不太熟,我整理一下,好像格式不对  h ttps://blog.csdn.net/qq_  32079231/article/details/80166667
回复 支持 反对

使用道具 举报

8

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-2
在线时间
83 小时
 楼主| 发表于 2018-5-2 16:47:40 | 显示全部楼层
本帖最后由 safu枫 于 2018-5-2 18:30 编辑

  11111

LED.rar

5.33 MB, 下载次数: 128

回复 支持 反对

使用道具 举报

5

主题

115

帖子

0

精华

高级会员

Rank: 4

积分
925
金钱
925
注册时间
2014-9-29
在线时间
276 小时
发表于 2018-5-2 18:14:56 | 显示全部楼层
顶起,懂得人是精华帖,同时也想取经楼主,这几本书先读哪本,很想加强自己的架构思想
回复 支持 反对

使用道具 举报

8

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-2
在线时间
83 小时
 楼主| 发表于 2018-5-2 18:18:11 | 显示全部楼层
挖东衣宇 发表于 2018-5-2 18:14
顶起,懂得人是精华帖,同时也想取经楼主,这几本书先读哪本,很想加强自己的架构思想

先从《C现代编程》学起,其他2本是理解面向对象和设计模式的,《C现代编程》这本集合了设计模式 和面向对象,但是没其他2本说的那么细
回复 支持 反对

使用道具 举报

5

主题

115

帖子

0

精华

高级会员

Rank: 4

积分
925
金钱
925
注册时间
2014-9-29
在线时间
276 小时
发表于 2018-5-2 18:20:49 | 显示全部楼层
safu枫 发表于 2018-5-2 18:18
先从《C现代编程》学起,其他2本是理解面向对象和设计模式的,《C现代编程》这本集合了设计模式 和面向对 ...

感谢你的分享
回复 支持 反对

使用道具 举报

8

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-2
在线时间
83 小时
 楼主| 发表于 2018-5-2 18:28:32 | 显示全部楼层
huang_liquan 发表于 2018-5-2 18:23
我就在STM32上写C++
https://blog.csdn.net/u013908686/article/details/80045796

厉害啊,主要是我C用习惯了,而且C++能实现的 貌似目前为止我C都能实现,勿喷,,C++了解的比较浅,而且我现在的工作主要是单片机,KEIL貌似已经支持C++了,但是我还是怕兼容性不好,最近正在学习Linux。。。
回复 支持 反对

使用道具 举报

7

主题

54

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2015-12-8
在线时间
447 小时
发表于 2018-5-2 19:43:23 | 显示全部楼层
好贴必须要顶了
回复 支持 反对

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
发表于 2018-5-4 09:15:45 | 显示全部楼层
必须支持,赞一个
回复 支持 反对

使用道具 举报

6

主题

36

帖子

0

精华

高级会员

Rank: 4

积分
664
金钱
664
注册时间
2016-9-14
在线时间
134 小时
发表于 2018-5-4 11:40:55 | 显示全部楼层
顶顶顶,大赞
回复 支持 反对

使用道具 举报

25

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
393
金钱
393
注册时间
2014-8-18
在线时间
43 小时
发表于 2018-5-9 15:30:44 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-12-28
在线时间
15 小时
发表于 2018-5-9 20:02:01 | 显示全部楼层
可以,谢谢分享
回复 支持 反对

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
发表于 2018-5-10 11:56:21 | 显示全部楼层
决不可能的,
你先说咋面向对象?

除非你有操作系统,提供类库,
回复 支持 反对

使用道具 举报

8

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-2
在线时间
83 小时
 楼主| 发表于 2018-5-10 14:10:06 | 显示全部楼层
本帖最后由 safu枫 于 2018-5-10 14:14 编辑
LIGONG004 发表于 2018-5-10 11:56
决不可能的,
你先说咋面向对象?

不说,就不说,不告诉你。。。。开个玩笑,你看 下面有相关链接,有后续更新,还有《C现代编程》这本书上有具体的方式
面向对象只是一种思维,语法语言上可以很灵活实现得,特别是C本来就很灵活
回复 支持 反对

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
发表于 2018-5-11 08:51:47 | 显示全部楼层
OOP思想的本质,
你懂么?
不懂可以科谱?

面象对象,说白了,就是做个标准模版,然后用模板生成一系列代码,

比如你去开发商买房子,开发商跟你写个合同,
开发商用模板生出一份合同,写上你的名字,房子,价格,
这就是面象对象的工作模式,OOP思想.

如果用OP思想,咋做?
开发商一个字一个字的敲一份合同,出来,
张三来了也的一字一字得敲一份,
李四来了也的一字一字得敲一份,
王五来了也的一字一字得敲一份,
.....
这就是OP思想,
回复 支持 反对

使用道具 举报

49

主题

160

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-11-2
在线时间
41 小时
发表于 2018-5-11 08:53:06 | 显示全部楼层
OOP后面的东西还很多,
回复 支持 反对

使用道具 举报

8

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-2
在线时间
83 小时
 楼主| 发表于 2018-5-11 09:40:20 | 显示全部楼层
LIGONG004 发表于 2018-5-11 08:53
OOP后面的东西还很多,

请教一下,都有什么呢?我看能不能实现
回复 支持 反对

使用道具 举报

3

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2012-6-19
在线时间
37 小时
发表于 2018-5-28 09:48:40 | 显示全部楼层
本帖最后由 bxl131 于 2018-5-28 09:49 编辑
LIGONG004 发表于 2018-5-10 11:56
决不可能的,
你先说咋面向对象?

操作系统都是C语言写的,C语言无所不能。
回复 支持 反对

使用道具 举报

3

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2012-6-19
在线时间
37 小时
发表于 2018-5-28 09:50:34 | 显示全部楼层
楼主大公无私!必须顶!
回复 支持 反对

使用道具 举报

0

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2013-1-30
在线时间
10 小时
发表于 2018-5-28 20:14:39 | 显示全部楼层
谢谢分享!!!
回复 支持 反对

使用道具 举报

16

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2017-1-7
在线时间
107 小时
发表于 2018-12-23 21:25:09 | 显示全部楼层
支持楼主,挺好的,效率肯定会有所下降。
不过鱼和熊掌不可兼得。性能跟可读性总的择一。
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-4-15
在线时间
39 小时
发表于 2019-5-20 09:43:55 | 显示全部楼层
顶顶顶!!!
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-4-15
在线时间
39 小时
发表于 2019-5-20 09:46:12 | 显示全部楼层
顶顶顶!!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 23:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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