chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

如何在嵌入式設(shè)備拉起JavaScript應(yīng)用?

jf_NsPBt3VS ? 來(lái)源:風(fēng)火輪技術(shù)團(tuán)隊(duì) ? 2023-03-07 10:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

上一篇我們描述了為什么我們要使用膠水語(yǔ)言(JavaScript,PikaScript)來(lái)改變我們的嵌入式開(kāi)發(fā)模式。并描述了如何在嵌入式設(shè)備拉起JavaScript應(yīng)用及JavaScript應(yīng)用在嵌入式設(shè)備的存在形式(字符串,文件)。

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

膠水語(yǔ)言可以讓我們職責(zé)更加明確,可以類(lèi)前后端開(kāi)發(fā)模式,后端負(fù)責(zé)--硬件的適配,方法的導(dǎo)出;前端負(fù)責(zé)--業(yè)務(wù)邏輯的的開(kāi)發(fā)。

本篇文章作者來(lái)介紹JS在嵌入式設(shè)備上的如何使用,我們通過(guò)一下幾點(diǎn)說(shuō)明:

C端如何導(dǎo)出方法提供給到JS端;

C端如何導(dǎo)出參數(shù)提供給JS端;

通過(guò)C端導(dǎo)出方法,JS端控制LED燈;

在使用JerryScript引擎實(shí)現(xiàn)C端與JavaScript端交互時(shí),許喲啊弄清楚幾個(gè)概念:

類(lèi)型 說(shuō)明
object 對(duì)象,JerryScript是基于對(duì)象編程的,所以我們導(dǎo)出的方法都是對(duì)象的基礎(chǔ)上的
property 特性,如導(dǎo)出的參數(shù),函數(shù)等,都屬于特性,歸屬于某個(gè)對(duì)象的特性
value 值,在JerryScript中,所有的對(duì)象,特性,參數(shù),方法,都會(huì)轉(zhuǎn)為一個(gè)32位的數(shù)值,然后我們通過(guò)這個(gè)數(shù)值便可以訪(fǎng)問(wèn)對(duì)應(yīng)內(nèi)容

C端如何導(dǎo)出方法提供給到JS端

在JavaScript的引擎(JerryScript)中,提供了很多方法供我們實(shí)現(xiàn)C端與JS端的交互,C端導(dǎo)出模塊也是依賴(lài)這些方法的。

那么如何從C端導(dǎo)出方法呢???為了更好的演示,我們通過(guò)從C端導(dǎo)出一個(gè)日志打印方法提供給到JS應(yīng)用使用,并在JS應(yīng)用中驗(yàn)證。

導(dǎo)出的方法我們需要遵從模板,其中我們要關(guān)注的參數(shù):

this_val:自身對(duì)象值。

args_p[]:JS調(diào)用導(dǎo)出方法接口時(shí)的參數(shù)列表。

args_count:JS調(diào)用導(dǎo)出方法接口時(shí)的參數(shù)個(gè)數(shù)。

typedefjerry_value_t(*jerry_external_handler_t)(constjerry_value_tfunction_obj,
constjerry_value_tthis_val,
constjerry_value_targs_p[],
constjerry_length_targs_count);

日志打印方法編寫(xiě)(log_handle):

日志打印接口只需要一個(gè)輸入?yún)?shù),并且這個(gè)參數(shù)類(lèi)型位字符串(string),所以我們只需要處理一個(gè)入?yún)ⅲ?/p>

前面我們已經(jīng)描述了:在JerryScript中,所有的對(duì)象,特性,參數(shù),方法,都會(huì)轉(zhuǎn)為一個(gè)32位的數(shù)值,所以我們需要將參數(shù)值解析出來(lái);

通過(guò)jerry_value_to_string方法將args[0]轉(zhuǎn)為字符串?dāng)?shù)值(str_value);

通過(guò)jerry_string_to_utf8_char_buffer方法從字符串?dāng)?shù)值(str_value)獲取字符串內(nèi)容;

提取完數(shù)據(jù)之后,需要調(diào)用jerry_release_value方法,將字符串?dāng)?shù)值(str_value)資源釋放;

將提取的內(nèi)容打印出來(lái);

