0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用于嵌入式設(shè)備的JavaScript

星星科技指導(dǎo)員 ? 來源:嵌入式計算設(shè)計 ? 作者:Peter Hoddie ? 2022-06-29 09:39 ? 次閱讀

嵌入式系統(tǒng)創(chuàng)建軟件的程序員對腳本并不陌生。他們選擇腳本是因為它們是解決問題的最快方法。腳本用于自動化構(gòu)建和運行驗證測試。解釋性語言——一種使編程語言成為腳本語言的通用定義——例如 Forth 已經(jīng)使用了幾十年,以減少代碼的內(nèi)存占用,同時以可移植的方式提高可維護性。

從玩具到工具

JavaScript 于 1995 年作為網(wǎng)頁編程語言首次出現(xiàn)。由 Brendan Eich 通過將類似 C 的語法應(yīng)用于基于原型的繼承而創(chuàng)建的 JavaScript 并未被視為為任何環(huán)境創(chuàng)建商業(yè)軟件的可行工具。這種看法慢慢地改變了。在幕后,JavaScript 通過 ECMA International 成為標準,現(xiàn)在正在進行第 6 次重大修訂。

雅虎的 Douglas Crockford 富有洞察力的工作創(chuàng)建了數(shù)據(jù)交換格式 JSON(JavaScript 標準對象表示法)作為 JavaScript 的嚴格子集。JSON 已迅速取代 XML,成為 Web 客戶端和服務(wù)器之間通信的首選數(shù)據(jù)格式,因為它簡單易用,尤其是 JavaScript 軟件。

2009 年,Ryan Dahl 推出了 node.js,這是一種使用 Google 閃電般快速的 V8 JavaScript 引擎在 JavaScript 中構(gòu)建 Web 服務(wù)器的高效方法。node.js 已被迅速采用,帶來了強大的開發(fā)人員生態(tài)系統(tǒng)和大量開源模塊。

O‘Reilly Media 的創(chuàng)始人 Tim O’Reilly 曾對 JavaScript 從業(yè)余愛好者的玩具轉(zhuǎn)變?yōu)閷I(yè)工具的轉(zhuǎn)變發(fā)表了著名的評論:“過去學(xué)習(xí) JavaScript 意味著你不是一個認真的軟件開發(fā)人員。今天,不學(xué)習(xí) Javascript 意味著同樣的事情?!?/p>

JavaScript 現(xiàn)在廣泛用于網(wǎng)頁、Web 服務(wù)器和移動應(yīng)用程序。但還沒有在嵌入式系統(tǒng)中。這有望改變。

熟悉的語法

今天的大多數(shù)嵌入式編程都是用 C 完成的。與許多需要 C 程序員學(xué)習(xí)不同語法和編程風(fēng)格的腳本語言不同,JavaScript 的語法與 C 非常相似。有經(jīng)驗的嵌入式開發(fā)人員可能只需要一個下午在他們能夠閱讀、理解和成功修改 JavaScript 代碼之前。

poYBAGK7raCAImuZAACbjNa9W_g399.png

當然,有效地使用任何編程語言都需要學(xué)習(xí)。許多 JavaScript 書籍都專注于構(gòu)建網(wǎng)頁,但 David Flanagan 的優(yōu)秀 JavaScript:權(quán)威指南介紹了獨立于 Web 的語言。Crockford 頗具影響力的 JavaScript: The Good Parts 是一本面向有經(jīng)驗的 JavaScript 程序員的固執(zhí)己見、務(wù)實的風(fēng)格指南。

但是腳本很慢

嵌入式開發(fā)人員對性能保持警惕。腳本語言天生就比 C 慢。因此,任何優(yōu)秀的嵌入式開發(fā)人員的第一個沖動就是對任何腳本語言都抱有極大的懷疑。然而,提供卓越性能的可靠方法是可用的:

利用內(nèi)置函數(shù)和對象。JavaScript 語言具有復(fù)雜的內(nèi)置對象,支持數(shù)組、JSON、正則表達式和其他字符串操作。這些實現(xiàn)通常在 JavaScript 引擎中得到了很好的優(yōu)化?;〞r間了解這些,以避免在您的腳本中重復(fù)它們的功能。

仔細編碼。因為腳本比本機代碼慢,所以優(yōu)化良好的代碼對于性能至關(guān)重要。JavaScript 的動態(tài)特性意味著 JavaScript 引擎通常無法像 C 編譯器那樣有效地優(yōu)化代碼。

