91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

打破單片機(jī)開發(fā)模式--膠水語(yǔ)言(JavaScript)

Rice嵌入式開發(fā)技術(shù)分享 ? 來(lái)源:Rice嵌入式開發(fā)技術(shù)分享 ? 作者:Rice嵌入式開發(fā)技術(shù) ? 2023-03-07 17:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

傳統(tǒng)的嵌入式單片機(jī)開發(fā)基本上形式如下圖:

984ed7a2-b833-11ed-a826-dac502259ad0.png

該流程對(duì)于功能單一或者功能變更極少的場(chǎng)景是比較友好的,但是對(duì)于設(shè)備應(yīng)用層變更比較多或者公板方案開發(fā)應(yīng)用的場(chǎng)景,上述場(chǎng)景顯的有些累贅。那么有什么方式可以解決呢??

對(duì)于設(shè)備應(yīng)用層變更比較多或者公板方案開發(fā)應(yīng)用的場(chǎng)景,可能因?yàn)閼?yīng)用層稍微修改一下就要出固件版本驗(yàn)證,這對(duì)于版本管理,時(shí)間周期,固件質(zhì)量都是比較不友好的。那么我們?nèi)绾伪苊膺@些問題??

那么有什么方式呢??答案是有的,如:使用動(dòng)態(tài)模塊或者膠水語(yǔ)言(JerryScript,PikaScript)

動(dòng)態(tài)模塊:它更多的是一個(gè) ELF 格式加載器,把單獨(dú)編譯的一個(gè) elf 文件的代碼段,數(shù)據(jù)段加載到內(nèi)存中,并對(duì)其中的符號(hào)進(jìn)行解析,綁定到導(dǎo)出的 API 地址上。因?yàn)橐勃?dú)立于固件編譯,支持動(dòng)態(tài)加載。不過(guò)需要編譯一份支持動(dòng)態(tài)模塊執(zhí)行的固件。

膠水語(yǔ)言(JerryScript,PikaScript):其實(shí)就是腳本語(yǔ)言,應(yīng)用將以腳本語(yǔ)言的形式存在,通過(guò)動(dòng)態(tài)加載腳本語(yǔ)言執(zhí)行。不過(guò)固件需要對(duì)應(yīng)膠水語(yǔ)言的執(zhí)行引擎。

上述兩種方式都是可以使固件跟應(yīng)用分離,是的應(yīng)用的變更不會(huì)引起固件的變更,這對(duì)于固件的穩(wěn)定性來(lái)說(shuō)更加有保障。只需要測(cè)試單獨(dú)的應(yīng)用程序。

9877c7ca-b833-11ed-a826-dac502259ad0.png

動(dòng)態(tài)模塊相對(duì)于膠水語(yǔ)言來(lái)說(shuō),明顯優(yōu)勢(shì)不高,對(duì)比:

動(dòng)態(tài)模塊 膠水語(yǔ)言
API問題 運(yùn)行固件需要特殊處理,需要將API導(dǎo)出 通過(guò)對(duì)應(yīng)的引擎編寫API導(dǎo)出模塊
應(yīng)用形式 應(yīng)用程序需要通過(guò)固件編譯出對(duì)應(yīng)的ELF文件 膠水語(yǔ)言無(wú)需編譯,直接可通過(guò)對(duì)應(yīng)引擎加載運(yùn)行

很明顯,作者傾向于膠水來(lái)改變開發(fā)模式,那么使用哪種膠水語(yǔ)言呢??目前輕量級(jí)的膠水語(yǔ)言,有JerryScript,PikaScript。我們?cè)撊绾芜x擇??

JerryScript PikaScript
資源占用 RAM <= 64KB, Flash <= 200KB RAM <= 4KB, Flash <= 32KB
語(yǔ)言 JavaScript Python
地域 海外 中國(guó)
維護(hù)情況 停止維護(hù) 持續(xù)維護(hù)
開發(fā)對(duì)象 懂得前端的人員也可以接手嵌入式應(yīng)用開發(fā) 需要熟悉python語(yǔ)言
開發(fā)難度 一般 一般
使用情況 UI廠商都是用,柿餅,ACE 相對(duì)較少

兩種膠水語(yǔ)言各有各的優(yōu)勢(shì),我的選擇是根據(jù)使用場(chǎng)景,開發(fā)人員的角度,所以選擇JerryScript來(lái)解決我開發(fā)的困擾及問題。

JerryScript

