在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

如何在嵌入式設備拉起JavaScript應用?

jf_NsPBt3VS ? 來源:風火輪技術團隊 ? 2023-03-07 10:44 ? 次閱讀

概述

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

打破單片機開發模式--膠水語言(JavaScript)

膠水語言可以讓我們職責更加明確,可以類前后端開發模式,后端負責--硬件的適配,方法的導出;前端負責--業務邏輯的的開發。

本篇文章作者來介紹JS在嵌入式設備上的如何使用,我們通過一下幾點說明:

C端如何導出方法提供給到JS端;

C端如何導出參數提供給JS端;

通過C端導出方法,JS端控制LED燈;

在使用JerryScript引擎實現C端與JavaScript端交互時,許喲啊弄清楚幾個概念:

類型 說明
object 對象,JerryScript是基于對象編程的,所以我們導出的方法都是對象的基礎上的
property 特性,如導出的參數,函數等,都屬于特性,歸屬于某個對象的特性
value 值,在JerryScript中,所有的對象,特性,參數,方法,都會轉為一個32位的數值,然后我們通過這個數值便可以訪問對應內容

C端如何導出方法提供給到JS端

在JavaScript的引擎(JerryScript)中,提供了很多方法供我們實現C端與JS端的交互,C端導出模塊也是依賴這些方法的。

那么如何從C端導出方法呢???為了更好的演示,我們通過從C端導出一個日志打印方法提供給到JS應用使用,并在JS應用中驗證。

導出的方法我們需要遵從模板,其中我們要關注的參數:

this_val:自身對象值。

args_p[]:JS調用導出方法接口時的參數列表。

args_count:JS調用導出方法接口時的參數個數。

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

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

日志打印接口只需要一個輸入參數,并且這個參數類型位字符串(string),所以我們只需要處理一個入參;

前面我們已經描述了:在JerryScript中,所有的對象,特性,參數,方法,都會轉為一個32位的數值,所以我們需要將參數值解析出來;

通過jerry_value_to_string方法將args[0]轉為字符串數值(str_value);

通過jerry_string_to_utf8_char_buffer方法從字符串數值(str_value)獲取字符串內容;

提取完數據之后,需要調用jerry_release_value方法,將字符串數值(str_value)資源釋放;

將提取的內容打印出來;

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();
}

導出log_handle方法;

通過jerry_get_global_object方法獲取全局對象;

通過jerry_create_external_function創建外部函數(log_handle)對象;

我們提供給js應用調用的方法,需要導出一個方法名(log),通過jerry_create_string_from_utf8方法創建一個字符串("log")對象;

通過jerry_set_property方法,導出一個名為log的方法;

導出完所有log方法之后,需要將其使用的對象值全部釋放;

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應用,rice.js內容如下:

varhello=123;

log("youyeetoo:"+hello);

運行結果:

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

C端如何導出參數提供給JS端

C語言開發中,我們往往會把一些固定不變的值采用宏去定義一些數值或者字符串,如:

#defineE_VALUE123
#defineE_STRING"youyeetoo"

對于JS應用來說,實際也是需要一些固定不變的數值,所以我們可以通過C端導出一些固定數值到JS端,供JS應用使用。

對于JerryScript來說,不管是數值還是字符串都是導出對應特性,實例分別是導出:數值E_VALUE特性和字符串E_STRING:

通過jerry_get_global_object方法獲取全局對象;

通過jerry_create_number創建數值特性對象,通過jerry_create_string創建字符串特性對象;

我們提供給js應用調用的方法,需要導出一個特性名字,通過jerry_create_string_from_utf8方法創建字符串對象(如:E_VALUE和E_STRING);

通過jerry_set_property方法,導出特性變量。

導出完特性變量之后,需要將其使用的對象值全部釋放。

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應用,rice.js內容如下:

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

運行結果:

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

通過C端導出LED方法,JS端控制LED燈

我是用的板子有4個LED,分別接在PE3,PD7,PG3,PA5個引腳,我們需要對齊編號,如下:

#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方法需要兩個參數,第一個參數代表LED編號,第二個參數代表引腳電平,我們的導出接口名為: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應用,將板子的四個LED點亮,rice.js內容如下:

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

運行結果:

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

總結

C端導出方法之后,在JS端實際編寫程序是非常方便的,調用方式跟C語言編程一樣。

可以通過C導出固定參數,使JS端調用起來像C端調用宏定義一樣。

我們可以通過C端導出硬件控制接口,使得JS應用程序可以調用應用接口。

當C端的基礎能力編寫完畢之后,JS應用程序實際跟C語言是基本一致的,而且JavaScript提供了很多方法,對于我們編寫業務邏輯更加友好。







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5142

    文章

    19553

    瀏覽量

    315326
  • led燈
    +關注

    關注

    22

    文章

    1595

    瀏覽量

    109386
  • C語言
    +關注

    關注

    180

    文章

    7630

    瀏覽量

    140518
  • javascript
    +關注

    關注

    0

    文章

    525

    瀏覽量

    54530

原文標題:嵌入式新開發模式(JavaScript)--C端與JS端方法調用