不要試圖在腳本中做所有事情。本機代碼更快,因此將其用于計算復(fù)雜的功能。沒有一種語言適合所有情況,所以選擇最適合工作的語言,而不是試圖“100% 純正”。每個 JavaScript 引擎都提供了一種從腳本調(diào)用本機代碼的方法。如果不確定性能,請先在 JavaScript 中實現(xiàn),因為它更容易實現(xiàn)。之后,對系統(tǒng)進行概要分析。如果存在性能瓶頸,請在 C 中重新實現(xiàn)該函數(shù)。

JIT 呢?

提高解釋代碼性能的常見解決方案是即時編譯器 (JIT)。JIT 將腳本代碼編譯為目標設(shè)備上的本機代碼。JIT 的使用在現(xiàn)代 Web 瀏覽器的 JavaScript 引擎中很常見。但是,在嵌入式設(shè)備上使用 JIT 是有問題的,因為 JIT 本身需要額外的代碼空間,因為除了原始腳本代碼之外,本機代碼還需要消耗內(nèi)存,并且因為運行 JIT 需要 CPU 周期。

與 Web 瀏覽器相比,嵌入式設(shè)備具有一個顯著優(yōu)勢:雖然瀏覽器必須能夠高效地運行數(shù)十億網(wǎng)頁中的任何一個,但嵌入式設(shè)備只需要高效地運行其內(nèi)置軟件。這使嵌入式開發(fā)人員可以選擇直接用 C 語言編寫性能關(guān)鍵的腳本,而不是依賴 JIT。

Mozilla 的一個項目 asm.js 中出現(xiàn)了使用 C 的有希望的替代方案。asm.js 定義了一個嚴格的 JavaScript 子集,它更容易轉(zhuǎn)換為本機代碼或 C 源代碼。asm.js 利用 C 和 JavaScript 之間的語法相似性來簡化翻譯。嵌入式開發(fā)人員可以在 asm.js JavaScript 子集中編寫性能關(guān)鍵代碼,并將其編譯為本機代碼作為構(gòu)建過程的一部分,而不是依賴于 JIT。asm.js 的初始開發(fā)工作顯示性能約為最佳本機實現(xiàn)的一半,預(yù)計其他開發(fā)將縮小這一差距。

記憶

內(nèi)存空間是嵌入式開發(fā)人員的另一個關(guān)鍵問題。JavaScript 既有優(yōu)點也有缺點。一個明顯的缺點是用于執(zhí)行腳本的 JavaScript 引擎,這是一個不小的大小——從幾十千字節(jié)到幾兆字節(jié)不等,具體取決于引擎。因為 JavaScript 使用動態(tài)類型,變量有一些額外的內(nèi)存開銷。作為最壞情況的示例,布爾值可能使用 16 個字節(jié)。

積極的一面是,JavaScript 使用垃圾收集器,無需顯式釋放內(nèi)存。通過這種簡化,嵌入式開發(fā)人員有時間專注于開發(fā)的其他方面。此外,通過自動釋放未使用的內(nèi)存,垃圾收集器消除了許多緩慢的、小的內(nèi)存泄漏,這些泄漏會導(dǎo)致長期不穩(wěn)定,隔離和修復(fù)可能極具挑戰(zhàn)性。僅這一點就使得必須可靠運行數(shù)月或數(shù)年的嵌入式系統(tǒng)變得非常重要。此外,在某些情況下,研究表明垃圾收集器的 CPU 要求低于顯式釋放內(nèi)存。

垃圾收集器的一個風(fēng)險,尤其是在內(nèi)存受限的環(huán)境中,是抖動——垃圾收集器運行得太頻繁以至于對系統(tǒng)性能產(chǎn)生不利影響。這個問題可以通過 JavaScript 編程風(fēng)格來避免,這種風(fēng)格在很大程度上限制了對嵌入式設(shè)備或應(yīng)用程序中主要狀態(tài)變化的新對象的創(chuàng)建。這種方法可以使內(nèi)存使用保持穩(wěn)定,因此垃圾收集器不需要經(jīng)常運行。

用戶腳本

使用 JavaScript 的嵌入式設(shè)備可以選擇由最終用戶啟用腳本。由于 JavaScript 是一種托管執(zhí)行環(huán)境,因此可以通過安全地沙盒化腳本來確保最終用戶的腳本能力。通過允許消費者、愛好者和專業(yè)程序員編寫設(shè)備腳本來實現(xiàn)的定制將創(chuàng)造新的機會,就像智能手機上的應(yīng)用程序革命一樣。

今天的嵌入式 JavaScript