物聯(lián)網(wǎng)設(shè)備在CPU性能和內(nèi)存空間方面皆存在嚴(yán)格受限,在使用V8引擎這類大型引擎時(shí)難免存在諸多不便。在此背景下,JerryScript引擎誕生了。JerryScript是由三星開發(fā)的一款炙手可熱的輕量級(jí)引擎,其目的是讓JavaScript開發(fā)者能夠更好地構(gòu)建物聯(lián)網(wǎng)應(yīng)用,JerryScript是一個(gè)輕量級(jí)的JavaScript引擎,用于資源受限的設(shè)備,如微控制器。它可以在RAM小于64KB、閃存小于200KB的設(shè)備上運(yùn)行。

JerryScript的主要特征有:

完全符合ECMAScript 5.1標(biāo)準(zhǔn);

ARM Thumb-2編譯時(shí),二進(jìn)制大小為160K;

針對(duì)低內(nèi)存消耗進(jìn)行了高度優(yōu)化;

以C99編寫,以實(shí)現(xiàn)最大的便攜性;

快照支持將JavaScript源代碼預(yù)編譯為字節(jié)代碼;

成熟的C API,易于嵌入應(yīng)用程序。

JerryScript文檔說(shuō)明:

英文 中文 鏈接
Getting Started 入門 https://github.com/jerryscript-project/jerryscript/blob/master/docs/00.GETTING-STARTED.md
Configuration 配置 https://github.com/jerryscript-project/jerryscript/blob/master/docs/01.CONFIGURATION.md
API Reference API參考 https://github.com/jerryscript-project/jerryscript/blob/master/docs/02.API-REFERENCE.md
API Example API示例 https://github.com/jerryscript-project/jerryscript/blob/master/docs/03.API-EXAMPLE.md
Internals 內(nèi)部構(gòu)件 https://github.com/jerryscript-project/jerryscript/blob/master/docs/04.INTERNALS.md
Migration Guide 遷移指南 https://github.com/jerryscript-project/jerryscript/blob/master/docs/16.MIGRATION-GUIDE.md

JerryScript使用

目前很多UI廠商都在基于JerryScript作為引擎搭建UI框架,比如像RT-THREADOpenHarmony等廠商。而且JerryScript被默認(rèn)作為第三方組件的形式存在。所以我將以RT-THREAD作為我的開發(fā)環(huán)境描述JavaScript如何在單片機(jī)中運(yùn)行。

以字符串形式加載JS語(yǔ)法

RT-THREAD中已經(jīng)擁有JerryScript軟件包,所以我們需要下載對(duì)應(yīng)軟件包即可:

98870546-b833-11ed-a826-dac502259ad0.png

RT-THREAAD的JerryScript已經(jīng)適配好了,如console打印等,所以我們也不用關(guān)心,直接使用。需要包含兩個(gè)頭文件:#include 和#include

JerryScript引擎啟動(dòng)流程(初始化):

intmain(void)
{
/*JERRY_ENABLE_EXTERNAL_CONTEXT*/
jerry_port_set_default_context(jerry_create_context(PKG_JMEM_HEAP_SIZE*1024,context_alloc,NULL));

/*Initializeengine*/
jerry_init(JERRY_INIT_EMPTY);

js_util_init();
returnRT_EOK;
}

因?yàn)槲覀冞€沒搭建文件系統(tǒng)所以不能存放XXX.js文件,我們先通過(guò)字符串的形式模擬文件內(nèi)容。

char*script_test=
"varrice="RiceJerryScript"rn"
"console.log("hello!!",rice);rn"
"console.log("helloJerryScriptrunok!!");rn";

voidjs_parse_test(void)
{
jerry_value_tparsed_code=jerry_parse(NULL,0,(jerry_char_t*)script_test,
rt_strlen(script_test),JERRY_PARSE_NO_OPTS);
if(jerry_value_is_error(parsed_code))
{
rt_kprintf("jerryparsefailed!n");
}
else
{
jerry_value_tret2=jerry_run(parsed_code);
rt_kprintf("%s:jerry_runret=%dn",__func__,ret2);
}
}
MSH_CMD_EXPORT(js_parse_test,js_parse_test);

編譯運(yùn)行結(jié)果:

98a7841a-b833-11ed-a826-dac502259ad0.png

以文件的形式加載JS語(yǔ)法

需要增加文件系統(tǒng)及Ymodem,其中文件系統(tǒng)用來(lái)存放js文件,Ymodem用于把文件傳輸。

增加文件系統(tǒng)組件:

99240fc6-b833-11ed-a826-dac502259ad0.png

增加Ymodem組件:

9965856e-b833-11ed-a826-dac502259ad0.png

文件系統(tǒng)掛載,我使用的板子有spi flash,所以文件系統(tǒng)直接掛載到此flash中:

intmnt_init(void)
{
if(dfs_mount("W25Q256","/","elm",0,0)==0)
{
LOG_I("W25Q256mountsuccessful!");
}
else
{
LOG_E("W25Q256mountfailed!");
dfs_mkfs("elm","W25Q256");
if(dfs_mount("W25Q256","/","elm",0,0)==0)
{
LOG_I("W25Q256mountsuccessful!");
}
}
return0;
}
INIT_ENV_EXPORT(mnt_init);

