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

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

3天内不再提示

用于嵌入式设备的JavaScript

星星科技指导员 来源:嵌入式计算设计 作者:Peter Hoddie 2022-06-29 09:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式系统创建软件的程序员对脚本并不陌生。他们选择脚本是因为它们是解决问题的最快方法。脚本用于自动化构建和运行验证测试。解释性语言——一种使编程语言成为脚本语言的通用定义——例如 Forth 已经使用了几十年,以减少代码的内存占用,同时以可移植的方式提高可维护性。

从玩具到工具

JavaScript 于 1995 年作为网页编程语言首次出现。由 Brendan Eich 通过将类似 C 的语法应用于基于原型的继承而创建的 JavaScript 并未被视为为任何环境创建商业软件的可行工具。这种看法慢慢地改变了。在幕后,JavaScript 通过 ECMA International 成为标准,现在正在进行第 6 次重大修订。

雅虎的 Douglas Crockford 富有洞察力的工作创建了数据交换格式 JSON(JavaScript 标准对象表示法)作为 JavaScript 的严格子集。JSON 已迅速取代 XML,成为 Web 客户端和服务器之间通信的首选数据格式,因为它简单易用,尤其是 JavaScript 软件。

2009 年,Ryan Dahl 推出了 node.js,这是一种使用 Google 闪电般快速的 V8 JavaScript 引擎在 JavaScript 中构建 Web 服务器的高效方法。node.js 已被迅速采用,带来了强大的开发人员生态系统和大量开源模块。

O‘Reilly Media 的创始人 Tim O’Reilly 曾对 JavaScript 从业余爱好者的玩具转变为专业工具的转变发表了著名的评论:“过去学习 JavaScript 意味着你不是一个认真的软件开发人员。今天,不学习 Javascript 意味着同样的事情。”

JavaScript 现在广泛用于网页、Web 服务器和移动应用程序。但还没有在嵌入式系统中。这有望改变。

熟悉的语法

今天的大多数嵌入式编程都是用 C 完成的。与许多需要 C 程序员学习不同语法和编程风格的脚本语言不同,JavaScript 的语法与 C 非常相似。有经验的嵌入式开发人员可能只需要一个下午在他们能够阅读、理解和成功修改 JavaScript 代码之前。

poYBAGK7raCAImuZAACbjNa9W_g399.png

当然,有效地使用任何编程语言都需要学习。许多 JavaScript 书籍都专注于构建网页,但 David Flanagan 的优秀 JavaScript:权威指南介绍了独立于 Web 的语言。Crockford 颇具影响力的 JavaScript: The Good Parts 是一本面向有经验的 JavaScript 程序员的固执己见、务实的风格指南。

但是脚本很慢

嵌入式开发人员对性能保持警惕。脚本语言天生就比 C 慢。因此,任何优秀的嵌入式开发人员的第一个冲动就是对任何脚本语言都抱有极大的怀疑。然而,提供卓越性能的可靠方法是可用的:

利用内置函数和对象。JavaScript 语言具有复杂的内置对象,支持数组、JSON、正则表达式和其他字符串操作。这些实现通常在 JavaScript 引擎中得到了很好的优化。花时间了解这些,以避免在您的脚本中重复它们的功能。

仔细编码。因为脚本比本机代码慢,所以优化良好的代码对于性能至关重要。JavaScript 的动态特性意味着 JavaScript 引擎通常无法像 C 编译器那样有效地优化代码。

不要试图在脚本中做所有事情。本机代码更快,因此将其用于计算复杂的功能。没有一种语言适合所有情况,所以选择最适合工作的语言,而不是试图“100% 纯正”。每个 JavaScript 引擎都提供了一种从脚本调用本机代码的方法。如果不确定性能,请先在 JavaScript 中实现,因为它更容易实现。之后,对系统进行概要分析。如果存在性能瓶颈,请在 C 中重新实现该函数。

JIT 呢?

提高解释代码性能的常见解决方案是即时编译器 (JIT)。JIT 将脚本代码编译为目标设备上的本机代码。JIT 的使用在现代 Web 浏览器的 JavaScript 引擎中很常见。但是,在嵌入式设备上使用 JIT 是有问题的,因为 JIT 本身需要额外的代码空间,因为除了原始脚本代码之外,本机代码还需要消耗内存,并且因为运行 JIT 需要 CPU 周期。

与 Web 浏览器相比,嵌入式设备具有一个显着优势:虽然浏览器必须能够高效地运行数十亿网页中的任何一个,但嵌入式设备只需要高效地运行其内置软件。这使嵌入式开发人员可以选择直接用 C 语言编写性能关键的脚本,而不是依赖 JIT。

