0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

GReq_mcu168 来源:玩转单片机 2020-08-05 10:14 次阅读

对于现在我们从事嵌入式开发的人员来说,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语言的缺点主要表现在数据的封装性上,并且语法限制不太严格,变量的类型约束不严格,对数组下标越界不作检查等,影响程序的安全性。

我们在嵌入式编程中,要取长补短,用最优的方法,最少的时间,做最对的事情

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18261

    浏览量

    222087
  • C语言
    +关注

    关注

    180

    文章

    7528

    浏览量

    128419
  • 嵌入式开发
    +关注

    关注

    18

    文章

    976

    浏览量

    46955

原文标题:嵌入式开发为什么不选择汇编、Java而是C语言呢?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何成为一名嵌入式C语言高手?

    如何成为一名嵌入式C语言高手? 嵌入式系统是当今科技领域的核心,而C语言则是
    发表于 04-07 16:03

    如何成为一名嵌入式C语言高手?

    如何成为一名嵌入式C语言高手? 嵌入式系统是当今科技领域的核心,而C语言则是
    发表于 03-25 14:12

    嵌入式人工智能的就业方向有哪些?

    的发展方向有很多,门槛高低不一样。下面给大家列举一些相应岗位所需具备的技能: 一:嵌入式Linux,C语言开发工程师,Linux软件开发工程
    发表于 02-26 10:17

    嵌入式自学好书推荐

    科技的发展和市场的扩大,嵌入式系统在未来仍将是一个重要的方向。 嵌入式开发的薪资待遇也较为优厚,工作时间相对前端和Java开发较少,且享有五险一金。对于应届生来说,一般薪资在6-8k;具备1-2年
    发表于 01-11 15:13

    嵌入式开发常见的C语言技巧与方法分享

    嵌入式开发中,常常要操作寄存器,对寄存器进行写入,读出等等操作。每个寄存器都有自己固有的地址,通过C语言访问这些地址就变得尤为重要。
    的头像 发表于 12-26 09:55 241次阅读

    嵌入式开发学习的十三法则分享

    嵌入式开发学习是一个不断积累和总结的过程,来自一个嵌入式开发高级工程师为我们总结的关于嵌入式开发学习的十三法则,大家不妨参考一下: 一、冗余度法则 在嵌入式系统具有足够的冗余度
    发表于 12-21 06:32

    嵌入式开发C语言中的uint8_t科普

    嵌入式开发中的C语言代码中,经常可以看到类似uint8_t、uint16_t、uint32_t、uint64_t这种数据类型,在教材中却从来没见过。
    的头像 发表于 12-13 16:30 1210次阅读
    <b class='flag-5'>嵌入式开发</b>C<b class='flag-5'>语言</b>中的uint8_t科普

    c语言嵌入式开发

    电子发烧友网站提供《c语言嵌入式开发.zip》资料免费下载
    发表于 11-17 14:11 2次下载
    c<b class='flag-5'>语言</b><b class='flag-5'>嵌入式开发</b>

    嵌入式软件开发常用工具有哪些?

    的Visual Studio是一个非常流行的开发工具,提供了强大的IDE,支持C/C++等语言开发,并且可以配合各种插件进行
    发表于 11-10 11:03

    Linux系统的嵌入式开发是什么

    嵌入式开发听起来很高大上,但其实它就在我们身边。   嵌入式开发是指将操作系统、应用程序或数据存储在嵌入式设备中,如手机、平板电脑、智能家居等。   随着物联网时代的到来,嵌入式开
    的头像 发表于 10-12 15:40 1023次阅读

    STM32嵌入式开发中的RTOS,你用过哪些?

    STM32嵌入式开发中的RTOS,你用过哪些?
    的头像 发表于 09-18 16:21 816次阅读
    STM32<b class='flag-5'>嵌入式开发</b>中的RTOS,你用过哪些?

    嵌入式学习路线你知道吗?

    中对指针的理解和应用。这一阶段的主要目的是学习编程语言开发环境、和培养自己的编程思维,为进一步学习嵌入式开发打下良好的基础。 2学习ARM体系结构编程 这一阶段才是真正的嵌入式编程,
    发表于 06-14 16:00

    什么人适合学习嵌入式开发

    ,所以学习嵌入式开发必须具备一定的C语言基础。 其次,女生适不适合加入嵌入式行列?那是一定的,现在嵌入
    发表于 06-07 15:55

    嵌入式开发成本高的原因有哪些

    这里先问下大家:你觉得嵌入式开发成本高吗? 答案:是的,对于普通人来说,很高。当然,部分富豪除外。 下面给大家罗列一下嵌入式开发成本高的几点原因。
    的头像 发表于 06-02 10:24 606次阅读
    <b class='flag-5'>嵌入式开发</b>成本高的原因有哪些

    嵌入式用什么语言编程?

    具有高级语言的易编程性,具代表性的应用就是UNIX操作系统,从20世纪80年代中期C语言涉足实时系统之后,就受到了普遍的欢迎,是目前使用广泛的嵌入式系统编程
    发表于 05-18 10:08