找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] BREW平台中接口的设计与实现

[复制链接]
admin 发表于 2013-3-25 13:14:54 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 为了说明BREW中如何实现用C语言来模拟C++中的面向对象的特性,实现接口的声明与实现的分离、对多个接口的支持和接口的易扩展性。通过实例,阐述了BREW通过虚拟函数表将接口与实现分离,使用ISHELL接口对多个接口支持及扩展。该方法与普通的C语言实现的接口相比较,修改接口而不会影响到应用程序,而接口有更好的可扩展性,更容易管理。
关键词: BREW;接口;面向对象
    如今,手机已不是简单的语音通信工具,它已逐渐发展成为数据业务开发应用的平台。在这种情况下,高通公司推出了一个新的BREW(Binary Runtime Environment for Wireless)平台。BREW平台的出现使手机像电脑一样,可以应用更多的第三方软件,满足人们不同的需求,为用户提供更多的服务。
在手机软件开发中,许多问题都需要使用C++中面向对象的方法来实现,以提高代码的可重用性、程序的模块化及健壮性;为了满足用户对新数据应用的需求,移动设备制造商也希望不重新开发专有的软件平台,就可以快速提供新业务,以降低移动设备的技术门槛和产品上市门槛。
 高通公司推出的BREW平台,为无线设备设计专门提供了一个高效的应用程序执行环境及开发平台。在BREW平台,用C语言开发应用程序可以达到C++的设计效果,而不需要开发专用的软件平台,又提高了程序开发的效率和新业务开发的速度。
本文通过一个例子,阐述BREW中如何实现接口的声明和实现的分离来达到面向对象的特性,提高代码的可重用性、健壮性以及其可扩展性和易于管理的特性。
1 BREW接口的实现
1.1 BREW平台简介

 BREW 的全称是无线二进制运行环境。从基本的层面而言,BREW 平台就是手持设备上嵌入式芯片操作系统的接口或抽象层,可以将它看作是 PC 环境下 Microsoft Windows 的 Win32 API。BREW 平台是一组用于本地执行而编译并链接的二进制库,优化后能使应用程序利用无线服务和资源,控制流出或流入应用程序的事件流,能根据相应的事件启动、停止、中止或恢复应用程序。BREW 执行环境在运行时可以发现应用程序和任何相关的扩展[1]。
1.2 嵌入式系统结构
 图1是分散式系统结构图。从图1中可以看出,SDK需要使用运行平台的接口声明来开发应用程序,运行平台负责根据用户的输入启动应用程序,而应用程序则通过运行平台的接口调用运行平台的函数库来实现功能[2]。
    20121107050036233261961.gif
    假设程序运行到了需要调用平台函数的时候,由于当前的应用程序是开发者使用SDK开发的,就像平台不知道应用程序的地址一样,应用程序也不知道平台函数的地址,因此,所面临的问题就是怎样能够知道应用程序中所调用的平台函数的地址。虽然SDK中可以提供运行平台中每个函数的地址,但是因为平台会经常升级,导致每个函数的链接地址不固定,因此在平台升级时,SDK和应用程序都需要同时升级。这样就不能实现“分散式”的升级了,这种程序的运行方式也就没有任何意义了。为解决分散式系统分散式升级的问题,BREW提供了一个机制来解决应用程序调用函数的问题。
 如果在开发过程中使用运行平台的接口声明,而在运行时应用程序使用真正的二进制接口,并在二进制层面调用接口函数[3]。则无论是SDK还是应用程序都与接口相关,解决这个问题的方式就是让接口和接口的实现之间分离。下面介绍BREW中的接口是如何实现的。
1.3 软件开发和C语言
 在C语言中, C语言库的开发商开发了一个算法来实现字符串的搜索,为了实现这个功能,软件厂商生成了一个头文件FastString.h[4],内容如下:
typedef struct _IFastString
{
char *m_pString;
}IFastString;
void IFastString_CreateObject(IFastString *IFastString, char *pStr);//创建目标字符串对象
void IFastString_Release(IFastString *IFastString);
//释放目标字符串对象
int IFastString_GetLength(IFastString *pIFastString);
//获取目标字符串长度
int IFastString_Search(IFastString *IFastString, char *pSearchStr);//查找字符串,返回偏移量
 在BREW接口中共有4个接口:CreateObject、Release、GetLength、和Search。CreateObject用来创建IFastString接口,Release用来释放接口的资源,GetLength用来获取字符串长度,Search用来查找字符串。一般地,这个库的使用者会将.lib库链接到自己的工程中,通过接口声明的头文件来使用库中的函数。这样,库函数将成为客户应用程序中的一部分。
 假设FastString库占用了1 MB的空间,如果4个程序中都调用了这个接口,则FastString接口将会占用4 MB的空间,也就是说有3 MB的空间浪费掉子。图2是多个程序调用FastString库的示意图。另外,如果库厂商发现接口有缺陷,又没有办法替换已经存在的缺陷代码,一旦FastString接口链接到代码中,就不可能在用户设备上替换这部分代码。因此,库厂商不得不重新为每个应用程序的开发者广播发布新的库文件,并希望他们重新编译程序来使用新的代码。这在嵌入式系统中是不可能的。因为在这里FastString的角色就是运行平台,不可能每个应用程序都包含一个运行平台。解决这个问题的一种技术是使用动态链接库技术将FastString包含起来。
    20121107050036264511962.gif
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2025-1-14 21:09 , Processed in 0.059640 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表