staticjerry_value_tlog_handler(constjerry_value_tfunction_obj,
constjerry_value_tthis_val,
constjerry_value_targs[],
constjerry_length_targCount)
{
jerry_size_tlog_len=0;
jerry_value_tstr_value=jerry_value_to_string(args[0]);
log_len=jerry_string_to_utf8_char_buffer(str_value,log_buff,(LOG_BUFF_LEN-1));
log_buff[log_len]='?';
jerry_release_value(str_value);

rt_kprintf("%s
",(constchar*)log_buff);
returnjerry_create_undefined();
}

導(dǎo)出log_handle方法;

通過(guò)jerry_get_global_object方法獲取全局對(duì)象;

通過(guò)jerry_create_external_function創(chuàng)建外部函數(shù)(log_handle)對(duì)象;

我們提供給js應(yīng)用調(diào)用的方法,需要導(dǎo)出一個(gè)方法名(log),通過(guò)jerry_create_string_from_utf8方法創(chuàng)建一個(gè)字符串("log")對(duì)象;

通過(guò)jerry_set_property方法,導(dǎo)出一個(gè)名為log的方法;

導(dǎo)出完所有l(wèi)og方法之后,需要將其使用的對(duì)象值全部釋放;

staticvoidjs_func_init(void)
{
jerry_value_tglobal_object=jerry_get_global_object();

jerry_value_tfunc=jerry_create_external_function(log_handler);
jerry_value_tproperty_name_val=jerry_create_string_from_utf8((constjerry_char_t*)"log");
jerry_value_tresult_val=jerry_set_property(global_object,property_name_val,func);
jerry_release_value(property_name_val);
jerry_release_value(result_val);
jerry_release_value(func);
}

JS應(yīng)用,rice.js內(nèi)容如下:

varhello=123;

log("youyeetoo:"+hello);

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

7458f846-bc66-11ed-bfe3-dac502259ad0.png

C端如何導(dǎo)出參數(shù)提供給JS端

C語(yǔ)言開(kāi)發(fā)中,我們往往會(huì)把一些固定不變的值采用宏去定義一些數(shù)值或者字符串,如:

#defineE_VALUE123
#defineE_STRING"youyeetoo"

對(duì)于JS應(yīng)用來(lái)說(shuō),實(shí)際也是需要一些固定不變的數(shù)值,所以我們可以通過(guò)C端導(dǎo)出一些固定數(shù)值到JS端,供JS應(yīng)用使用。

對(duì)于JerryScript來(lái)說(shuō),不管是數(shù)值還是字符串都是導(dǎo)出對(duì)應(yīng)特性,實(shí)例分別是導(dǎo)出:數(shù)值E_VALUE特性和字符串E_STRING:

通過(guò)jerry_get_global_object方法獲取全局對(duì)象;

通過(guò)jerry_create_number創(chuàng)建數(shù)值特性對(duì)象,通過(guò)jerry_create_string創(chuàng)建字符串特性對(duì)象;

我們提供給js應(yīng)用調(diào)用的方法,需要導(dǎo)出一個(gè)特性名字,通過(guò)jerry_create_string_from_utf8方法創(chuàng)建字符串對(duì)象(如:E_VALUE和E_STRING);

通過(guò)jerry_set_property方法,導(dǎo)出特性變量。

導(dǎo)出完特性變量之后,需要將其使用的對(duì)象值全部釋放。

staticvoidjs_num_param_init(void)
{
jerry_value_tglobal_object=jerry_get_global_object();

jerry_value_tnum_val=jerry_create_number(123);
jerry_value_tproperty_name_val=jerry_create_string_from_utf8((constjerry_char_t*)"E_VALUE");
jerry_value_tresult_val=jerry_set_property(global_object,property_name_val,num_val);
jerry_release_value(property_name_val);
jerry_release_value(result_val);
jerry_release_value(num_val);
}

staticvoidjs_str_param_init(void)
{
jerry_value_tglobal_object=jerry_get_global_object();

jerry_value_tstr_val=jerry_create_string("good");
jerry_value_tproperty_name_val=jerry_create_string_from_utf8((constjerry_char_t*)"E_STRING");
jerry_value_tresult_val=jerry_set_property(global_object,property_name_val,str_val);
jerry_release_value(property_name_val);
jerry_release_value(result_val);
jerry_release_value(str_val);
}

JS應(yīng)用,rice.js內(nèi)容如下:

log("youyeetoo:"+E_VALUE);
log("youyeetoo:"+E_STRING);

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

7496a6dc-bc66-11ed-bfe3-dac502259ad0.png

通過(guò)C端導(dǎo)出LED方法,JS端控制LED燈

我是用的板子有4個(gè)LED,分別接在PE3,PD7,PG3,PA5個(gè)引腳,我們需要對(duì)齊編號(hào),如下:

#defineLED1_PINGET_PIN(E,3)
#defineLED2_PINGET_PIN(D,7)
#defineLED3_PINGET_PIN(G,3)
#defineLED4_PINGET_PIN(A,5)

staticuint16_tled_list[]={LED1_PIN,LED2_PIN,LED3_PIN,LED4_PIN};

led方法需要兩個(gè)參數(shù),第一個(gè)參數(shù)代表LED編號(hào),第二個(gè)參數(shù)代表引腳電平,我們的導(dǎo)出接口名為:led,接口定義如下:

staticjerry_value_tled_handler(constjerry_value_tfunction_obj,
constjerry_value_tthis_val,
constjerry_value_targs[],
constjerry_length_targCount)
{
jerry_value_tled=jerry_get_number_value(args[0]);
jerry_value_tlevel=jerry_get_number_value(args[1]);

rt_pin_write(led_list[led],level);

returnjerry_create_undefined();
}

staticvoidjs_led_func_init(void)
{
jerry_value_tglobal_object=jerry_get_global_object();

jerry_value_tfunc=jerry_create_external_function(led_handler);
jerry_value_tproperty_name_val=jerry_create_string_from_utf8((constjerry_char_t*)"led");
jerry_value_tresult_val=jerry_set_property(global_object,property_name_val,func);
jerry_release_value(property_name_val);
jerry_release_value(result_val);
jerry_release_value(func);
}

JS應(yīng)用,將板子的四個(gè)LED點(diǎn)亮,rice.js內(nèi)容如下:

log("youyeetoo:"+E_VALUE);
log("youyeetoo:"+E_STRING);
led(0,1);
led(1,1);
led(2,1);
led(3,1);

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

74c9019a-bc66-11ed-bfe3-dac502259ad0.png

總結(jié)

C端導(dǎo)出方法之后,在JS端實(shí)際編寫(xiě)程序是非常方便的,調(diào)用方式跟C語(yǔ)言編程一樣。

可以通過(guò)C導(dǎo)出固定參數(shù),使JS端調(diào)用起來(lái)像C端調(diào)用宏定義一樣。

我們可以通過(guò)C端導(dǎo)出硬件控制接口,使得JS應(yīng)用程序可以調(diào)用應(yīng)用接口。

當(dāng)C端的基礎(chǔ)能力編寫(xiě)完畢之后,JS應(yīng)用程序?qū)嶋H跟C語(yǔ)言是基本一致的,而且JavaScript提供了很多方法,對(duì)于我們編寫(xiě)業(yè)務(wù)邏輯更加友好。







