完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
名词解释
AliOS Things: 阿里云智能IoT团队自研的物联网操作系统 HaaS:全称是Hardware as a Service,阿里云智能IoT团队基于AliOS Things系统推出的硬件即服务 HaaS UI:全称是Hardware as a Service User Interface,是源自AliOS Things操作系统上的一套应用&图形解决方案,支持C/C++和 JS两种开发语言 前面我们讲了如何添加一个新的模块,接下来我们来探讨模块中方法的实现: JS调用Native实现(JS->Native) 在开发过程中,我们最常用的JSAPI扩展就是在JS中调用Native的功能,比如调节设备音量,这种从JS到Native的调用都类似,下面我们用timer模块中实现设置时间间隔的方法来说明这个过程; 通过上一篇文章的方法,在引擎中注册了timer模块和对应方法后,我们就可以在js中调用setInternal方法: timer.setInternal(2); JS引擎就会调用对应的js_timer_setInternal方法,执行完成后返回,js_timer_setInternal的实现如下: static JSValue js_timer_setInternal(JSContext* ctx, JSValueConst this_val, int argc, JSValueConst* argv) { int64_t internal; if (JS_ToInt32(ctx, &internal, argv[0])) { return JS_EXCEPTION; } return JS_NewBool(ctx, g_JSTimer.setInternal(internal)); } jsapi对应native函数原型是一样的,都是4个参数,第一个参数:JSContext,是js运行的上下文,通过它你可以去获取运行中的各种变量,函数,做你要做的操作;第二个参数:this_val,是当前的js中this对象,在引擎中,所有的对象、变量、函数、返回值都是用value值进行管理;第三个参数:argc,是参数个数;第四个参数:argv,是参数value的数组;例子中是传整数参数,除整数外,还可以传bool,float等类型,转换参考下面的函数: int JS_ToBool(JSContext *ctx, JSValueConst val); /* return -1 for JS_EXCEPTION */ int JS_ToInt32(JSContext *ctx, int32_t *pres, JSValueConst val); int JS_ToUint32(JSContext *ctx, uint32_t *pres, JSValueConst val); int JS_ToInt64(JSContext *ctx, int64_t *pres, JSValueConst val); int JS_ToIndex(JSContext *ctx, uint64_t *plen, JSValueConst val); int JS_ToFloat64(JSContext *ctx, double *pres, JSValueConst val); /* return an exception if 'val' is a Number */ int JS_ToBigInt64(JSContext *ctx, int64_t *pres, JSValueConst val); /* same as JS_ToInt64() but allow BigInt */ int JS_ToInt64Ext(JSContext *ctx, int64_t *pres, JSValueConst val); 获取参数后,我们就可以用这些参数调用c/c++里对应的函数了;运行完之后,我们还可以把返回值传给js,返回值也要转为JSValue,对应的函数如下: JSValue JS_NewBool(JSContext *ctx, JS_BOOL val); JSValue JS_NewInt32(JSContext *ctx, int32_t val); JSValue JS_NewCatchOffset(JSContext *ctx, int32_t val); JSValue JS_NewInt64(JSContext *ctx, int64_t val); JSValue JS_NewUint32(JSContext *ctx, uint32_t val); JSValue JS_NewBigInt64(JSContext *ctx, int64_t v); JSValue JS_NewBigUint64(JSContext *ctx, uint64_t v); JSValue JS_NewFloat64(JSContext *ctx, double d); 文章转载自:平头哥芯片开放社区 作者:sucool |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【平头哥Sipeed LicheeRV 86开发板试用体验】Waft初体验
15659 浏览 1 评论
13707 浏览 4 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】四、烧写waft系统&搭建waft测试环境
19624 浏览 2 评论
59031 浏览 19 评论
【限时福利】加入芯片开发社区,领100G电子工程师资料大礼包
87731 浏览 121 评论
邀请函 | 3月2日 来上海参加平头哥“玄铁RISC-V生态大会”
745浏览 0评论
读书分享会 | 玄铁RISC-V处理器入门与实战电子书免费下载!
642浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 06:20 , Processed in 0.729058 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号