打印
[资料干货]

单片机C语言 -- 基于结构体的面向对象编程技巧

[复制链接]
1879|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 tyw 于 2020-2-10 10:42 编辑

感谢阅读本文,在接下来很长的一段时间里,我将陆续分享项目实战经验。从电源、单片机、晶体管、驱动电路、显示电路、有线通讯、无线通信、传感器、原理图设计、PCB设计、软件设计、上位机等,给新手综合学习的平台,给老司机交流的平台。所有**来源于项目实战,属于原创。

阅读说明:
1、Keil4 C51工程网址:
2、需要一定的C语言基础,才看得懂此文。

一、面向对象
面向对象是软件开发方法,是相对于面向过程来讲的。通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式
单片机C语言的面向对象编程,是利用结构体,将变量、指针、函数等进行封装,达到编程更加方便、程序可读性更好、方便移植等目的。

二、知识说明
1、结构体
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
常用的定义方法:
typedef struct
{
变量;
指针;
函数指针;
} 结构体名称_t;

2、指针
指针是地址,指向内存中的变量。
常用的定义方法:数据类型 * 指针名;

3、函数指针
函数指针是指向函数的指针变量。
常用的定义方法:返回值类型 ( * 指针变量名) ([形参列表]);

三、编程说明
1、主函数如下:
系统初始化后,进入主循环,通过结构体调用system文件的函数。

2、结构体类型定义
定义1个变量与2个函数指针。

串口类型定义方法,通过结构体,将串口进行封装。

3、结构体变量定义

定义结构体变量,并进行初始化。 对于函数指针,在c文件中定义函数,再将函数名赋值给函数指针,这样,就可以通过结构体的函数指针调用c文件中的函数。

4、运行函数
由于使用结构体的函数指针调用函数,函数可以声明为static类型,安全性更好。

五、小结
单片机C语言的面向对象编程,是利用结构体,将变量、指针、函数等进行封装,达到编程更加方便、程序可读性更好、方便移植等目的。
面向对象编程的知识点很多,本文只是简要的介绍了下,仅仅起到抛砖引玉的作用,日后设计过程中,需要不断的总结经验,沟通交流,以达到真正的理解,灵活运用。

开源项目,开发工具,技术资料以及更多原创技术**,请关注微信公众号。
硬件家园 yjjy168168168


————————————————
版权声明:本文为CSDN博主「硬件家园」的原创**,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

使用特权

评论回复

相关帖子

沙发
publicrtos| | 2020-2-9 20:05 | 只看该作者
有很多著名的组件都是用的这种方式,用结构体实现类似于对象的编程方法,例如opencv、libevent、openssh。这种方式优点是程序结构清晰明确,利用了C语言本来就是实打实的数据和代码的特点,缺点是程序实现起来啰嗦,工作量大,一旦改一个地方就需要同时改好多地方,就算用宏定义也无法完全避免。C++优点是对象化编程,多态性用起来很方便,在函数里声明一个对象,只要对象的构造与析构写的足够完善,函数结束后会自动销毁对象里申请的内存,实现起来代码比C语言简洁一点,缺点是一旦出了问题,被C++的多态性、自动构造析构等特性隐藏了很多功能,要查好多地方才能找到问题。

使用特权

评论回复
板凳
vsfopen| | 2020-2-10 13:57 | 只看该作者
OOPC其实不仅仅是针对单片机的,很多地方都用,各种RTOS基本都是OOPC的。
不过OOPC并不只是结构体而已,我也开贴讲一下OOPC吧

使用特权

评论回复
地板
vsfopen| | 2020-2-10 13:59 | 只看该作者
publicrtos 发表于 2020-2-9 20:05
有很多著名的组件都是用的这种方式,用结构体实现类似于对象的编程方法,例如opencv、libevent、openssh。 ...

51也不支持C++吧,嵌入式领域用C的也确实不少,毕竟C++也会引入一些额外的代价

使用特权

评论回复
评论
vsfopen 2020-2-11 14:21 回复TA
@publicrtos :楼主虽然说的是单片机,但是实际工程就是51的。哪些算是智能化程度高的软件?开销大的CPU的话,也属于MCU吗?这里的MCU分类,不同人的理解确实可能不一样的。我是觉得CPU不属于MCU了。 
publicrtos 2020-2-11 09:17 回复TA
51属于控制类单片机,可以做简单的控制类产品和简单的算法。51的软件算是嵌入式软件的简单应用。一些智能化程度高的软件就要用开销大的CPU,C++就好一些。 
5
XDKYF| | 2020-2-11 18:53 | 只看该作者
不错,学习了,谢谢

使用特权

评论回复
6
publicrtos| | 2020-2-12 12:29 | 只看该作者
C语言的开源组件,是用结构体声明的结构体变量,然后专门处理该结构体的很多函数通过指针传递操作该结构体变量,相当于C++的this指针,只是C++隐藏了起来该指针。

使用特权

评论回复
7
vsfopen| | 2020-2-12 15:43 | 只看该作者
https://bbs.21ic.com/icview-2898820-1-1.html
简单写了一些原理,oopc不仅仅是结构体。
还有一些特殊的技术实现成员保护,继承,多态等等。

使用特权

评论回复
8
15889768528| | 2020-2-13 19:07 | 只看该作者
谢谢分享,收藏一下

使用特权

评论回复
9
畅想天子| | 2020-2-20 12:40 | 只看该作者
结构体,枚举,是经常要用的,学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:淡泊以明志,宁静而致远。

27

主题

104

帖子

5

粉丝