審核編輯:劉清

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

    關(guān)注

    5152

    文章

    19671

    瀏覽量

    317532
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1596

    瀏覽量

    109735
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141728
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    525

    瀏覽量

    54814

原文標(biāo)題:嵌入式新開(kāi)發(fā)模式(JavaScript)--C端與JS端方法調(diào)用

文章出處:【微信號(hào):風(fēng)火輪技術(shù)團(tuán)隊(duì),微信公眾號(hào):風(fēng)火輪技術(shù)團(tuán)隊(duì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    何在嵌入式系統(tǒng)設(shè)計(jì)中使用UML技術(shù)

    嵌入式系統(tǒng)設(shè)計(jì)是一個(gè)軟、硬件結(jié)合的協(xié)同設(shè)計(jì)(Hardware/Software Co-design),需要不同技術(shù)背景的人共同開(kāi)發(fā)。 本文將重點(diǎn)討論如何在嵌入式系統(tǒng)設(shè)計(jì)中使用 UML 技術(shù),并用車(chē)載 GPS 終端項(xiàng)目作為實(shí)例來(lái)具
    發(fā)表于 04-14 08:02 ?4163次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>嵌入式</b>系統(tǒng)設(shè)計(jì)中使用UML技術(shù)

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

    ? 概述 上一篇我們描述了為什么我們要使用膠水語(yǔ)言(JavaScript,PikaScript)來(lái)改變我們的嵌入式開(kāi)發(fā)模式。并描述了如何在嵌入式設(shè)備
    的頭像 發(fā)表于 04-06 15:39 ?1251次閱讀

    嵌入式Linux下USB藍(lán)牙設(shè)備驅(qū)動(dòng)

    技術(shù)的不斷發(fā)展,藍(lán)牙產(chǎn)品逐漸走入人們的生活。目前藍(lán)牙在PC端支持良好,應(yīng)用比較廣泛。但在嵌入式系統(tǒng)中,由于藍(lán)牙接口的兼容性問(wèn)題,使其在嵌入式領(lǐng)域的應(yīng)用大打折扣。因此,如何在嵌入式系統(tǒng)中
    發(fā)表于 04-24 09:30

    WIFI網(wǎng)卡如何在嵌入式Linux中

    僅用于增加百度收錄權(quán)重,排版未優(yōu)化,日常不維護(hù)。請(qǐng)?jiān)L問(wèn): 查看、評(píng)論。本博文對(duì)應(yīng)地址: 嵌入式Linux——WIFI網(wǎng)卡/#more如何在嵌入式Linux中,使用WIFI無(wú)線(xiàn)網(wǎng)卡。嵌入式
    發(fā)表于 11-04 08:26

    嵌入式Linux設(shè)備何在運(yùn)作

    點(diǎn)此進(jìn)入原文鏈接,有視頻課程哦第一部分 嵌入式Linux簡(jiǎn)介:首先,不知道大家知不知道嵌入式linux設(shè)備運(yùn)行的話(huà)一般需要哪幾個(gè)組成模塊?一、嵌入式Linux
    發(fā)表于 11-05 09:26

    嵌入式設(shè)備中使用JavaScript

    只聽(tīng)說(shuō)過(guò)匯編,c做嵌入式,從不曾想JAVAScript也牛到涉入硬件領(lǐng)域了,原本對(duì)他的思維定格就是一個(gè)瀏覽器腳本??磥?lái)真應(yīng)了那句話(huà)‘只有想不到,沒(méi)有做不到’話(huà)不多說(shuō)看看這些大佬的帖子在嵌入式設(shè)
    發(fā)表于 11-08 06:14

    javascript嵌入式

    javascript嵌入式If expressions are single units of JavaScript that the engine can evaluate, statements
    發(fā)表于 12-15 07:36

    Caché嵌入式代碼分享

    文章目錄第十章 Caché 嵌入式代碼嵌入式HTML`&html`標(biāo)記語(yǔ)法嵌入式JavaScript嵌入式SQL第十章 Caché
    發(fā)表于 12-17 07:19

    何在嵌入式設(shè)備上運(yùn)行高性能Java

    何在嵌入式設(shè)備上運(yùn)行高性能Java
    發(fā)表于 03-28 09:43 ?16次下載

    嵌入式DHCP Server如何在vxWorks中

    嵌入式DHCP Server如何在vxWorks中的軟件實(shí)現(xiàn)
    發(fā)表于 03-29 12:27 ?23次下載

    何在嵌入式Linux中使用GPIO

    了解如何在嵌入式Linux中使用GPIO,特別強(qiáng)調(diào)Zynq-7000系列。 我們介紹了基本的用戶(hù)和內(nèi)核空間GPIO使用情況,以及GPIO,GPIO密鑰和GPIO LED上的bit-banged I / O.
    的頭像 發(fā)表于 11-26 07:02 ?4330次閱讀

    Facebook神經(jīng)網(wǎng)絡(luò)新研究將造福嵌入式設(shè)備

    人工智能風(fēng)暴襲來(lái),機(jī)器人、自動(dòng)駕駛汽車(chē)這樣的嵌入式設(shè)備也熱度漸長(zhǎng)。毫無(wú)疑問(wèn),現(xiàn)在,嵌入式設(shè)備也需要高效的神經(jīng)網(wǎng)絡(luò)加持。但是,如何在
    發(fā)表于 08-07 11:27 ?848次閱讀
    Facebook神經(jīng)網(wǎng)絡(luò)新研究將造福<b class='flag-5'>嵌入式</b><b class='flag-5'>設(shè)備</b>

    未來(lái)之JavaScript嵌入式

    只聽(tīng)說(shuō)過(guò)匯編,c做嵌入式,從不曾想JAVAScript也牛到涉入硬件領(lǐng)域了,原本對(duì)他的思維定格就是一個(gè)瀏覽器腳本??磥?lái)真應(yīng)了那句話(huà)‘只有想不到,沒(méi)有做不到’話(huà)不多說(shuō)看看這些大佬的帖子在嵌入式設(shè)
    發(fā)表于 11-03 13:51 ?4次下載
    未來(lái)之<b class='flag-5'>JavaScript</b>做<b class='flag-5'>嵌入式</b>

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

      這些開(kāi)發(fā)系統(tǒng)中的每一個(gè)都是在嵌入式設(shè)備上開(kāi)始 JavaScript 開(kāi)發(fā)的好工具。盡管 JavaScript 在近 20 年前首次引入,但它才剛剛開(kāi)始用于
    的頭像 發(fā)表于 06-29 09:39 ?3948次閱讀
    用于<b class='flag-5'>嵌入式</b><b class='flag-5'>設(shè)備</b>的<b class='flag-5'>JavaScript</b>

    嵌入式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)