編寫JS應(yīng)用文件--rice.js

rice.js文件內(nèi)容:

varrice="RiceJerryScript";

console.log("hello!!",rice);
console.log("helloJerryScriptrunok!!");

通過(guò)Ymodem傳輸?shù)桨遄又?,我使用的串口工?-XShell,它自帶Ymodem組件,所以可以直接傳輸,流程:

在串口中斷輸入ry,使單片機(jī)進(jìn)入Ymodem接收模式:

99834928-b833-11ed-a826-dac502259ad0.png

然后選擇Ymodem發(fā)送文件:

99b35b5e-b833-11ed-a826-dac502259ad0.png99d5b424-b833-11ed-a826-dac502259ad0.png

編寫使用文件運(yùn)行JS應(yīng)用的代碼:

voidjs_parse_test(void)
{
intfd=-1,fileSize=0;
char*fileContent=NULL;

fd=open("/rice.js",O_RDONLY,0777);
if(fd

編譯運(yùn)行結(jié)果:

99f0fe28-b833-11ed-a826-dac502259ad0.png

總結(jié)

采用膠水語(yǔ)言,可以減少對(duì)固件的修改,應(yīng)用的變更不會(huì)導(dǎo)致固件的變更,而且修改方便快捷。

通過(guò)JavaScript,嵌入式研發(fā)人員,也慢慢變成類前后端開發(fā)模式,這樣職責(zé)更加清晰。

JavaScript的運(yùn)行如上,下一篇將講解C接口方法如何提供給JavaScript應(yī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)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44992

    瀏覽量

    650464
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1620

    瀏覽量

    64040
  • 嵌入式開發(fā)
    +關(guān)注

    關(guān)注

    18

    文章

    1077

    瀏覽量

    48874
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    525

    瀏覽量

    54817
  • RICE
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1837
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式新開發(fā)模式(JavaScript)--C端與JS端方法調(diào)用

    應(yīng)用在嵌入式設(shè)備的存在形式(字符串,文件)。 打破單片機(jī)開發(fā)模式--膠水語(yǔ)言(
    的頭像 發(fā)表于 04-06 15:39 ?1253次閱讀

    單片機(jī)的編程語(yǔ)言開發(fā)環(huán)境

    在《嵌入式編程之單片機(jī)的基本構(gòu)成、工作原理》和《嵌入式編程之單片機(jī)的外圍功能電路》我們介紹了單片機(jī)硬件方面的知識(shí)。本文將介紹單片機(jī)開發(fā)環(huán)境
    發(fā)表于 08-11 10:47 ?5718次閱讀

    8051單片機(jī)C語(yǔ)言開發(fā)環(huán)境實(shí)務(wù)與設(shè)計(jì)

    8051單片機(jī)C語(yǔ)言開發(fā)環(huán)境實(shí)務(wù)與設(shè)計(jì)從基礎(chǔ)出發(fā),循序漸進(jìn)地介紹8051單片機(jī)的C語(yǔ)言程序開發(fā)環(huán)
    發(fā)表于 10-08 21:28 ?0次下載
    8051<b class='flag-5'>單片機(jī)</b>C<b class='flag-5'>語(yǔ)言</b><b class='flag-5'>開發(fā)</b>環(huán)境實(shí)務(wù)與設(shè)計(jì)

    單片機(jī)c語(yǔ)言輕松入門

    單片機(jī)c語(yǔ)言輕松入門:隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)展,目前已有越來(lái)越多的人從普遍使用匯編語(yǔ)言到逐漸使用高級(jí)
    發(fā)表于 10-09 10:19 ?200次下載

    單片機(jī)的C語(yǔ)言輕松入門

    隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)展,目前已有越來(lái)越多的人從普遍使用匯編語(yǔ)言到逐漸使用高級(jí)語(yǔ)言開發(fā),其中主要是以C
    發(fā)表于 12-17 21:23 ?489次下載

    C語(yǔ)言單片機(jī)開發(fā)中的應(yīng)用

    C語(yǔ)言單片機(jī)開發(fā)中的應(yīng)用 在單片機(jī)開發(fā)應(yīng)用中,已逐漸開始引入高級(jí)語(yǔ)言,C
    發(fā)表于 04-07 13:59 ?1207次閱讀

    單片機(jī)開發(fā)技巧

    一、 如何提高C語(yǔ)言編程代碼的效率鄧宏杰指出,用C語(yǔ)言進(jìn)行單片機(jī)程序設(shè)計(jì)是單片機(jī)開發(fā)與應(yīng)用的必然趨勢(shì)。他強(qiáng)調(diào):“如果使用C編程時(shí),要達(dá)到最高
    發(fā)表于 06-29 18:24 ?903次閱讀

    單片機(jī)C語(yǔ)言編程與實(shí)例

    單片機(jī)C語(yǔ)言編程與實(shí)例 學(xué)習(xí)單片機(jī)開發(fā)非常不錯(cuò)的資料。
    發(fā)表于 01-11 14:50 ?44次下載

    單片機(jī)的C語(yǔ)言輕松入門資料

    隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)展,目前已有越來(lái)越多的人從普遍使用匯編語(yǔ)言到逐漸使 用高級(jí)語(yǔ)言開發(fā),其中主要是以C
    發(fā)表于 04-25 16:48 ?58次下載

    8051單片機(jī)C語(yǔ)言軟件設(shè)計(jì)8051單片機(jī)C語(yǔ)言軟件設(shè)計(jì)

    8051單片機(jī)C語(yǔ)言軟件設(shè)計(jì)8051單片機(jī)C語(yǔ)言軟件設(shè)計(jì)
    發(fā)表于 10-16 11:25 ?92次下載
    8051<b class='flag-5'>單片機(jī)</b>C<b class='flag-5'>語(yǔ)言</b>軟件設(shè)計(jì)8051<b class='flag-5'>單片機(jī)</b>C<b class='flag-5'>語(yǔ)言</b>軟件設(shè)計(jì)

    單片機(jī)程序開發(fā)語(yǔ)言怎么選擇

    單片機(jī)程序的開發(fā)可以使用的兩種語(yǔ)言,分別是C語(yǔ)言和匯編語(yǔ)言。這里要指出的一件事是,這不是嵌入式單片機(jī)
    的頭像 發(fā)表于 06-29 11:22 ?3836次閱讀

    JavaScript JavaScript是什么語(yǔ)言

    JavaScript是屬于開發(fā)Web頁(yè)面的腳本編程語(yǔ)言,是一種具有函數(shù)優(yōu)先的輕量級(jí)編程語(yǔ)言。JavaScript基于原型編程、多范式的動(dòng)態(tài)腳
    的頭像 發(fā)表于 07-27 15:41 ?6902次閱讀

    51單片機(jī)-PASCAL語(yǔ)言開發(fā)環(huán)境搭建

    51單片機(jī)-PASCAL語(yǔ)言開發(fā)環(huán)境搭建
    發(fā)表于 11-23 16:36 ?12次下載
    51<b class='flag-5'>單片機(jī)</b>-PASCAL<b class='flag-5'>語(yǔ)言</b><b class='flag-5'>開發(fā)</b>環(huán)境搭建

    單片機(jī)的c語(yǔ)言入門指南

    隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)展,目前已有越來(lái)越多的人從普遍使用匯編語(yǔ)言到逐漸使 用高級(jí)語(yǔ)言開發(fā),其中主要是以 C
    發(fā)表于 07-07 14:34 ?11次下載

    你用過(guò)哪些編程語(yǔ)言開發(fā)單片機(jī)?

    C語(yǔ)言是最常用的一種用于單片機(jī)開發(fā)語(yǔ)言,也是一種高級(jí)編程語(yǔ)言,具有較好的可移植性和可讀性。對(duì)于單片機(jī)
    發(fā)表于 12-04 10:18 ?2178次閱讀
    主站蜘蛛池模板: 免费看一级毛片 | 22sihu国产精品视频影视资讯 | 国产三级视频在线播放 | 久久久久国产精品免费看 | 在线观看视频在线观看 | 亚洲人成综合网站在线 | 日韩黄a级成人毛片 | 色优久久| 色色色色网站 | 男男污肉高h坐便器调教 | 四虎国产精品永久在线播放 | 亚洲产国偷v产偷v自拍色戒 | 色多多18免费观看 | 国内精品久久久久影院薰衣草 | 午夜社区 | 黄黄的网站 | www色午夜 | 免费在线成人 | 亚洲 另类色区 欧美日韩 | 欧美成人自拍视频 | 窝窝午夜在线观看免费观看 | 在线种子资源网 | 三级视频网站在线观看 | 性配久久久 | 美女扒开内裤无遮挡禁18 | 色综合免费视频 | 人人爱爱人人 | 人人草人人澡 | 日本免费的一级绿象 | 日韩精品你懂的在线播放 | 性感美女逼 | 亚洲精品视频在线看 | 天天拍夜夜添久久精品免费 | 奇米影视一区二区三区 | 黄色成人免费网站 | 日韩成人一级 | 亚洲高清中文字幕一区二区三区 | 日本黄色网址免费 | 美女被免费视频网站九色 | 91在线激情在线观看 | 日韩美aaa特级毛片 日韩美a一级毛片 |