Mozilla 的一个项目 asm.js 中出现了使用 C 的有希望的替代方案。asm.js 定义了一个严格的 JavaScript 子集,它更容易转换为本机代码或 C 源代码。asm.js 利用 C 和 JavaScript 之间的语法相似性来简化翻译。嵌入式开发人员可以在 asm.js JavaScript 子集中编写性能关键代码,并将其编译为本机代码作为构建过程的一部分,而不是依赖于 JIT。asm.js 的初始开发工作显示性能约为最佳本机实现的一半,预计其他开发将缩小这一差距。

记忆

内存空间是嵌入式开发人员的另一个关键问题。JavaScript 既有优点也有缺点。一个明显的缺点是用于执行脚本的 JavaScript 引擎,这是一个不小的大小——从几十千字节到几兆字节不等,具体取决于引擎。因为 JavaScript 使用动态类型,变量有一些额外的内存开销。作为最坏情况的示例,布尔值可能使用 16 个字节。

积极的一面是,JavaScript 使用垃圾收集器,无需显式释放内存。通过这种简化,嵌入式开发人员有时间专注于开发的其他方面。此外,通过自动释放未使用的内存,垃圾收集器消除了许多缓慢的、小的内存泄漏,这些泄漏会导致长期不稳定,隔离和修复可能极具挑战性。仅这一点就使得必须可靠运行数月或数年的嵌入式系统变得非常重要。此外,在某些情况下,研究表明垃圾收集器的 CPU 要求低于显式释放内存。

垃圾收集器的一个风险,尤其是在内存受限的环境中,是抖动——垃圾收集器运行得太频繁以至于对系统性能产生不利影响。这个问题可以通过 JavaScript 编程风格来避免,这种风格在很大程度上限制了对嵌入式设备或应用程序中主要状态变化的新对象的创建。这种方法可以使内存使用保持稳定,因此垃圾收集器不需要经常运行。

用户脚本

使用 JavaScript 的嵌入式设备可以选择由最终用户启用脚本。由于 JavaScript 是一种托管执行环境,因此可以通过安全地沙盒化脚本来确保最终用户的脚本能力。通过允许消费者、爱好者和专业程序员编写设备脚本来实现的定制将创造新的机会,就像智能手机上的应用程序革命一样。

今天的嵌入式 JavaScript

嵌入式设备不再是孤岛。它们通过云中的网络服务、网络浏览器以及手机和平板电脑相互连接。JavaScript 是唯一可用于为所有人开发软件的语言,以及他们使用 JSON 交换的数据。

JavaScript 在嵌入式设备上为嵌入式程序员简化开发工作——并为客户提供更可靠、更可定制的产品——的潜力是巨大的。通过采用 JavaScript,嵌入式设备的创建者将能够利用许多活跃的 JavaScript 程序员的创新。

作为一个行业,我们正处于 JavaScript 在嵌入式设备中成为现实的风口浪尖。幸运的是,已经有三种开发系统可供开发人员开始使用嵌入式 JavaScript:

Espruino 是一个单芯片开发板,标榜为用于微控制器的 JavaScript。它运行开源的 Espruino JavaScript 引擎,该引擎支持 JavaScript 标准的一个子集。

Tessel 将集成的 Wi-Fi 引入以 JavaScript 为中心的微控制器解决方案。Tessel 提供了与 node.js 兼容的 API,便于 node.js 开发人员采用。Tessel 将 JavaScript 翻译成 Lua(另一种脚本语言)来执行。翻译实现了 JavaScript 标准的一个子集。

Marvell Semiconductor 的 Kinoma Create 是一款“基于 JavaScript 的物联网构建工具包”,运行 Marvell Semiconductor 的 XS JavaScript 引擎,支持完整的 JavaScript 第 5 版标准。

这些开发系统中的每一个都是在嵌入式设备上开始 JavaScript 开发的好工具。尽管 JavaScript 在近 20 年前首次引入,但它才刚刚开始用于嵌入式计算。毫无疑问,这将有许多令人兴奋的方式将进一步发展。通过现在开始,您可以帮助塑造 JavaScript 在未来嵌入式系统中的使用方式。

