C++在单片机中的应用

单片机编程早期通过汇编语言编写程序,汇编语言是面向机器的语言,可以直接编译成机器语言运行,因此汇编写的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。但汇编语言指令多且晦涩,太鸡儿难操作了,开发效率低下,维护起来简直是个恶梦。吴工以前看到一个兄弟接手一个老工程师的一份代码,足足一万多行,一万多行在一个文件里,看得那哥们生无可恋。汇编程序除了运行快,好像没有能吸引程序员的地方,因此它通常用于编写系统的核心部分程序,或编写需要耗费大量运行时间和实时性要求较高的程序段(比如STM32的启动文件、RTOS的任务上下文切换)。汤普森和里奇两老爷子发明C语言后,嵌入式编程也开创新时代,顺便提一嘴,汤普森和里奇两老爷子还用C开发了伟大的UNIX操作系统,多年之后,轻年才俊托瓦兹基于UNIX,用C开发了更流行的LINUX操作系统,再多年后,托瓦兹用C又开发了git。

目前单片机编程主流的就是用C语言开发了,C语言非常简洁易学,使用自由,允许直接访问物理地址,可以直接对硬件进行操作,生成代码质量高,程序执行效率高(一般只比汇编程序生成的目标代码效率低10~20%),适用范围大,可移植性好等等,听起来简直就是为嵌入式开发量身定制的,因此结合嵌入式设备的特点,C语言成了嵌入式编程的不二之选。

现在单片机中写程序,基本都是C语言开发,包括底层驱动和上层应用程序。通常用C完全能够完成项目,
但是当系统软件规模上去后,务必要对整个系统各个模块要进行划分,同时要结合面向对象开发的思想,否则越往后,软件将越来越难以维护。另外,在开发软件过程中,经常会遇到一个情况:由于成本或部件停产等等基他原因,原来的某个部件要换型号或厂家,如果软件没有很好的做到接口与实现分离,后期的改动将很痛苦。而“接口与实现分离”是面向对象编程的基本原则。

因此,我更推荐使在合适的时候用C++进行开发单片机程序。
这就引出第一个讨论的话题:为什么推荐用C++开发单片机程序?

有的亲就要反问了:人家UNIX/LINUX那么大的系统内核代码也基本都是C开发的,大家都在用的git也是C写的,还有啥单片机项目需要C++(通常单片机项目规模不会超过这些牛逼的项目), 更何况托瓦兹还公开炮轰过C++是一门很烂的语言。

我说说我的理由:首先C++是支持面向对象的,有着语言层面的支持,因此在构建类的时候更加直接和便捷。而且C++是兼容C语言的,因此在基本的操作上是一样的,不会带来更大的使用障碍。C++运行速度也很快,了解过C++发展的朋友应该知道,C++在发展过程中、每次新标准发布所带来的新特性中,都会评估性能,在编译器层面,也会进行性能的优化,因此不用怀疑C++程序的运行速度,在单片机中也不用担心。
再则,C++提供了STL库,函数丰富,同时支持各种高级的搞法,如类,多态,模板等等,这些都可以通过C语言模拟出来,但最后会发现那指针指得头发晕,如果用C++写可以让代码写得更加优雅和轻松。

面向对象编程并不是语言本身的功能,而是一种编程思想,就像面向过程一样。毫无疑问用C也能写出面向对象的程序࿰

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值