打印

单片机该不该用C++?

[复制链接]
364|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
primojones|  楼主 | 2023-9-30 08:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前写个不算小的工程,用到了七八种传感器,还跑复杂的算法,发现驱动用C写,后期扩展起来挺费劲的。但目前主流单片机都是用C语言写,于是有了这个问题——单片机该不该用C++写。


CPU速率大于100MHz不用考虑C++语言本身对程序运行效率的影响(极少数需要使用C语言和汇编的关键过程除外)。现在都有说用Python来写单片机程序的了,C++还怕什么。当软没达到这个频率的CPU也可以考虑。
Flash大于100K,只要不用RTTI, STL库,而且是乖乖用C++中类和常量等基本语法,Flash应该Hold得住。在这个条件用,使用穿插使用C的String.h中的标准函数(除scanf这样的输入函数),大个10KB~20KB吧。
没有很大的向下兼容的需求,如原先在高性能32位MCU上跑,后面要移植到8位MCU这样的问题。
没有换编译器的需求,毕竟C++11、C++14和C++17还是有不小区别的。
C++一个无法逃避的问题是:

But mind you, writing complex code in C can give you nightmares.

But then debugging C++ code can give you nightmares as well.

如果实在不没有用C++的空间,那至少用个C98吧,都过去二十多年了!

若对STL感兴趣的话,可以看下“C:\Keil_v5\ARM\ARMCC\include”下的C++原码及其头头文件。虽然ARM没有开源C原码,但C++的原码还是挺友好的。

补充说明:

2021/12/22: 使用STL标准容器时,注意内存分配子(allocator)的存在。

以FreeRTOS系统为例:任务堆栈默认使用一个全局静态数组。在任务中的vector除了将本身的骨架存储在任务栈中外,vector里存储的内容则是存储在堆中。而根据默认的内存分配子知,vector的内容应该是存储在.s文件所指明的系统堆中,而不是任务堆(任务堆是分配完任务栈后剩余的存储空间)。

2021/12/22:提前分配存储空间,而不是自动分配。

如vector的会在存储不够时,自动使用新的存储空间,并且会以2^n次方来预留空间。虽说一般单片机的内存空间是够跑C++的,但不并意味着可以随便用。推荐使用resize()或reserve()提前确定的一下可用的空间大小。

原文链接:https://blog.csdn.net/NoDistanceY/article/details/104580751

使用特权

评论回复
沙发
heisexingqisi| | 2023-9-30 11:09 | 只看该作者
常用的几款编译器是支持C++的

使用特权

评论回复
板凳
Stahan| | 2023-9-30 11:12 | 只看该作者
只要不用那些模板啥的内存就不会爆吧

使用特权

评论回复
地板
tpgf| | 2023-10-21 11:17 | 只看该作者
如果说应该不应该 那肯定就是应该的

使用特权

评论回复
5
wowu| | 2023-10-21 12:06 | 只看该作者
为什么c这么广泛而c++不被单片机广泛应用 这个是肯定有原因的

使用特权

评论回复
6
paotangsan| | 2023-10-21 12:40 | 只看该作者
这个得根据各种不同的语言的特点来分析

使用特权

评论回复
7
八层楼| | 2023-10-21 18:14 | 只看该作者
c++主要是说的面向对象 这个是不是不适用于单片机领域呢

使用特权

评论回复
8
keaibukelian| | 2023-10-21 18:47 | 只看该作者
不同的语言肯定会影响程序的运行速度吧

使用特权

评论回复
9
xiaoqizi| | 2023-10-21 22:11 | 只看该作者
高级语言会不会相对来说更加占用空间呢

使用特权

评论回复
10
feiqi1| | 2023-10-22 09:03 | 只看该作者
单片机用C++应该还是可靠的吧。

使用特权

评论回复
11
androidbus| | 2023-10-22 09:08 | 只看该作者
通常来说,在单片机上编程,要么汇编,要么C语言,而用C++进行开发的很少。

使用特权

评论回复
12
litengg| | 2023-10-22 09:12 | 只看该作者
能不能用C++开发单片机呢?答案肯定是可以的。

使用特权

评论回复
13
qiangweii| | 2023-10-22 09:14 | 只看该作者
C语言是面向过程的语言,C++是面向对象的编程语言。面向过程相比面向对象的编程,生成代码量(bin文件)更小,运行效率更高。

使用特权

评论回复
14
shashaa| | 2023-10-22 09:20 | 只看该作者
C语言相比C++具有更小代码量(bin文件)、更快的运行速度。

使用特权

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

本版积分规则

28

主题

1086

帖子

0

粉丝