嵌入式設(shè)備不再是孤島。它們通過云中的網(wǎng)絡(luò)服務(wù)、網(wǎng)絡(luò)瀏覽器以及手機和平板電腦相互連接。JavaScript 是唯一可用于為所有人開發(fā)軟件的語言,以及他們使用 JSON 交換的數(shù)據(jù)。

JavaScript 在嵌入式設(shè)備上為嵌入式程序員簡化開發(fā)工作——并為客戶提供更可靠、更可定制的產(chǎn)品——的潛力是巨大的。通過采用 JavaScript,嵌入式設(shè)備的創(chuàng)建者將能夠利用許多活躍的 JavaScript 程序員的創(chuàng)新。

作為一個行業(yè),我們正處于 JavaScript 在嵌入式設(shè)備中成為現(xiàn)實的風(fēng)口浪尖。幸運的是,已經(jīng)有三種開發(fā)系統(tǒng)可供開發(fā)人員開始使用嵌入式 JavaScript:

Espruino 是一個單芯片開發(fā)板,標榜為用于微控制器的 JavaScript。它運行開源的 Espruino JavaScript 引擎,該引擎支持 JavaScript 標準的一個子集。

Tessel 將集成的 Wi-Fi 引入以 JavaScript 為中心的微控制器解決方案。Tessel 提供了與 node.js 兼容的 API,便于 node.js 開發(fā)人員采用。Tessel 將 JavaScript 翻譯成 Lua(另一種腳本語言)來執(zhí)行。翻譯實現(xiàn)了 JavaScript 標準的一個子集。

Marvell Semiconductor 的 Kinoma Create 是一款“基于 JavaScript 的物聯(lián)網(wǎng)構(gòu)建工具包”,運行 Marvell Semiconductor 的 XS JavaScript 引擎,支持完整的 JavaScript 第 5 版標準。

這些開發(fā)系統(tǒng)中的每一個都是在嵌入式設(shè)備上開始 JavaScript 開發(fā)的好工具。盡管 JavaScript 在近 20 年前首次引入,但它才剛剛開始用于嵌入式計算。毫無疑問,這將有許多令人興奮的方式將進一步發(fā)展。通過現(xiàn)在開始,您可以幫助塑造 JavaScript 在未來嵌入式系統(tǒng)中的使用方式。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5083

    文章

    19131

    瀏覽量

    305549
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2909

    文章

    44671

    瀏覽量

    373707
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2969

    瀏覽量

    104789
