有没有想过为什么嵌入式开发要使用C语言呢?

对于现在我们从事嵌入式开发的人员来说,c语言好像是必备的技能,也是最常见的开发语言.
但是我们有没有想过为什么嵌入式开发要使用c语言呢?为什么不使用汇编呢?为什么不使用java呢?我想从嵌入式开发->反向验证->正面验证来聊起.
什么是嵌入式开发?
百度百科说法如下:
嵌入式开发就是指在嵌入式操作系统下进行开发,包括在系统化设计指导下的硬件和软件以及综合研发。除暂且分离硬件的eda研发以外,侧重的就是在一定硬件条件下的系统化设计和软件研发。
在我们平时的接触中,嵌入式开发一般常用的系统有wince,linux,android和一些实时操作系统等等
使用的语言有c,c++或汇编;用高级处理器,arm7,arm9,arm11,或者一些8bit,16bit,32bit单片机等
主流的嵌入式平台有三种:arm平台、dsp平台和fpga平台。
嵌入式为什么不用汇编?
严格来说,不是不用,而是不建议用
汇编和c语言都可以直接访问硬件,可以直接编译生成硬件识别的机器码文件,并且汇编的语法较为简单,生成的可执行文件更小
随着硬件的发展,内存也越来越大,汇编这些优势也不再是优势了,并且汇编难,普通的51用汇编还行,指令不多.
新型的单片机,寄存器成百上千,全靠记忆简直天方夜谭,复杂的大型项目不是一个人能完成的,汇编的移植性和修改性以及可读性太差.
当然能熟练掌握汇编,会对单片机的内部结构、读写时序等有一个清楚的了解,然后接着学c语言,对整个系统的了解是有帮助的.
嵌入式为什么不用 java 语言写?
在很多很多年前,java是为嵌入式打造的语言,java语言设计的初衷就是针对嵌入式的,原来的u-sim卡,现在新出来的swp-sim(nfc)卡里面的程序都是跑的java 代码。
随着发展,java开始在通用平台上普及开来,并且java是面向对象编程,是编译器在后面增加大量的东西的才变成机器语言,换而言之,这样程序无法直接操作内存
比如你定义一个类,最终在内存中实现时,编译器已经加了大量附加东西。如父类数据结构,vt表指针之类等等。而底层程序主要是操作寄存器和内存地址,必须要精确而直接操作它,所以难以达到
当然,java需要经过一层虚拟机,效率上不是很好。很多嵌入式项目资源有限,是养不起java虚拟机的。
嵌入式系统和c语言的联系
操作系统包括内核、驱动等都是使用c语言和汇编编写的,只有小部分会使用汇编语言,其余绝大部分是c语言。
比如boot的时候会有一些切换处理器模式之类的指令,用汇编干这种活简单粗暴,代码量少,写好了就不需要维护了.
c在操作系统中流行在1970年代unix出现时就开始了,现在常用的操作系统内核基本上都是由c语言编写的,所以这是历史的联系,更是成千上万程序员的联系.
为什么选择c,要从c语言的特点说起
c语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码,并且不需要任何运行环境支持,便能运行的编程语言,其移植性好,能够在多种不同体系结构的软件或硬件平台上运行;
相对来说,c语言在高级语言当中是最贴近物理层面的语言,经过一系列的编译转换,最终它会成为0101的机械码,可以操作硬件,并且具有简介紧凑、使用灵活的语法机制.
c语言具有很高的运行效率。通过观察c语言的背景可以看得出:汇编语言 - b语言 - c语言。在芯片上执行的程序:写汇编执行效率最高,c语言其次,大概在80%左右
最后注意的点
c语言的缺点主要表现在数据的封装性上,并且语法限制不太严格,变量的类型约束不严格,对数组下标越界不作检查等,影响程序的安全性。
我们在嵌入式编程中,要取长补短,用最优的方法,最少的时间,做最对的事情

电磁流量计的测量原理及特点
工业机器人应用增长迅速,市场规模或将超62亿美元
Galaxy S20 Ultra机主遭遇了“绿屏”的困扰
自耦变压器的工作原理,自耦变压器的相关参数值怎么算
PCB设计时要满足电磁兼容性的注意事项阐述
有没有想过为什么嵌入式开发要使用C语言呢?
“创客北京2023”算能·企业AI+TPU专项赛获奖名单出炉!
Logarithmic LED Panel Display
5G不断发展目前进入全面冲刺阶段
云计算的潮流仍方兴未艾_边缘计算从何说起
WiMax被正式批准成为全球标准
有什么挂脖式蓝牙耳机好用平价?平价挂脖式蓝牙耳机推荐
工业以太网和普通以太网区别
LGD也正在积极研发触控一体OLED面板技术
索尼Q1仅出货110万台Xperia手机,创历史新低
脱扣曲线的分类
直流无刷电机调速原理
希立仪器荣获广东省知名品牌殊荣
米家扫拖机器人1C高清图集
用简单控制电平来实现大多数的应用控制