BREW™ SDK入门篇(二)

BREW SDK开发工具集实战指南 本文还有配套的精品资源,点击获取 简介:BREW SDK TOOLS是一套为BREW移动设备平台开发设计的工具集,由高通公司开发。它包括了编译器、模拟器、调试器、资源编辑器、打包工具、性能分析工具等,支持从开发、测试到应用发布整个流程。开发者可通过此工具集实现高效的软件开发,并利用其提供的文档和API库开发功能丰富的BREW应用。 1. BREW平台概述 1... 阅读详情

转自:http://www.joymo.cn/Html/articles/release_37_8837281482020.html

第二部分 – 在模拟器上运行“Hello BREW”

在跟随本文学习相关知识点之前,你需要以下环境:

1.              Microsoft Visual C++ 6.0®(或更高版本)

2.              1.1版的BREW SDK.

要了解系统最低要求,和获得更细节的资料,SDK的安装指导,请查看SDK 1.1的README文件。注意,在这里我假设你已经读过了本系列中之前的一篇文章,“什么是BREW”以及本系列的前一篇文章“第一部分-预备知识”。我进一步假设你已经创建了一个模块信息文件(helloBREW.mif)和一个BREWx小程序资源文件(helloBREW.bar)并且分别将他们拷贝到了“...yourBREWdir/Examples/mif/256Color/”和“...yourBREWdir/Examples/en/256Color/”两个目录。同时,在“...yourBREWdir/Examples/helloBREW/”目录必须有用BREW资源编辑器生成的helloBREW_res.h文件,用BREW应用程序向导创建的应用程序源文件(helloBREW.c)。如果你需要了解更多,可以阅读上面提到的第一部分,或者阅读SDK附带的文档。

在这个例程中,你需要知道文件名是非常重要的。特别的,应用程序目录和模块信息文件(.mif)必须目标.dll文件名字相同(也就是前缀相同)。注意,你可以通过打开项目设置对话框(选择项目菜单>设置)的Link选项卡来定义.dll文件的名字。如果你按照第一部分的去做了,应该在相应目录已经有了正确命名的文件。

最后,提醒一下,在本文中“小程序”和“应用程序”这两个词会交替使用,都代表同一事物。

设置Visual C++

在第一部分,所有的必须项目设置都是由BREW应用程序向导来管理。但我们仍然需要提供一个可执行文件以便在调试阶段运行.dll文件,同时还要确保BREW能够找到应用程序的.dll文件。为了满足第一个要求,我们需要为BREW_Emulator.exe提供路径。

为了满足第二个要求,我们要确保链接程序将helloBREW.dll写在项目的根目录里(.../helloBREW/),而不是默认的debug目录(.../helloBREW/debug/)。因为模拟器自动在名为helloBREW的目录里寻找helloBREW.dll。
 
理解源代码
首先我们来大致了解一下应用程序向导在helloBREW项目中生成的源代码。如果你还没有这么作过,请用Visual C++打开helloBREW项目,然后选择FileView并展开Source Files文件夹。你可以看到3个源代码文件:AEEAppGen.c,AEEModGen.c,以及 helloBREW.c。前两个文件使得我们的应用程序能够绑定到BREW的应用程序执行环境(AEE)。AEEModGen.c管理模块,每个模块(module)基本上包括1个以上互相依赖的小程序(applets)。当一个终端用户激活了一个应用程序,AEE创建模块,由这个模块调用每个应用程序必须提供的AEEClsCreateInstance()函数,依次实例化应用程序。

这让我们开始了解小程序(applet)和应用程序(application)可以(比较宽松)地互换使用的原因。为什么呢?因为小程序可以理解为一个容器,他容纳了仅允许开发人员创建的功能与AEE交互并且在设备上运行的所有文件。举例来说,这样一个容器可以提供对shell服务的接口和对设备显示器的接口。这样我们可以认为一个应用程序是一个小程序加上开发任何创建的功能。实际上,如果在这个例子里我们用C++原理来说明,helloBREW(开发人员创建的功能)要public地从BREW的AEEApplet结构继承,从这个角度看,一个应用程序就是一个小程序(is a的关系)。AEEAppGen.c提供AEEApplet_New()函数,helloBREW将调用这个函数来设置helloBREW应用程序的AEEApplet部分。很快我们会更详细地讨论AEEClsCreateInstance()和AEEApplet_New()。