收藏 人收藏

    評論

    相關(guān)推薦

    ARM架構(gòu)嵌入式主板特點

    嵌入式主板可以理解為嵌入設(shè)備用于控制和數(shù)據(jù)處理的CPU板,也就是設(shè)備的“大腦”。當主板嵌入
    的頭像 發(fā)表于 12-31 16:03 ?127次閱讀
    ARM架構(gòu)<b class='flag-5'>嵌入式</b>主板特點

    新手怎么學(xué)嵌入式?

    新手怎么學(xué)嵌入式? 在科技飛速發(fā)展的今天,嵌入式技術(shù)已經(jīng)滲透到我們生活的各個角落,從智能手機到智能家居,從汽車電子到醫(yī)療設(shè)備。對于新手而言,嵌入式技術(shù)就像是一座充滿神秘和機遇的寶藏,等
    發(fā)表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能是指將人工智能技術(shù)應(yīng)用于嵌入式系統(tǒng)中的一種技術(shù)。嵌入式系統(tǒng)是嵌入到其他設(shè)備或系統(tǒng)中
    的頭像 發(fā)表于 12-11 09:23 ?309次閱讀
    什么是<b class='flag-5'>嵌入式</b>人工智能

    嵌入式系統(tǒng)與物聯(lián)網(wǎng)的結(jié)合

    。這兩者的結(jié)合,為智能設(shè)備和智能系統(tǒng)的發(fā)展提供了強大的動力。 一、嵌入式系統(tǒng)與物聯(lián)網(wǎng)的基本概念 嵌入式系統(tǒng) 嵌入式系統(tǒng)是一種專用的計算機系統(tǒng),它被設(shè)計
    的頭像 發(fā)表于 11-06 10:23 ?317次閱讀

    什么是嵌入式?一文讀懂嵌入式主板

    在現(xiàn)代科技浪潮中,嵌入式技術(shù)已成為支撐各種智能設(shè)備和系統(tǒng)運行的核心力量。那么,究竟什么是嵌入式?嵌入式系統(tǒng),顧名思義,是將計算機的硬件和軟件嵌入
    的頭像 發(fā)表于 10-16 10:14 ?1076次閱讀

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統(tǒng)的核心組件,是一種用于控制和數(shù)據(jù)處理的計算機硬件,其設(shè)計旨在嵌入特定設(shè)備中執(zhí)行專門任務(wù)。
    的頭像 發(fā)表于 09-30 10:05 ?549次閱讀

    嵌入式QT常見開發(fā)方式有哪些?

    提供的豐富組件如按鈕、文本框、窗口等構(gòu)建傳統(tǒng)的桌面應(yīng)用風(fēng)格界面。對于嵌入式設(shè)備上的復(fù)雜用戶界面或者需要高性能響應(yīng)的應(yīng)用,Qt Widgets是一個較為常用的選擇。 2.Qt Designer配合C++
    發(fā)表于 08-12 10:05

    嵌入式熱門領(lǐng)域有哪些?

    通過物聯(lián)網(wǎng)連接各種物理設(shè)備和傳感器,促使它們之間實現(xiàn)信息的交換和數(shù)據(jù)的共享。從智能家居到智能城市,物聯(lián)網(wǎng)的應(yīng)用不斷擴展,為嵌入式系統(tǒng)工程師帶來了廣泛的就業(yè)機會和發(fā)展前景。 自動駕駛 自動駕駛技術(shù)作為
    發(fā)表于 07-16 09:23

    嵌入式主板,你了解多少?

    嵌入式主板,也稱為嵌入式計算機主板,是一種專門設(shè)計用于嵌入式系統(tǒng)的計算機主板。與臺式機和筆記本電腦中使用的常規(guī)主板不同,嵌入式主板設(shè)計
    的頭像 發(fā)表于 04-17 15:11 ?1461次閱讀

    嵌入式熱門發(fā)展方向有哪些?

    熱門發(fā)展方向,包括但不限于: 1.物聯(lián)網(wǎng): 隨著物聯(lián)網(wǎng)的快速發(fā)展,嵌入式系統(tǒng)在物聯(lián)網(wǎng)領(lǐng)域的應(yīng)用也越來越廣泛。嵌入式系統(tǒng)可以用于物聯(lián)網(wǎng)設(shè)備的控制、監(jiān)測和數(shù)據(jù)處理等方面。例如,在服務(wù)領(lǐng)域,
    發(fā)表于 04-11 14:17

    嵌入式fpga是什么意思

    嵌入式FPGA是指將FPGA技術(shù)集成到嵌入式系統(tǒng)中的一種解決方案。嵌入式系統(tǒng)是一種為特定應(yīng)用而設(shè)計的計算機系統(tǒng),它通常包括處理器、內(nèi)存、外設(shè)接口等組件,并且被嵌入到更大的
    的頭像 發(fā)表于 03-15 14:29 ?1268次閱讀

    嵌入式系統(tǒng)發(fā)展前景?

    的發(fā)展前景也十分廣闊。 隨著物聯(lián)網(wǎng)和智能設(shè)備的快速發(fā)展,嵌入式系統(tǒng)將更為普遍地應(yīng)用于各種設(shè)備和設(shè)施,包括家用電器、醫(yī)療設(shè)備、交通工具等。這些
    發(fā)表于 02-22 14:09

    嵌入式工控機性能特點 嵌入式工控機應(yīng)用場景

    嵌入式工控機性能特點 嵌入式工控機應(yīng)用場景 嵌入式工控機是一種專門設(shè)計用于工業(yè)控制系統(tǒng)的計算機設(shè)備。它具有與傳統(tǒng)計算機不同的性能特點,并且在
    的頭像 發(fā)表于 02-04 11:35 ?701次閱讀

    嵌入式學(xué)習(xí)步驟

    開發(fā)板上測試固件以及在實際設(shè)備上進行測試。 嵌入式系統(tǒng)的多樣化發(fā)展,它將更為廣泛地應(yīng)用于各個領(lǐng)域,實現(xiàn)智能化、網(wǎng)絡(luò)化、自動化的目標。同時,隨著人工智能和機器學(xué)習(xí)技術(shù)的發(fā)展,嵌入式系統(tǒng)
    發(fā)表于 02-02 15:24

    啥是嵌入式?嵌入式都有啥?薪資如何?前景如何

    嵌入式系統(tǒng)(Embedded Systems)是一種特殊類型的計算機系統(tǒng),被嵌入到其他設(shè)備或系統(tǒng)中,用于執(zhí)行特定的任務(wù)或控制特定的功能。這些系統(tǒng)通常設(shè)計
    的頭像 發(fā)表于 01-17 16:39 ?944次閱讀
    啥是<b class='flag-5'>嵌入式</b>?<b class='flag-5'>嵌入式</b>都有啥?薪資如何?前景如何