基于内存动态加载的嵌入式开放SDK模组及其搭建方法与流程

文档序号:32993571发布日期:2023-01-17 23:51阅读:120来源:国知局
基于内存动态加载的嵌入式开放SDK模组及其搭建方法与流程
基于内存动态加载的嵌入式开放sdk模组及其搭建方法
技术领域
1.本发明涉及通信技术领域,尤其涉及一种基于内存动态加载的嵌入式开放sdk模组及其搭建方法。


背景技术:

2.智能社会及物联网的发展对芯片、模块的需求巨大,在各领域分工协作的今天,对于复杂系统的开发工作,其移动性、特定领域需求、安装便捷性以及与互联网的深度融合等特性极大地促进了智能社会的建设和发展。
3.本产品支持opencpu功能,opencpu是一种以模块作为主处理器的应用方式,随着通信技术的发展和市场的不断变化,越来越多的用户认识到opencpu解决方案的优势,特别是它能够有效降低产品成本的现实优势,让它备受行业用户的青睐。采用opencpu解决方案,可以简化用户对无线应用的开发流程,精简硬件结构设计,从而降低产品成本。
4.现有的opencpu技术严重的依赖芯片原厂提供的技术支持,受限较多,ota升级受到同样的限制,而且软件版本不同,opencpu实现的方式也不同,差分升级的方式也有差别,且代码占用空间大,编译时间长。同时,不同厂商的编译方式多种多样,对编译平台有特殊要求,例如ubuntu或windows的某个版本。采用内存动态加载的opencpu技术打破平台限制,不同平台不同版本的软件都支持采用该技术实现opencpu的功能。
5.其目的就是便于接口模块化,方便管理更新,有利于节省程序运行空间。动态链接技术的一个优点在于只有当接口被使用时才赋予空间地址,这样极大节省空间。


技术实现要素:

6.本发明实施例所要解决的技术问题在于,提供一种基于内存动态加载的嵌入式开放sdk模组及其搭建方法,以降低代码的存储空间同时方便开发者开发。
7.为了解决上述技术问题,本发明实施例提出了一种基于内存动态加载的嵌入式开放sdk模组,包括base,还包括base模块、app模块,base包括所述模组的各硬件已经调试完成驱动和射频相关功能的驱动;base模块采用虚拟函数表技术来规范接口api,通过api调用对应的硬件驱动来实现应用功能,采用指针映射技术,使base模块的api和app模块的api一一对应;app模块加载于base中,app模块接收用户调用的api函数,根据调用的api函数调用对应的硬件驱动来实现其应用功能。
8.相应地,本发明实施例还提供了一种基于内存动态加载的嵌入式开放sdk模组的搭建方法,包括:步骤1:搭建base,base包括所述通信模组的各硬件已经调试完成驱动和射频相关功能的驱动;步骤2:采用虚拟函数表技术来规范接口api,生成与驱动的api函数地址对应的虚拟函数表,将api函数地址与接口类指针绑定在一起,构建api接口指针映射;
步骤3:从base中挖出预设大小的空间进行动态加载,加载api接口指针映射;步骤4:通过api接口接收用户调用的api函数,根据调用的api函数调用对应的硬件驱动来实现其应用功能。
9.本发明的有益效果为:1)本发明采用内存动态加载技术后,降低代码的存储空间;2)本发明使编译平台只需支持ads1.2,生成的bin空间仅10k左右,编译速度快,下载便捷;3)本发明将硬件调试开发和软件应用开发做隔离,开发者侧重点仅需放在应用开发方面。
10.4)本发明为了规避内存越界,导致程序崩溃,将动态加载的空间约定为200k,且将其放到内存的尾部,避免和其它程序产生越界。
附图说明
11.图1是市面上现有的两种网络通信模组的示意图。
12.图2是本发明实施例的基于内存动态加载的嵌入式开放sdk模组的示意图。
13.图3是将定位的通信模组作为主控的两个版本的示意图。
具体实施方式
14.需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互结合,下面结合附图和具体实施例对本发明作进一步详细说明。
15.请参照图2,本发明实施例的基于内存动态加载的嵌入式开放sdk模组包括base模块、app模块以及base。
16.base包括所述通信模组的各硬件已经调试完成驱动和射频相关功能的驱动。
17.base模块采用虚拟函数表技术来规范接口api,通过api调用对应的硬件驱动来实现应用功能,采用指针映射技术,使base模块的api和app模块的api一一对应。本发明采用动态加载技术将一个大的工程,划分为base版本和app版本,采用虚拟函数表技术来规范接口api,因此所有的api中函数地址与接口类指针绑定在一起,也意味着其接口函数生存在接口类指针的地址空间。
18.虚拟函数表进行初始化时,传递函数名到底层,通过函数名字查找得到相应的函数地址并赋值。
19.便于接口模块化,方便管理更新,有利于节省程序运行空间。动态链接技术的一个优点在于只有当接口被使用时才赋予空间地址,这样极大节省空间。
20.app模块接收用户调用的api函数,根据调用的api函数调用对应的硬件驱动来实现其应用功能。
21.本发明通过在base中挖出一部分空间,来加载base模块、app模块,实现驱动的应用功能,方便app应用的开发,节省了应用端开发者的工作量,只需要通过api函数调用,即可实现所需硬件以及对应驱动的控制以及其他功能的实现。
22.用户在app模块端调用,和在base模块端调用所产生的功能相同。
23.相关api举例说明如下:
系统相关:任务、timer、消息的接收和发送等,在base端定义好api名称,其和app端的api一一对应;驱动相关:spi、i2c、uart、gpio等驱动接口,在base端定义好api名称,其和app端的api一一对应;网络相关:具有wifi、蓝牙、蜂窝网络功能的芯片,其功能在base端已经调试ok,定义好相关操控api的名称,其和app端的api一一对应。
24.作为应用程序的开发者,大多数情况下,其关心的是获取数据,经过解析和处理后,将数据展现出来,有可能是通过网络展现也可能是通过屏幕等外接设备;简单的讲,app开发者关心的是采集数据、数据处理、数据发出,在我们app端设计上,提供了系统、驱动、网络相关的api,这些api和base端的api一一对应,开发者在app端调用api可以实现base端相同的功能。例如使用app端做开发,可以通过调用spi的接口来实现对存储器、屏幕等外接设备的操控和数据获取。
25.本发明实施例的基于内存动态加载的嵌入式开放sdk模组的搭建方法包括步骤1~步骤4。
26.步骤1:搭建base,base包括所述通信模组的各硬件已经调试完成驱动和射频相关功能的驱动。
27.步骤2:采用虚拟函数表技术来规范接口api,生成与驱动的api函数地址对应的虚拟函数表,将api函数地址与接口类指针绑定在一起,构建api接口指针映射。虚拟函数表进行初始化时,传递函数名到底层,通过函数名字查找得到相应的函数地址并赋值。
28.步骤3:从base中挖出预设大小的空间(例如,划分了200k的区域进行动态加载,此区域主要用于下载用户开发的应用程序,可单独烧录此区域的程序)进行动态加载,加载api接口指针映射。加载前先对zi区域进行清零的动作,然后根据各函数名查找对应函数的地址并进行映射。在执行用户应用程序前,会先对整个image的大小进行判断,超出底层定义的空间大小,则不执行。
29.步骤4:通过api接口接收用户调用的api函数,根据调用的api函数调用对应的硬件驱动来实现其应用功能。
30.例如目前市面上的网络通信模块,可以提供两种版本,一个是支持串口at指令版本,一个是opencpu版本,作为opencpu版本,支持第三方开发者做二次开发,见图1。如果将定位的模组作为主控,也可以提供两个版本,见图3,一个是支持串口控制和输出的版本,另外一个是可以提供一个上文所讲的app版本,可以支持开发者在app上做轻量级的开发工作,app版本作为二次开发,可以不用关心其硬件相关的实现,通过api调用来实现应用功能。
31.实施例1:在以有的手机开发平台上,例如mediatek的mt6877(天玑900),如果要做网络侧的功能,并不关注通话和短信相关的功能,就可以使用该方案来实现,实施如下:将mt6877做为base端,在base端调通射频、驱动相关的部分,然后从中挖出1m的空间(具体的空间可以根据项目需求做调整)作为app,通过上文讲诉的指针映射技术,可以在app端来实现物联网相关功能的开发工作。如果在使用mt6877做了10个物联网相关的项目,base公用一个,开发10个相关的app,节省了大量的工作量,有效的聚焦了应用场景并且降低了开发难度。
32.实施例2:定位模组应用场景多样化,带来了模组功能定制需求,基于已有芯片做模组定制化的开发功能可以采用该方案;将芯片的开发平台作为base端,规划内存地址,并从中挖出100k(根据具体的应用实例来确定该空间)来做为app开发,base端已经实现了gnss的基础功能,在app端做个性开发,例如信鸽模组的实现在app端来实现,app端根据gsensor来做功耗控制和存点功能,并且实现数据的压缩和解密功能;也可以实现app对外开放的功能,由第三方开发者来实现自有功能的定义及实现。
33.尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同范围限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1