审核编辑:郭婷

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

    关注

    5186

    文章

    20155

    浏览量

    328968
  • 物联网
    +关注

    关注

    2939

    文章

    47330

    浏览量

    408041
  • JAVA
    +关注

    关注

    20

    文章

    2997

    浏览量

    115692
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式和FPGA的区别

    开发中做出更明智的技术选择。 基本概念解析 嵌入式系统(Embedded System)是一种专用计算机系统,通常包含微处理器/微控制器、存储器和专用外围设备,被设计用于执行特定功能。它强调
    发表于 11-19 06:55

    嵌入式实时操作系统的特点

    、VxWorks 和 QNX Neutrino 等,它们被广泛应用于汽车电子、工业自动化、医疗设备、消费电子和物联网等领域的嵌入式系统中。
    发表于 11-13 06:30

    嵌入式需要掌握哪些核心技能?

    /网络设备)、中断底半部处理,适用于高端嵌入式设备。 企业需求:RTOS是60%岗位的核心要求,Linux开发需求随项目复杂度增长。 4)通信协议与接口 基础协议:UART、SPI、
    发表于 10-21 16:25

    嵌入式开发就业还有前景吗?

    的电路设计和编程能力。 2)医疗设备 医疗设备是指用于诊断、治疗和辅助治疗的各种设备。随着医疗技术的不断发展,医疗设备市场也在不断扩大,
    发表于 07-16 10:47

    Linux嵌入式和单片机嵌入式的区别?

    Linux嵌入式与单片机嵌入式在多个方面存在显著的区别,以下是详细的比较和归纳: 一、基本概念 1. Linux嵌入式: 定义:将Linux操作系统运行在嵌入式
    发表于 06-20 09:46

    嵌入式开发入门指南:从零开始学习嵌入式

    特定功能的计算机系统,广泛应用于智能家居、工业控制、医疗设备、车载系统等领域。 2. 学习嵌入式开发的前置知识熟悉C语言编程掌握基本的数据结构与算法了解数字电路与微控制器原理熟悉Linux操作系统
    发表于 05-15 09:29

    MAXQ1061/MAXQ1062用于嵌入式设备的DeepCover加密控制器技术手册

    DeepCover®嵌入式安全方案采用多重先进的物理安全机制保护敏感数据,提供最高等级的密钥存储安全保护。 DeepCover加密控制器(MAXQ1061)保护软件IP、通信和盈利模式的保密性、真实性和完整性。它是用于连接嵌入式
    的头像 发表于 05-14 10:43 698次阅读

    高可靠性嵌入式主板设计

    嵌入式系统已广泛应用于各个领域,从航空航天、医疗设备到工业控制和智能家居,其应用范围不断扩展。随着应用场景的日益复杂和关键,嵌入式系统的可靠性变得至关重要。
    的头像 发表于 03-25 15:11 816次阅读
    高可靠性<b class='flag-5'>嵌入式</b>主板设计

    嵌入式主板选型与应用指南

    嵌入式主板是专为嵌入式系统设计的核心硬件平台,广泛应用于工业控制、物联网、医疗设备等领域。以下是关于嵌入式主板的详细介绍:1.
    的头像 发表于 02-27 14:53 937次阅读
    <b class='flag-5'>嵌入式</b>主板选型与应用指南

    小身材大能量:解读小尺寸嵌入式主板

    ,就带大家一同深入了解小尺寸嵌入式主板。小尺寸嵌入式主板特点小尺寸嵌入式主板,尺寸规格相对紧凑,专为特定应用场景和设备量身定制的主板。它们被设计用于
    的头像 发表于 02-17 18:02 1001次阅读
    小身材大能量:解读小尺寸<b class='flag-5'>嵌入式</b>主板

    嵌入式机器学习的应用特性与软件开发环境

    作者:DigiKey Editor 在许多嵌入式系统中,必须采用嵌入式机器学习(Embedded Machine Learning)技术,这是指将机器学习模型部署在资源受限的设备(如微控制器、物联网
    的头像 发表于 01-25 17:05 1215次阅读
    <b class='flag-5'>嵌入式</b>机器学习的应用特性与软件开发环境

    ARM架构嵌入式主板特点

    嵌入式主板可以理解为嵌入设备用于控制和数据处理的CPU板,也就是设备的“大脑”。当主板嵌入
    的头像 发表于 12-31 16:03 1845次阅读
    ARM架构<b class='flag-5'>嵌入式</b>主板特点

    ARM嵌入式通信协议及应用

    同工作至关重要。 一、ARM嵌入式系统概述 ARM(Advanced RISC Machines)是一种基于精简指令集计算机(RISC)的处理器架构,广泛应用于移动设备、物联网(IoT)设备
    的头像 发表于 12-28 09:18 1500次阅读

    新手怎么学嵌入式?

    新手怎么学嵌入式? 在科技飞速发展的今天,嵌入式技术已经渗透到我们生活的各个角落,从智能手机到智能家居,从汽车电子到医疗设备。对于新手而言,嵌入式技术就像是一座充满神秘和机遇的宝藏,等
    发表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能是指将人工智能技术应用于嵌入式系统中的一种技术。嵌入式系统是嵌入到其他设备或系统中
    的头像 发表于 12-11 09:23 1520次阅读
    什么是<b class='flag-5'>嵌入式</b>人工智能