嵌入式C语言是不是过时了?

发布者:EEWorld资讯最新更新时间:2022-08-12 来源: EEWORLD关键字:C语言 手机看文章 扫描二维码
随时随地手机看文章

C 编程语言无疑是计算机科学中最成功的编程语言之一。 C 最早出现在 1972 年左右,由贝尔实验室的Dennis Ritchie创建。在过去 20 年中,C 被TIOBE Programming Index 评为世界上最流行的两种编程语言之一(参见图 1)。它是嵌入式系统开发人员最流行的语言,用于近 80% 的嵌入式项目。经过近半个世纪的使用,嵌入式开发人员需要转向更现代的语言了吗?C语言要退休了吗?

image.png

图 1 – 过去 20 年编程语言指数排名,源自TIOBE 编程社区,其中C一直是排名前两位的语言之一。


出于几个原因,放弃C并转向更现代的编程语言的诱惑相对较高。首先,入门级工程师几乎没有 C 语言经验。如今的大学课程专注于教授 Python 或 C++ 等现代语言。让他们加快速度并获得经验可能需要大量的金钱和时间投资,而很少有公司对此感兴趣。


其次,虽然非常流行,但C语言确实已经过时了。 C 不支持现代编程概念,如类和继承。如果您比较 C++、Python 和 Rust 等现代语言的功能集,C 语言看起来像恐龙。上一次 C 标准添加新特性是 2011 年,2017 年标准版本只有技术修正和澄清,预计 2023 年即将发布的标准版本很可能也不会有任何更改。


停用 C 仍然看起来很诱人,但是离开 C 有几个问题。首先,C 是一种非常适合在硬件处运行的低级过程应用程序的语言,它紧凑且高效。其次,资深工程师对C语言根深蒂固。他们使用该语言长达数十年,对学习和过渡到更现代的语言几乎没有兴趣。最后,有很多遗留库和代码库使用 C,我们不能放弃它们。毕竟移植遗留代码的成本太高了!


看来我们有点进退两难了!为了行业着想,我们应该淘汰 C 以利用更现代的语言和技术,但是更改的时间和成本以及我们必须维护的遗留代码经常阻碍 C 的淘汰。对更现代技术的需求,同时保持我们从 C 中获得的好处,可能会使我们远离使用单一的主导语言,并迫使我们依赖多种语言来完成一项工作。


使用其他语言来支持 C 可能已经发生。例如,下面的表 1 显示了几种语言在 TIOBE 指数中的排名。过去,一两种语言主导着计算机科学。如今,前四种语言的评分都在 10% 左右。这表明单一主导语言的终结。相反,开发人员将利用多种语言来实现他们的最终目标。


编程语言排名

image.png

表 1 – 通常与嵌入式软件开发相关的编程语言列表(来源:TIOBE 指数)。注意:这些评级不代表嵌入式软件的使用,仅代表一般计算机科学行业的使用。


如果你仔细观察这个行业,这些已经发生了。我看到一些公司正在过渡到使用仍然拥有大量 C 库的 C++。我看到一些公司尝试使用 Rust,但需要依赖他们久经考验的 C 软件库作为构建的一部分,反之亦然。这意味着 C 将在未来无限期地继续成为主导语言之一。


C到了退休时机了吗?这是一个简单但复杂的问题。我认为是的,但这取决于你在做什么。您可能不想在 8 位微控制器上使用 C++ 或其他语言。如果您正在使用机器学习或开发连接设备的尖端 32 位微控制器,C 以外的语言将为您提供成功所需的额外工具。切换语言的时间和成本可能太高。我的经验法则是,如果是新设计,请从现代语言开始。如果是遗留设计,请利用遗留代码并尝试利用现代语言编写新代码。

关键字:C语言 引用地址:嵌入式C语言是不是过时了?

上一篇:意法半导体推出多连接方式开发套件,瞄准室内外资产跟踪应用
下一篇:OpenHW为物联网构建基于RISC-V的MCU开发套件

推荐阅读最新更新时间:2024-11-13 11:11