文章出處:【微信號:風火輪技術團隊,微信公眾號:風火輪技術團隊】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    何在嵌入式系統設計中使用UML技術

    嵌入式系統設計是一個軟、硬件結合的協同設計(Hardware/Software Co-design),需要不同技術背景的人共同開發。 本文將重點討論如何在嵌入式系統設計中使用 UML 技術,并用車載 GPS 終端項目作為實例來具
    發表于 04-14 08:02 ?4123次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>嵌入式</b>系統設計中使用UML技術

    嵌入式新開發模式(JavaScript)--C端與JS端方法調用

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

    嵌入式Linux下USB藍牙設備驅動

    技術的不斷發展,藍牙產品逐漸走入人們的生活。目前藍牙在PC端支持良好,應用比較廣泛。但在嵌入式系統中,由于藍牙接口的兼容性問題,使其在嵌入式領域的應用大打折扣。因此,如何在嵌入式系統中
    發表于 04-24 09:30

    WIFI網卡如何在嵌入式Linux中

    僅用于增加百度收錄權重,排版未優化,日常不維護。請訪問: 查看、評論。本博文對應地址: 嵌入式Linux——WIFI網卡/#more如何在嵌入式Linux中,使用WIFI無線網卡。嵌入式
    發表于 11-04 08:26

    嵌入式Linux設備何在運作

    點此進入原文鏈接,有視頻課程哦第一部分 嵌入式Linux簡介:首先,不知道大家知不知道嵌入式linux設備運行的話一般需要哪幾個組成模塊?一、嵌入式Linux
    發表于 11-05 09:26

    嵌入式設備中使用JavaScript

    只聽說過匯編,c做嵌入式,從不曾想JAVAScript也牛到涉入硬件領域了,原本對他的思維定格就是一個瀏覽器腳本??磥碚鎽四蔷湓挕挥邢氩坏?,沒有做不到’話不多說看看這些大佬的帖子在嵌入式
    發表于 11-08 06:14

    javascript嵌入式

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

    Caché嵌入式代碼分享

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

    何在嵌入式設備上運行高性能Java

    何在嵌入式設備上運行高性能Java
    發表于 03-28 09:43 ?16次下載

    嵌入式DHCP Server如何在vxWorks中

    嵌入式DHCP Server如何在vxWorks中的軟件實現
    發表于 03-29 12:27 ?23次下載

    何在嵌入式Linux中使用GPIO

    了解如何在嵌入式Linux中使用GPIO,特別強調Zynq-7000系列。 我們介紹了基本的用戶和內核空間GPIO使用情況,以及GPIO,GPIO密鑰和GPIO LED上的bit-banged I / O.
    的頭像 發表于 11-26 07:02 ?4276次閱讀

    Facebook神經網絡新研究將造福嵌入式設備

    人工智能風暴襲來,機器人、自動駕駛汽車這樣的嵌入式設備也熱度漸長。毫無疑問,現在,嵌入式設備也需要高效的神經網絡加持。但是,如何在
    發表于 08-07 11:27 ?832次閱讀
    Facebook神經網絡新研究將造福<b class='flag-5'>嵌入式</b><b class='flag-5'>設備</b>

    未來之JavaScript嵌入式

    只聽說過匯編,c做嵌入式,從不曾想JAVAScript也牛到涉入硬件領域了,原本對他的思維定格就是一個瀏覽器腳本??磥碚鎽四蔷湓挕挥邢氩坏?,沒有做不到’話不多說看看這些大佬的帖子在嵌入式
    發表于 11-03 13:51 ?4次下載
    未來之<b class='flag-5'>JavaScript</b>做<b class='flag-5'>嵌入式</b>

    用于嵌入式設備JavaScript

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

    嵌入式javascript編譯器的設計與實現

    電子發燒友網站提供《嵌入式javascript編譯器的設計與實現.pdf》資料免費下載
    發表于 10-30 11:29 ?0次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>javascript</b>編譯器的設計與實現
    主站蜘蛛池模板: 免费在线看a | 亚洲国产精品婷婷久久 | 免费又黄又爽的禁片视频 | 四虎海外在线永久免费看 | 欧美xxxxx精品 | 婷婷色香五月激情综合2020 | 久久精品国产99国产精品澳门 | 色视频免费看 | 狠狠操天天操夜夜操 | 免费视频现线观看 | 老师你好大好白好紧好硬 | 狼色影院| 欧美精品一级 | 亚洲图片欧美色图 | 天天做天天爱夜夜爽 | 性夜黄a爽影免费看 | 亚洲偷图色综合色就色 | a在线观看网站 | 成人午夜大片免费视频77777 | 国内精品一级毛片免费看 | 天天做天天爱天天爽天天综合 | 日本一二线不卡在线观看 | 色婷婷六月 | 高清一级做a爱视频免费 | 一级欧美一级日韩 | 亚洲一区二区视频 | 亚洲一区二区三区高清 | 一级日本高清视频免费观看 | 午夜女同影院 | 国产亚洲情侣久久精品 | 国产1区2区三区不卡 | 中文天堂网| 视频在线观看免费网站 | 欧美刺激午夜性久久久久久久 | 尤物蜜芽福利国产污在线观看 | www.四虎| 欧美性xxxx交 | 另类激情亚洲 | 亚洲一区二区三区网站 | 免费在线播放视频 | 日本不卡高清免费 |