现在我们对这些部分如何相互结合有了个基本的概念,现在让我们看看BREW应用程序向导生成的框架代码。至于所include的头文件,你可能都已经猜到了,AEEModGen.包含了AEEModGen.c的声明,AEEAppGen.h同样声明了AEEAppGen.c。AEEShell.h提供了shell接口API的声明。如果你希望更多的了解这个重要的接口,可以在BREW SDK附带的BREW API参考里查找IShell。这里我们将不作深入研究,将我们自己的代码加到helloBREW.c中。

现在,我们跳过helloBREW_HandleEvent()的定义来看AEEClassCreateInstance() (也可能是AEEClsCreateInstance(),译者注)。这个函数是helloBREW接触到AEE的地方。当AEE向应用程序传递一个启动的请求,AEEModGen.c中定义的AEEModCreateInstance()就调用小程序(applet)型的AEEClassCreateInstance()函数。因为BREW是单线程的,所以,不论一个模块里有多少个小程序,同一时间只有一个小程序被激活。通过调用ISHELL_StartApplet(),一个小程序可以被另一个小程序启动。在这种情况下,当前的小程序被暂停,转而用ISHELL_StartApplet()提供的class ID调用AEEClassCreateInstance()。显而易见,AEEClassCreateInstance()需要模块里每一个class ID的逻辑分支。在我们的模块里只有一个小程序,因此AEEClassCreateInstance()只需要处理一个class ID。

在前面的文章里,我们记得在helloBREW.mif文件里生成了一个helloBREW的class ID。MIF编辑器创建了一个helloBREW.bid文件,其中用#define将这个class ID定义为:AEECLSID_HELLOBREW。很明显的,这个模块从模块信息文件(helloBREW.mif)文件中获得了class ID,并且将其作为第一个参数传递给了AEEClsCreateInstance()。

第二个参数,pIShell,是一个IShell指针,是在模块第一次加载的时候由AEE提供的。在调用AEEApplet_New()的时候,AEEApplet结构的m_pIShell成员必须被设置成pIShell。这个IShell指针提供了helloBREW对IShell接口所有API的访问。

第三个参数,po,是一个指向包含了helloBREW模块的指针,这个参数将在调用AEEApplet_New()时对AEEApplet结构的m_pIModule参数进行初始化。我们的代码不会涉及到这个指针。AEEAppGen.c中定义的AEEAppletRelease()函数需要这个指针在结束helloBREW时释放动态分配的模块。

最后,ppObj是指向普通指针的指针。这里用一个void类型的**,因为*ppObj可以指向两种东西。幸运的是,我们只需要关系IApplet类型的对象。要是你对指针的用法有点生疏,必须使用双间接寻址,以保证当AEEApplet_New()返回时*ppObj指向一个有效的IApplet对象。如果ppObj简单地定义为 void *ppObj(即单一的间接寻址),ppObj在AEEApplet_New()返回时就不会有所改变。C语言的参数传递机制将仅向AEEApplet_New()传递ppObj指针的一个简单拷贝,而不改变在AEEClsCreateInstance()中原有的值。由于我们想让AEEApplet_New()修改在AEEClsCreateInstance()中引用的同一指针,我们只能传递值参,而不是形参。

传递给AEEApplet_New()函数的倒数第二个参数是一个指向我们应用程序事件句柄的指针。当AEE一旦收到去往helloBREW的事件,都会调用这个函数。如果最后一个参数是非空的,我们就需要传递指针给一个在应用程序终止时释放动态分配数据的函数。这个PFNFREEAPPDATA是一个函数指针,这个函数接收IApplet *类型的参数,返回void。为了演示,我们将在helloBREW里加入这样的一个函数。

我们看helloBREW_HandleEvent()框架化的代码。第一个参数指向IApplet实例。在这个函数里,pi将被用于访问小程序的m_pIShell和m_pIDisplay数据成员。当我们向helloBREW添加自己的代码时,我们会更加详细地讨论这一点。

第二个参数,eCode,就像它的名字一样,指的是用于发现是什么动作导致对helloBREW_HandleEvent()调用的事件代码。最后两个参数包括了事件型的数据。在头文件AEE.h中可以找到完整、详尽的事件列表,还有对通过事件型参数wParam和dwParam提供的数据的描述。在BREW的SDK用户指南里可以找到更易读更友好的事件列表,包括不同的按键事件和按键代码以及对wParam和dwParam事件型内容的说明。

添加源代码
现在让我们在helloBREW中加入我们自己的代码。你可以在“...yourBREWdir/Examples/HelloWorld/”下的helloworld.c中看到一个简单版本的“hello”。为了防止重复并且让我们的例子更加有趣,我们将创建自己的小程序数据结构,提供InitAppData()和FreeAppData()函数,从资源文件(helloBREW.bar参考第一部分预备知识)中加载字符串并且用BREW的IStatic控制器显示他们。

我们需要在include的头文件列表中增加AEEStdLib.h。这个头文件包括了MALLOC() 和FREE(),以及在BREW API参考中提到的helper函数。

然后,我们的应用程序需要能够访问helloBREW.bid中的class ID和helloBREW_rew.h中的字符串ID。

注意,非常重要的一点是,一个应用程序里不能有任何静态(全局)数据。因而我们的应用程序数据结构就定义为全局的数据结构(struct,至少C程序是这样)。并且我们让AEEClsCreateInstance()来管理堆里的实例。这又带来另一个非常重要的注意点:设备上的堆栈空间是非常有限的。举例来说,Kyocera QCP3035e仅有500字节的可用堆栈空间。很明显的,你需要尽量少的使用堆栈,为了达到这个目的,你可以将函数调用的层次降到最少,尽量将非原子化(可分割的,译者注)本地变量分配至堆,并且当需要传递的数据大于4位时,即使用指针。

应用程序数据结构提供了一个容器,用于装载在整个应用的生命周期中程序员需要维护的所有东西。这包括应用程序的AEEApplet部分,在这里可以访问shell,显示,和维护模块指针。AEEApplet必须为这个数据结构的第一个成员,这是强制性的。这个数据结构另外一个成员是一个指向用于显示我们定义的字符串的IStatic控制器的指针。

首先也是最重要的,我们修改了传入AEEAppletNew()的第一个参数。除了helloBREW的AEEApplet部分所需要的空间外,我们还需要用AEEApplet_New()来为小程序数据结构的IStatic *分配空间。为实现这一点,我们将sizeof(hb_app)传递给AEEApplet_New()作为第一个参数,而不是原来的sizeof(AEEApplet)。

第二步,为了在helloBREW中增加一个FreeAppData()函数,我们需要向AEEApplet_New()传递一个指针(hb_FreeAppData())作为最后一个参数。这个函数将被登记入AEE并且在应用程序终止时自动调用。图9显示了hb_FreeAppData()的定义。就像你看到的,这个函数的基本任务就是调用ISTATIC_Release()来释放IStatic控制器。

AEEClsCreateInstance()最后改变就是调用hb_InitAppData(),在这里,我们的小程序数据结构中的IStatic *成员被初始化为NULL。


helloBREWHandleEvent()中对BREW应用程序向导生成的初始代码有大量修改。在最上面,我们定义了一个指向我们的小程序数据结构的指针,并且将本函数的第一个参数,IApplet *分配给这个指针。整个事件句柄中,这个指针被用于访问helloBREW中AEEApplet部分的m_pIShell成员,此外还提供对我们用来代表IStatic控制器的m_pIStat指针的访问。

在EVT_APP_START的开头,我们定义的第一个本地变量是AEEDeviceInfo类型变量。这个结构包括了保存设备屏幕尺寸和颜色深度的成员变量。更详细的数据成员介绍可以在BREW API参考最后的数据结构(数据类型,译者注)章节中找到。记得我提醒过关于尽量减少堆栈空间的使用,我们应该在堆上为这个结构分配内存,并且在本地定义指针来监视它。由于这个小程序不需要担心堆栈空间耗尽的危险,为了简单的缘故,我将这个结构定义为本地变量。

