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

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

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

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

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

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

從玩具到工具

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

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

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

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

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

熟悉的語法

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

poYBAGK7raCAImuZAACbjNa9W_g399.png

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

但是腳本很慢

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

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

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

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

JIT 呢?

提高解釋代碼性能的常見解決方案是即時(shí)編譯器 (JIT)。JIT 將腳本代碼編譯為目標(biāo)設(shè)備上的本機(jī)代碼。JIT 的使用在現(xiàn)代 Web 瀏覽器的 JavaScript 引擎中很常見。但是,在嵌入式設(shè)備上使用 JIT 是有問題的,因?yàn)?JIT 本身需要額外的代碼空間,因?yàn)槌嗽寄_本代碼之外,本機(jī)代碼還需要消耗內(nèi)存,并且因?yàn)檫\(yùn)行 JIT 需要 CPU 周期。

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

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

記憶

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

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

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

用戶腳本

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

今天的嵌入式 JavaScript

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

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

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

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

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

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

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

審核編輯:郭婷

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

    關(guān)注

    5045

    文章

    18817

    瀏覽量

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

    關(guān)注

    2894

    文章

    43312

    瀏覽量

    366409
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104096
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

    嵌入式熱門發(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)測(cè)和數(shù)據(jù)處理等方面。例如,在服務(wù)領(lǐng)域,
    發(fā)表于 04-11 14:17

    嵌入式fpga是什么意思

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

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

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

    嵌入式工控機(jī)性能特點(diǎn) 嵌入式工控機(jī)應(yīng)用場(chǎng)景

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

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

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

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

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

    什么是嵌入式板卡?

    嵌入式板卡是配備處理器、各種集成電路、接口和其他關(guān)鍵組件的電路板,所有這些組件都組裝起來以執(zhí)行特定功能。如USB、Ethernet、串口、GPIO等,以便連接外部設(shè)備和傳感器。它們還可能包括擴(kuò)展插槽
    的頭像 發(fā)表于 12-20 16:17 ?651次閱讀
    什么是<b class='flag-5'>嵌入式</b>板卡?

    什么是嵌入式系統(tǒng)?嵌入式系統(tǒng)的具體應(yīng)用

    嵌入式,一般是指嵌入式系統(tǒng)。用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置。
    的頭像 發(fā)表于 12-20 13:33 ?2131次閱讀

    嵌入式javascript編譯器的設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《嵌入式javascript編譯器的設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-30 11:29 ?0次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>javascript</b>編譯器的設(shè)計(jì)與實(shí)現(xiàn)

    有無操作系統(tǒng)的嵌入式Linux驅(qū)動(dòng)設(shè)備有何區(qū)別?

    有無操作系統(tǒng)的嵌入式Linux驅(qū)動(dòng)設(shè)備有何區(qū)別? 嵌入式系統(tǒng)是指集成電子設(shè)備上的計(jì)算機(jī)系統(tǒng),通常用于控制、監(jiān)測(cè)、操作或處理某些物理或機(jī)械過程
    的頭像 發(fā)表于 10-29 17:29 ?602次閱讀

    藍(lán)牙設(shè)備嵌入式領(lǐng)域的廣泛應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《藍(lán)牙設(shè)備嵌入式領(lǐng)域的廣泛應(yīng)用.pdf》資料免費(fèi)下載
    發(fā)表于 10-19 10:50 ?3次下載
    藍(lán)牙<b class='flag-5'>設(shè)備</b>在<b class='flag-5'>嵌入式</b>領(lǐng)域的廣泛應(yīng)用

    什么是嵌入式Linux?

    Linux到底是什么呢? 嵌入式linux 是將日益流行的Linux操作系統(tǒng)進(jìn)行裁剪修改,使之能在嵌入式計(jì)算機(jī)系統(tǒng)上運(yùn)行的一種操作系統(tǒng)。簡(jiǎn)單來說,是除了電腦之外可以運(yùn)行程序的設(shè)備,將CPU嵌入
    發(fā)表于 10-11 13:47