最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 嵌入式系统编程语言的发展与未来的发展趋势和未来

    摘要:本文介绍了嵌入式系统编程语言的发展,将C语言与其他流行的编程语言进行了比较,分析了它们的优缺点和未来的发展趋势。

    本文引用地址:

    编写下一个项目时最好使用什么语言?如果您是嵌入式系统设计师,您可能会认为这个问题很可笑。如果您需要更多管理,您将使用 C 或 C++(C 的派生词)。可能有一些关键代码段是用汇编语言编写的,但根据 Barr Group 最近的一项研究,目前 95% 的嵌入式系统代码是用 C 或 C++ 编写的。

    然而,世界正在发生变化。新的程序员、新的挑战和新的架构让 C 对嵌入式软件失去了控制。根据最近的一项研究,增长最快的嵌入式计算语言是 Python,还有许多其他竞争语言,但这些仍然是少数。但渐渐地,一直坚持使用 C/C++ 的程序员开始像 20 年前的汇编语言专家那样冒险——开发更快、更紧凑、更可靠的程序。图 1 提出新语言可以提高嵌入式计算领域的性能。

    C语言在嵌入式领域的地位受到攻击

    嵌入式算法发展的主要驱动力是其他工作环境的程序员进入嵌入式领域。这一点在应届毕业生进入劳动力市场时表现得最为明显。以前,应届毕业生学习 C 课程编程,并会用 C 或 C++ 完成大部分项目。而现在,情况已不再如此。英特尔软件工程经理大卫斯图尔特指出,“现在,大多数计算机科学课程都使用 Python 作为介绍语言。” 计算机科学专业的毕业生可能在 Python、Ruby 和几种脚本语言方面拥有丰富的经验,但他们可能从未认真使用过 C。与此同时,其他影响也在增加。使用 Android 作为相关或用户友好的嵌入式设计平台为 Android 的自然语言 Java 开辟了机会。在这个复杂环境的另一端,机器人、无人机或类似小型项目的爱好开发人员通常具有 Arduino 或 Raspberry-Pi 背景。他们的经验将体现在非常紧凑和简单的程序生成器或 B# 等小型语言环境中。

    这种现象也对物联网 (IoT) 的广泛研究产生影响,Web 开发人员也参与了讨论。他们认为,如果嵌入式系统的外部接口是 RESTful Web,那么编程语言应该是 JavaScript 或其服务器端相关的 Node.js。热衷于 C 开发的人应该看看 node.js – PayPal 和 Walmart 等公司大量使用这个可扩展的平台进行企业级开发,并且根据跟踪网站 modulecounts.com,它可以用于任何编程语。其中,平台的辅助支撑系统增长最快。

    选择 Node.js 的动机部分是文化因素,但也有架构因素。物联网在客户端、互联网和服务器端之间分配其嵌入式系统任务。其中,客户端与实际环境相连,通常需要尽可能少的硬件。客户端自然是硬件特定库支持的Web应用程序,而服务器端是服务器应用程序。因此,对于 Web 程序员来说,在物联网系统编程中使用 JavaScript 和 Node.js 是显而易见的。

    日益复杂的嵌入式算法是变革的另一个驱动力。简单的控制回路被卡尔曼滤波器、神经网络和基于模型的控制函数所取代,高性能计算语言——Python、开放计算语言(例如OpenCL™)、MATLAB等基于模型的环境逐渐发展起来.

    强烈的动机

    那么为什么这些新人不停下来学习C呢?“真正的原因是开发人员的生产力,”斯图尔特说。C 的反对者长期以来一直认为该语言速度慢、容易出错,并且会带来意想不到的硬件。相关问题,除了原始程序员之外的任何人都很难阅读它。这些因素可能对提高设计性能产生不利影响。并且许多较新的语言正在逐渐朝着快速学习和高效的代码重用方向发展。虽然今天几乎所有语言都受益于 C 高度简洁的语法,但现在重点已经转移到可读性而不是最小字符数上。现代语言不仅鼓励一致的文档,而且结构化的约定也经常这样定义文档。C 程序员一直将此类文档视为自由表达的示例,因为作者本人不会参与其中。例如,这些约定使实用程序能够从 Python 组件的结构化注释生成用户手册。

    现代语言也采用高级数据结构,任何对象都可以在 C++ 环境中创建并重用。基于指针,Python 还提供了自然的 List 和 Dictionary 数据类型。而像Ruby这样的其他语言,基本上都是面向对象的,支持结构化和重用,这让它能够融入到程序员的习惯中。

    影响现代语言重用性的另外两个重要因素是动态类型和模块化。动态输入是一个非常有争议的因素。当程序员处理变量时,解释器确定程序员传递给表达式的值的当前数据类型——几乎所有这些服务器端语言都是解释的,而不是编译的。然后解释器选择适当的操作来评估包含该数据类型的表达式。这样,程序员就不用太担心他要调用的函数是需要整型变量还是实型变量。然而,嵌入式程序和代码可靠性专家很快指出动态输入在运行时实际上效率不高。另一个因素是一些程序员对模块化的偏见。

    可读性、一致的文档、动态类型和功能的大量重用已经催化了开源空间中辅助支持系统的爆炸式增长。程序员本能地找到可以在大型开源库中使用的函数,例如 npm(用于 Node.js)、PyPI(用于 Python)或 Rubygems.org(用于 Ruby)。如果他们不必修改组件或编写新组件,他们将回到库中工作。结果,库变得越来越大(npm 目前大约有 250,000 个组件)。这些大型辅助支持系统也大大提高了程序员的工作效率。

    嵌入式新编程语言的不足及解决方案

    这些编程语言虽然有这么多优点,但也有缺点。为了在嵌入式计算领域站稳脚跟,还有很多事情要做。

    大多数这些语言最明显的问题是它们是解释的,而不是编译的。这意味着它们需要相当多的运行时包,包括解释器本身、工作存储、动态输入开销和运行时库等,以适应嵌入式系统。基本上这一切都会非常紧凑,一些Java虚拟机可以装进几十千字节,但是Node.js,Pythonc程序设计语言视频,以及来自服务器端的类似语言需要自己的空间。在添加程序员自己的代码之前,一个合理兼容的 Python 虚拟机可能会占用几兆字节。

    在性能方面,解释器读取的每一行代码(源代码或预处理的中间代码)都需要对其进行解析,进行运行时检查,并调用执行其需要执行的例程。在 C 语言中,这会产生包含许多操作的单行代码,并编译成许多机器语言指令。执行时间和能源消耗的成本会增加。

    在运行时效率方面,可以使用即时 (JiT) 编译器进行改进。JiT 编译器可以与解释器并行工作,为循环中的代码生成已编译的机器指令c程序设计语言视频,因此后续代码可以更快地执行。“JiT 技术非常有趣,”斯图尔特说。“PyPy JiT 编译器将 Python 的执行速度提高了一倍。” 为了提高效率,还研究了其他方法。例如,如果函数是非阻塞的,或者如果使用了信号,则即使在使用诸如循环展开之类的方法来创建更多线程之前,具有许多函数调用的程序也可以包含许多线程。因此,许多多线程内核可以应用于单个组件——这是高性能计算研究的方向。更远,Ruby 语言原生支持多线程,因此即使底层操作系统不支持线程,它也可以生成线程代码。一些团队寻求在硬件加速器中实现库或组件,例如图形处理单元 (GPU)、至强融核和 FPGA。事实上,解释器本身会有适合加速的任务。

    服务器端语言遇到的其他困难是缺乏处理实际环境的结构。在服务器环境中,除了网络和存储之外,没有实时限制,也没有 I/O。这个问题可以通过多种方式解决。

    简而言之,Android 环境将 Java 代码包装在一个几乎与硬件无关的抽象中:一个具有图形、触摸屏、音频、视频、多个网络和物理传感器的虚拟机。对于更强调物理 I/O,甚至能够在微控制器上运行的轻量级平台,嵌入式 Java 是可用的。

    像 Python 这样的语言需要不同的方法。由于 CPython 解释器运行在 Linux 上,它原则上可以运行在任何具有足够速度和物理内存的嵌入式 Linux 系统上。通过减少加载时间开销、提供物理 I/O 访问功能、使用硬件加速器、进一步适应 CPython 以及适应实时约束的运行时系统,这方面已经有了一个工作基础。最近的一个例子是用于 STM32 微控制器的裸机 Micro Python 环境。虽然这看起来几乎不可能,但在 Node.js 下的 JavaScript 引擎上已经有类似的工作了。

    安全带来更多问题。许多安全和可靠性标准不鼓励甚至禁止使用未经正式认证或完全测试的开源代码。这些限制使得无法重用组件,或者它们太复杂而无法提高性能。相同级别的审查延伸到虚拟机等开源环境。在可靠和安全的环境中,CPython 等开源平台很容易受到攻击。

    编程语言的未来方向

    最后,鉴于推动新语言进入嵌入式世界的众多力量,可以预见的是,将出现包含来自多种源语言的组件的多语言系统,每个选择一个关键库来使用,或者方便某些类型的开发人员使用。当然,您可以将多个虚拟机放在不同的 CPU 内核上,将它们统一在一个内核管理程序下,然后通过函数调用,为任务之间的消息传输提供约定。然而,这样的系统最终会变得非常大。

    另一种可能是一组依赖于语言的解释器,它们为 JiT 编译器生成公共中间代码(图 2)。当然,可以列出其他问题,例如,不同的任务有不同的通信模型、内存模型和调试环境,但这些问题总是可以解决的。

    概括

    如果这些最终到来,一个有经验的嵌入式程序员应该如何应对?你可以从网络编程、服务器,甚至是爱好者使用的开发环境中学习这些语言。下个项目可以尝试用C++开发组件和解析语言。学习需要时间,但独立并行开发是值得的。

    本文来自中国科技期刊《电子产品世界》2016年第6期第18页,欢迎您在撰写论文时引用并注明出处。

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » 嵌入式系统编程语言的发展与未来的发展趋势和未来

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论