接下来,我们看到一个简单的矩形对象(AEERect),我们用来确定静态控制器的大小和位置,并且确定几个缓存分别保存m_pIStat的标题和文本。AECHAR是uint16的类型定义(typedef)(参考AEE.h),而uint16又是无符号短整数的类型定义(参考AEEComdef.h)。这样AECHAR可被用来存放Unicode或者成为宽字符集(wide characters)类型变量。这样wbufTtl和wbufTxt指向的是由宽字符集中的字符组成的以空结尾的字符串。参考BREW API参考中的Helper函数章节,了解操纵宽字符集字符串的工具。

在验证完m_pIShell的有效性后,我们可以调用来给di赋值。接下来,屏幕的尺寸成员di.cxScreen和di.cyScreen被用于设置装有静态控制器的位置、尺寸的矩形对象。在屏幕坐标系统中,原点是显示器的左上角,而当我们向右移时x坐标增大,向下移时y坐标增大。

在调用ISHELL_CreateInstance()时指定AEECLSID_STATIC为请求接口的class ID。假设成功,这个函数调用返回时m_pIStat将指向一个有效的IStatic。其它接口的class ID可以在aeeclassids.h中找到。在创建了IStatic后,我们调用ISTATIC_SetRect()来设置它的矩形,将指向刚才初始化的矩形结构的指针传递给他。

在为之前定义的缓冲区(wbufTtl,wbufTxt)分配了内存后,我们调用ISHELL_LoadResString()两次:一次是为IStatic的标题,一次是文本。这两个缓冲区则将标题和文本提交给ISTATIC_SetText()。ISTATIC_SetProperties()用于定义标题和文本的位置,并且调用ISTATIC_Redraw()在屏幕上显示静态控制器。参考BREW API参考中的IStatic章节可以了解更多关于这些函数的调用方法。

注意BREW不能容忍内存泄漏。因此你需要确信所有对MALLOC()的调用都相对应的有对FREE()的调用,而对ISHELL_CreateInstance()的调用相对应的有对I*_Release()的调用。在EVT_APP_START的最下面释放(FREE())了使用到的两个缓冲(buffer)。HelloBREW在hb_FreeAppData()中调用Istatic_Release()时释放Istatic实例。


helloBREWHandleEvent()的剩余部分。这里我们增加了一个EVT_KEY事件,用于应用手机上“CLR”按键的标准。当“CLR”按钮按下时,我们通过返回FALSE来通知AEE应该关闭应用程序了。在手机上“CLR”按键预置的意思为“退回上一级”,你的应用程序应该实现这个动作。

因为释放m_pIStat的事情交由hb_FreeAppData()处理,因此我们在EVT_APP_STOP事件句柄中不需要做任何事情。


运行helloBREW

现在来启动BREW模拟器(Emulator),可以通过点击BREW SDK程序组中的快捷方式,也可以点击Visual C++里画有红色惊叹号的按钮来启动模拟器。

点击BREW SDK程序组中的快捷方式,或者点击Visual C++中的红色惊叹号来启动BREW模拟器。用左右方向键在BREW应用程序管理器中定位helloBREW,选中后,你可以看到在模拟器屏幕的正中显示了我们所作的85×40的大图。在键盘上按回车,模拟器的显示器上将显示第二帧的图像。

由于我为helloBREW.mif另外定义了一个MIF的目录,所以你的模拟器显示的第一帧可能不会象上图10中显示的一样。我这么做的目的是避免在一大堆SDK中自带的实例应用的图标中去找helloBREW的图标。也就是说,模拟器只显示在当前指定的MIF目录中有有效.mif文件的应用程序。你可以将生成的helloBREW.mif移到,例如,“..yourBREWdir/Examples/yourmif/256Color/”中,然后在模拟器的工具菜单中将它设置为初始的mif目录。详细的设置指导可以参考BREW MIF编辑器指南。

用模拟器调试
如果您按照本文开始部分的指导来设置Visual C++的部分,你可以象平常一样使用Visual C++调试器。例如,为了确信AEEClsCreateInstance()象所期望的那样工作,你可以将光标置于这个函数中,并点击调试工具条中的“Run to Curor”。然后你可以单步运行这个函数,设置监视某些变量的值,跳入其它函数,或者将光标置于其它函数或者事件句柄并且再次点击“Run to Curor”。如果你对Visual C++调试器不熟悉,你应该阅读Visual C++自带文档的相关章节。

如果模拟器在启动的时候不能显示Sharp Z800的话机界面,你可以利用File> Load Device...来更换所模拟的设备。在“...yourBREWdir/devices/”中选择Z800话机设备文件,以qsc结尾的,并点击打开以加载该设备。

最后需要注意的是2.0SDK中所带的模拟器结合了更为严格的堆检验,这将帮助你找到内存溢出,数组越界等在早期开发过程中可能出现的错误。2.0的模拟器可以与1.x的SDK联合使用。关于如何在一台机器上安装多个版本的SDK等信息可以参考SDK2.0的安装指导。

© Copyright 2002, Golden Creek Software Inc.

作者:By Murray Bonner   

用C实现接口的例子,依照高通的brew编写 用C实现接口的例子,依照高通的brew编写,VC工程下通过编译,但是GCC下不行 立即下载

相关推荐

Brew SDK 3.1.5

Brew SDK 3.1.5 配置环境变量即可

在 macOS 上安装 Android SDK 而不安装 Android Studio

本文介绍了5种在Mac上安装Android SDK的方法:1)使用Homebrew安装命令行工具并配置路径;2)直接下载命令行工具包并解压;3)通过sdkmanager安装并设置环境变量;4)利用Flutter自动安装;5)通过JetBrains Toolbox安装IDE。每种方法都提供了详细步骤,包括创建目录结构、设置环境变量、安装必要组件等。最后还提供了一个一键安装脚本,可自动完成下载、解压、配置和基础组件安装。安装完成后可通过sdkmanager命令验证和安装其他所需组件。

wanfangkeji0123的博客 207

BREW平台之hellobrew

本书适用于初学者,主要介绍如何安装BREW开发环境,如何建立一个简单的小程序。

BREW 开发配置