51单片机C语言中.c文件和.h文件的关联
1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明; 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)。 2)h文件里应该有什么 常量,结构,类型定义,函数,变量申明。 3)h文件不应该有什么 变量定义, 函数定义。 4)extern问题 对于变量需要extern; 对于函数不需要因为函数的缺省状态是extern的.如果一个函数要改变为只在文件内可见,加static。 5)include包含问题 虽然申明和类型定义可以重复,不过推荐使用条件编译。 #ifndef _FILENAME_H, #define _F
[单片机]
PIC CCS C语言程序范例
The CCS C compiler includes a library of example programs for many common applications. Each example program contains a header with instructions on how to run the example, and if necessary, the wiring instructions for interfacing external devices. Here are three such example programs included with our compiler, as we
[单片机]
51单片机串口调试程序C语言
/*定义为中断方式串口处理*/ #define INTERSENDSTR /*不为8032系列芯片 */ //#define CHIP_8032 #include absacc.h #include reg51.h #include string.h #include err.h #ifdef INTERSENDSTR unsigned char xdata sSendComBuf ,sRecComBuf ; unsigned char data bOut,bIn,bSout,bSin; #else #define DEFSENDCHAR TI=0;SBUF=ACC;while(!TI);TI=0; #endif
[单片机]
PIC18f4520单片机驱动H1632的C语言程序
#include p18f4520.h #include delays.h //#pragma config OSC = HS //配置内部振荡器Fosc/4 RA7,IO口RA7 //#pragma config PWRT =OFF //#pragma config BOREN = OFF //#pragma config WDT = OFF //#pragma config MCLRE = ON //#pragma config PBADEN = OFF //#pragma config LVP = OFF #define CLK PORTCbits.RC3 #define DAT PORTCbits.RC5 #define
[单片机]
PIC16F15323单片机 (ADC)--汇编+C语言
1 基本原理 1.1 寄存器介绍 1.2 寄存器汇总 1.3 ADC采集实现框图 2 实现代码 /*---------------------------------函数功能:------------------------------------- RA0(AN0)作为外部模拟电压的模拟输入口,并且用RC0口(LED)来判断电压采集是否完成, 如果AD采集完成,则AD对应的标志位ADIF=1,如果使能有效,则会产生一个中断,此时LED灯亮。 编程思路:参考手册的P131 To do an A/D Conversion, follow these steps -------------
[单片机]
PIC16F15323单片机 (ADC)--汇编+<font color='red'>C语言</font>
msp430的一些常用的C语言控制程序---ADC12(2)
下面是ADC12单通道单次的中断方式的例子: //ADC12单通道单次的中断方式 #include msp430x14x.h unsigned ADC_Result; void ADC12_Init(); void main(){ WDTCTL = WDTPW + WDTHOLD; ADC12_Init(); _BIS_SR(GIE); ADC12CTL0 |= ADC12SC; while(1); } // void ADC12_Init(){ ADC12CTL0 &= ENC; P6DIR &= ~BIT6; P6SEL |= BIT6; //选择P6.6的第二功能 ADC1
[单片机]
基于MSP430单片机驱动NRF24L01无线模块发送C语言程序
MCU:MSP430F16X系列,RF无线模块:NRF24L01,液晶显示:ST7920串行控制128*64液晶,发送数据是把4X4矩阵键盘对应的键值发送出去。IRQ是采用中断查询法,具体的可以参考下面代码: //p4口为液晶屏 //p1口中断 //nRF24L01无线通信 //p5.0 csn //p5.1 mosi //p5.3 sck //p5.2 miso //p1.2 irq //p5.7 ce //ST7920串行控制128*64液晶 //rst p4.3 复位 //rs p4.0 片选 //rw p4.1 数据 //E p4.2 时钟 #include msp430x16x.h #include s
[单片机]
单片机C语言程序设计:报警与旋转灯
/* 名称:报警与旋转灯 说明:定时器控制报警灯 旋转显示,并发出仿真警报声。 */ #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit SPK=P3^7; uchar FRQ=0x00; //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i 120;i++); } //INT0 中断函数 void EX0_INT() interrupt 0
[单片机]
单片机<font color='red'>C语言</font>程序设计:报警与旋转灯
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved