时间:2023-04-06 15:39
人气:
作者:admin
打破单片机开发模式--胶水语言(JavaScript)
胶水语言可以让我们职责更加明确,可以类前后端开发模式,后端负责--硬件的适配,方法的导出;前端负责--业务逻辑的的开发。
本篇文章作者来介绍JS在嵌入式设备上的如何使用,我们通过一下几点说明:
在使用JerryScript引擎实现C端与JavaScript端交互时,许哟啊弄清楚几个概念:
| 类型 | 说明 |
|---|---|
| object | 对象,JerryScript是基于对象编程的,所以我们导出的方法都是对象的基础上的 |
| property | 特性,如导出的参数,函数等,都属于特性,归属于某个对象的特性 |
| value | 值,在JerryScript中,所有的对象,特性,参数,方法,都会转为一个32位的数值,然后我们通过这个数值便可以访问对应内容 |
typedefjerry_value_t(*jerry_external_handler_t)(constjerry_value_tfunction_obj,
constjerry_value_tthis_val,
constjerry_value_targs_p[],
constjerry_length_targs_count);
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("%srn",(constchar*)log_buff);
returnjerry_create_undefined();
}
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);
}
varhello=123;
log("youyeetoo:"+hello);

#defineE_VALUE123
#defineE_STRING"youyeetoo"
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);
}
log("youyeetoo:"+E_VALUE);
log("youyeetoo:"+E_STRING);

#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};
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);
}
log("youyeetoo:"+E_VALUE);
log("youyeetoo:"+E_STRING);
led(0,1);
led(1,1);
led(2,1);
led(3,1);

上一篇:跨平台的线程池组件--TP组件
下一篇:Linux内核中安全增强的配置项