Brew 安装(适用于win2k,winxp等更高版本的系统):     1):下载brew sdk(现在很多地方都有,基本是brew sdk 2.0.0.35,brew sdk 2.0.1.5或更高级,brew3.0及后续版本目前还没有实际进行开发)    2):安装brew sdk(路径不要有空格,根据提示设置环境;同时将ARMMakeBREWApp.dll, BREWIn

Scent of Mobile Application 2378

高通平台简介(BREW SDK简介)

对从事手机开发的工作人员有一定的帮助,特别是初学者,相对高通开发平台有一定理解的人

Brew绿色安装3.01(BrewSDK)

Brew绿色安装3.01(BrewSDK)不是直接安装版本,需要环境配置,不懂得想用就到高通网站下载直接按转的版本

BREW™ SDK入门篇(一)

第一部分 -  预备知识在跟随本文学习相关知识点之前,你需要以下环境:Microsoft Visual C++ 6.0®(或更高版本)1.1版的BREW SDK(或更高版本).要了解系统最低要求,和获得更细节的资料,SDK的安装指导,请查看SDK 1.1的README文件。注意,在这里我假设你已经读过了本系列中之前的一篇文章,“什么是BREW”。在以下的例子中,你需要知道,文件名是非常重要的。确切

mobilechannel的专栏 2701

BREW SDK 2.0中文版

Brew SDK本地下载,大家不必到高通的网站忍受蜗牛般的下载速度了。<BR>这个是要集成到Visual C++里面使用的,准备只学习J2ME的朋友们就不必下载了。

BREW SDK入门篇(二) (转)

BREW SDK入门篇(二) (转)[@more@]BREW™ SDK入门篇(二)XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" /...

ciya3282的博客 213

A股历史数据免费下载终极指南:4000+个股数据一键打包获取

本文提供了获取A股历史数据的完整免费方案,重点介绍了Tushare Pro、AkShare等开源金融数据API的使用方法。通过详细的Python脚本示例,指导读者如何自动化批量抓取、清洗、存储4000多只个股的历史行情数据,并分享数据质量校验与性能优化技巧,助力量化研究与市场分析。

ooo22的博客 2236

【HDR】曝光融合(Exposure Fusion)

在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。

专注人工智能,主攻CV 1万+

新手入门系列(一)—— BREW 入门常识

1. 问: BREW 如何解决为无线手持设备开发应用程序和服务的问题?答: BREW 平台是一个无线手持设备的标准应用程序开发环境,手持设备涵盖的范围从便宜的大众化电话到多功能高端无线设备。 通过该平台,您可以编写能在多种电话上使用的应用程序,而不要求对每个新的电话型号进行应用程序修改。 BREW 解决了当前的编程难题,如不需要电话及其软件的内部知识。 2. 问: 全程创建 BREW 应用程序需要

smilelance的移动开发专栏 2329

AB SCIEX质谱数据分析实战:从PeakView入门到精通

质谱分析是现代生命科学和药物研发中不可或缺的核心技术,它通过测量离子的质荷比来鉴定和定量化合物。其基本原理是将样品离子化后,在电场和磁场中按质荷比分离,最终形成质谱图。这项技术的核心价值在于能够从复杂混合物中高灵敏度、高特异性地获取化合物的定性和定量信息,广泛应用于代谢组学、蛋白质组学、环境监测和药物分析等领域。在实际工作中,高效的数据处理平台至关重要。以AB SCIEX质谱仪生成的.wiff文件为例,其原始数据需要专业软件进行解析。PeakView软件正是这样一个综合平台,它集成了高级数据处理、谱图解析和

weixin_29053577的博客 308

构建可下载的 BREW™ 应用程序的方法

构建可下载的 BREW™ 应用程序的方法2003年9月12日  作者:高通  移动锋行  一旦创建应用程序并在 BREW 模拟器上测试,您将需要编译其 ARM 应用程序。建议将 RealView™ BREW 编译工具与 BREW 协同使用。您也可以使用 ARM 开发者套件 (ADS)。RealVie

mobilechannel的专栏 1855

把入库交货单的 GOS 附件自动带进审批 Work Item:用 SOFM 对象打通 SAP Workflow 附件链路

本文介绍了一种在SAP ECC系统中将入库交货单的GOS附件自动附加到Workflow审批项中的解决方案。通过使用BOR对象引用列表和SOFM业务对象,审批人可直接在Work Item中查看附件,无需返回原单据界面。文章详细阐述了从BUS2015业务对象获取附件连接、转换LOIO_ID为SOFM对象引用,并将附件列表绑定到User Decision步骤的具体实现方法。该方案适用于经典SAP Business Workflow+BOR架构,核心ABAP代码可直接复用,有效解决了审批流程中的附件可见性问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 246

医学图像处理实战:利用OpenSlide解析病理SVS切片的完整解决方案

本文介绍了使用openslide处理病理SVS切片的完整流程,从基础安装到科研应用。主要内容包括:1)SVS切片特点及openslide工具简介;2)环境配置与软件安装;3)基础操作:读取切片、查看信息、可视化不同层级图像;4)进阶操作:坐标裁剪与批量处理;5)科研方向拓展:结合AI模型进行病理分割分类、量化分析及可视化报告。教程提供了完整的代码示例,帮助毕业设计学生快速掌握病理图像分析的核心技能。

m0_71589036的博客 312

创建 BREW 应用程序的方法

