完善资料让更多小伙伴认识你,还能领取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两种开发语言 提纲 除了通过HaaS系统框架提供的方法扩展JSAPI外,我们还可以使用QuickJS提供的方式进行JSAPI的扩展;这样基于QuickJS扩展的开源代码,我们可以很方便的移植到HaaS平台,下面我们分三部分详细描述:
这里我们以timer扩展模块来讲解整个扩展的流程; 在应用入口处,我们调用init_timer_module方法: void init_timer_module() { falcon::QJSModuleExtension* extension = falcon::QJSModuleExtension::singleton(); // module name & loadFunction // extension->registerModuleLoader("timer", &loadTimerModule); } 告诉系统我们要注册的模块叫“timer”,加载函数叫loadTimerModule,loadTimerModule需要我们完全按照QuickJS扩展模块方式自己实现,可以参考QuickJS的相关文档,下面是timer的实现: static const JSCFunctionListEntry js_timer_module_funcs[] = { // JS_CFUNC_DEF(入口名称,入参个数,C 函数) // JS_CFUNC_DEF("setInternal", 1, js_timer_setInternal), JS_CFUNC_DEF("setListener", 1, js_timer_setListener), JS_CFUNC_DEF("start", 0, js_timer_start), JS_CFUNC_DEF("stop", 0, js_timer_stop)}; static int js_timer_init(JSContext* ctx, JSModuleDef* m) { return JS_SetModuleExportList(ctx, m, js_timer_module_funcs, countof(js_timer_module_funcs)); } JSModuleDef* loadTimerModule(JSContext* context, const std::string& moduleName) { JSModuleDef* m; m = JS_NewCModule(context, moduleName.c_str(), js_timer_init); if (!m) { return NULL; } JS_AddModuleExportList(context, m, js_timer_module_funcs, countof(js_timer_module_funcs)); return m; } 在引擎初始化好后,框架就会依次调用我们注册的模块初始化方法了,通过QuickJS提供的JS_NewCModule方法,我们直接在引擎中增加了一个Module,并且通过JS_CFUNC_DEF注册了这个模块所要提供的所有方法,第一个参数是入口名称,也就是在js中调用的方法名,第二个参数是此方法的参数个数,第三个参数是对应的c函数方法名; 至此一个新的模块就注册完成; 这种方式下,我们只是告诉框架在初始化完引擎后调用下loadTimerModule方法,之后的模块注册,方法参数解析,方法返回等完全由我们自己来实现,自由度比较大,难度也比较大,需要我们对QuickJS的运行线程模型和对象管理有比较深入的了解,工程中最常出现的问题是内存泄漏,大家一定要注意;接下来我们来讲解如何实现native方法; so的方式添加JSAPI模块 上面的方式我们是在程序入口调用init_timer_module,注册模块loader的方式; 另外在支持so动态加载的系统上(如linux),把入口函数init_timer_module改为custom_init_jsapis,新的模块单独编译成.so,放到 $MINIAPP_RESROOT/jsapis 目录下,系统启动时会自动加载$MINIAPP_RESROOT/jsapis下的so,查找并调用每个so的custom_init_jsapis函数完成新模块的注册; 文章转载自:平头哥芯片开放社区 作者:sucool |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【平头哥Sipeed LicheeRV 86开发板试用体验】Waft初体验
15638 浏览 1 评论
13682 浏览 4 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】四、烧写waft系统&搭建waft测试环境
19601 浏览 2 评论
58982 浏览 19 评论
【限时福利】加入芯片开发社区,领100G电子工程师资料大礼包
87518 浏览 121 评论
邀请函 | 3月2日 来上海参加平头哥“玄铁RISC-V生态大会”
722浏览 0评论
读书分享会 | 玄铁RISC-V处理器入门与实战电子书免费下载!
613浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-6 09:23 , Processed in 0.511220 second(s), Total 40, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号