您可以按照下述步骤从零开始创建 BREW 应用程序: 1. 下载 BREW SDK™当前的 BREW 1.0、1.1 和 2.0 版本都提供 BREW SDK。 您可以下载任一版本的 SDK 或下载所有三个版本的 SDK。 在安装 BREW SDK 的过程中,将 BREW 目录名选择为 BREW、BREW1_0、BREW1_1 或 BREW2_0。目录名中不应包含空格,也不应包含句点(如

yiyu986 591

SillyTavern 酒馆在 Mac 和 Linux 上的部署教程(含启动器安装方法)

SillyTavern 是一个支持多种大模型聊天接口的本地前端项目,适用于 MacOS 和 Linux 系统。本文提供了两种部署方式:手动安装和使用 SillyTavern Launcher 安装器。手动安装需要先安装 Git 和 NodeJS,然后克隆项目源码并运行启动脚本。使用 Launcher 则更为简便,适合新手用户,能够自动安装依赖和配置环境。部署完成后,用户可以通过浏览器访问本地服务器,加载角色卡片并连接大模型 API,享受二次元角色扮演聊天的乐趣。无论是开发者还是终端用户,都能轻松完成 Sil

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3394

构建可移植 BREW™ 应用程序的方法

1. 使用资源文件 - 将资源与代码分离BREW 应用程序可设计为在多种不同设备上并以多种不同语言执行。 您无需为每台设备和每种语言单独创建应用程序,而只需使用资源编辑器创建多个资源文件(.bar 文件)- 每种设备语言组合一个。 以这种方式将资源与代码分离将使您的 BREW 应用程序可以跨设备和语言进行移植。 您应该使用资源编辑器添加应用程序使用的所有字符串、图像和对话框资源。 然后,将每个资源

smilelance的移动开发专栏 1492

15.1-缓存调试解析

摘要:DSU-120提供L3缓存和监听过滤器(SF)RAM的调试功能,通过CLUSTERCDBG寄存器控制访问。该功能需在集群ON电源模式下使用,且需确保单核访问。寄存器位字段根据读写操作不同,可配置WAY、RAM类型等参数。数据读取分为监听过滤器RAM、标签RAM、数据RAM及MTE标签四种类型,各有特定的位字段解释。配置参数包括切片ID宽度、标签索引宽度等,随缓存大小变化。

baron-周贺贺-代码改变世界ctw 110

STM32入门教程:智能汽车控制

智能汽车是近年来快速发展的领域之一,它结合了嵌入式系统、传感器和通信技术,通过智能化的控制算法和决策系统实现自主导航、避障、环境感知等功能。在这篇教程中,我们将以 STM32 微控制器为核心,通过编写代码案例来介绍智能汽车的控制原理和实现方法。步骤三:决策与执行 最后,我们根据传感器数据做出相应的决策,并执行相应的动作。案例:智能汽车的避障功能 在这个案例中,我们将实现智能汽车的避障功能。感知系统负责感知汽车周围的环境,包括障碍物的距离、车辆的角度等信息。下面我们通过一个具体的案例来演示代码的编写。

2401_85258012的博客 929

新手入门系列(二)——从零开始创建 BREW™ 应用程序

1. 下载 BREW SDK™当前的 BREW 1.0、1.1 和 2.0 版本都提供 BREW SDK。 您可以下载任一版本的 SDK 或下载所有三个版本的 SDK。 在安装 BREW SDK 的过程中,将 BREW 目录名选择为 BREW、BREW1_0、BREW1_1 或 BREW2_0。目录名中不应包含空格,也不应包含句点(如 BREW1.1)。 您应该根据目标手持设备的 BREW 版本,

smilelance的移动开发专栏 1756

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

BREW来龙去脉

在1999年初的一个星期五的下午,BREW的一位创始人、后来出任高通CEO的Paul Jacobs在办公室的白板上画了一个由“手机厂商”、“移动运营商”、“应用开发商”和“用户”四个要素组成的圆圈,说“只要能推出可以使各要素间保持通畅的技术,就应该会形成确保良性循环的生态圈(eco system)” 当时,高通公司还在从事手机业务,不过其实力远不及包括日本厂商在内的亚洲手机厂商。美国的手机服...

hulunberbus 106

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: BREW™ SDK入门篇(一)
下一篇: 关于使Visual Studio 2005/2008开发的MFC程序具有XP风格的问题
everlost
博客等级 码龄19年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值