如何开发arm开发板winceOS下运行的程序

如何开发arm开发板winceOS下运行的程序,第1张

开发WinCE应用程序较多使用EVC,其界面与VC6类似

也可以使用VS2005开发

你可能还需要安装一个WinCE的标准SDK

关于调试:

WinCE设备可以通过Activesync与PC相连,然后在开发平台如VS2005下选择一些连接设备,选择Activesync连接方式,这时候,你再选运行调试就会自动下载到已经连接到Activesync的WinCE设备,可以单步调试,到这里就和调试PC上的应用程序没什么区别了

在Wince系统上,软件不能像PC那样直接安装

WINDOS的平板电脑跟普通PC电脑功能是一样的(WINCE系统除外)。

你放心:普通电脑能够装的软件,它全部能够装,而且能够使用。

不现在W系列的平板电脑CPU都在16G左右,安装系统是WIN7或XP系统,总体流程性都不是很好。为WIN7系统比较大,功能太强,能耗高,对CPU内存显卡要求都很高。

如果运行大的程序比如ERPCPCPDM、OA会感觉明显迟缓,因为软件设计是为鼠标设计的,用户的平板体验不好。

Windows CE60启动过程分析

在Windows CE 60中,内核(Kenerl)和OEM代码被分成oalexe、kerneldll和kitldll三个部分,其中启动代码(startup)和 OAL层的实现部分不再与内核链接生成NKexe,取而代之的是启动代码(startup)和硬件相关且独立于内核的OAL层的实现部分编译成 oalexe,而与内核相关且独立于硬件的OAL层代码包含在kerneldll中;内核无关传输层(KITL)的支持代码从OAL层分离出来编译成 kitldll。

从表面上看,好像只是代码重新组合了一下,从帮助 文档中BSP的移植过程看好像也是这么一回事,实际上,整个Windows CE 60内核布局发生了很大的改变。Windows CE 60的启动过程也是如此,如果你想按照Windows CE 50的启动顺序去分析Windows CE 60的启动顺序,可能会走到一个死胡同。主要是因为Windows CE 60在启动过程中调用了kerneldll和kitldll两个动态链接库的原因,而且Windows CE60不再编译生成KernKitlProfexe内核文件。

从Windows CE 60的帮助文档可以看出,WinCE60的启动只与oalexe和kerneldll有关,至于kitldll,只有将 *** 作系统编译成具有 KITL功能时才用到。分析Windows CE 60的启动过程实际上找到编译oalexe和kerneldll的源码位置。

首先看一下将WinCE60编译成诸如 WinCE50所说的基本内核情况,即kernexe。对于oalexe源码位置比较容易找到,因为oalexe是启动代码与硬件相关的OAL层 实现文件编译而成,所以只需在BSP的OAL目录中便能找到。而对于kerneldll,在BSP目录结构中,基本上无法找到kerneldll的编 译文件,所以必须从其他方面着手。

下面为WinCE 60的编译日志输出文件:makeimgout在文件复制过程的一部分:

Copying E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\oalexe to E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\nkexe for debugger Copying E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\kerndll to E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\kerneldll for debugger

从日志输出文件可以看出,在文件复制过程 中,WinCE60编译器将oalexe更名为nkexe,而将kerndll文件更名为kerneldll,也就是说,kerndll文件 的实现部分就是kerneldll的实现体。根据前面的分析,oalexe是与硬件相关独立于内核的OAL层的实现部分,而kerneldll为内 核相关独立于硬件的OAL层的实现部分。同样可以从最后整合后的二进制配置文件cebib文件中看出端倪。

; @CESYSGEN IF CE_MODULES_NK

nkexe E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\oalexe NK SHZ

kitldll E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\kitldll NK SHZ

kerneldll E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\kerndll NK SHZ

; @CESYSGEN ENDIF

而kerndll动态库在整个Windows CE60中没有显式编译过程,即没有一个sources文件有kerndll的编译过程,所以只能从 *** 作系统的编译文件Makefile中寻找其编译 过程。下面看一下$(_PUBLICROOT)\common\CESYSGEN\makefile中的部分内容:

nk::$(NK_COMPONENTS) $(NK_REPLACE_COMPONENTS)

@copy $(SG_INPUT_LIB)\oemstubpdb $(SG_OUTPUT_OAKLIB)

@copy $(SG_INPUT_LIB)\oemstublib $(SG_OUTPUT_OAKLIB)

set TARGETTYPE=DYNLINK

set TARGETNAME=kern

set RELEASETYPE=OAK

set DLLENTRY=NKStartup

set DEFFILE=NO_DEF_FILE

set TARGETLIBS=

set SOURCELIBS=%%NKLIBS%% $(SG_INPUT_LIB)\nkmainlib $(SG_INPUT_LIB)\fulllibclib

$(MAKECMD) /NOLOGO NOLIBC=1 kerndll

从上述代码中可以发现,原来kerndll动态库是从oemstublib编译而来,而且与nkmainlib有关。

在理顺了上述文件的相互之间的关系之后,再来分析Windows CE 60的启动过程可能就比较容易啦。

在理清了上述文件的关系之后,便可以分析任意一款基于ARM微处理器的Windows CE 60的启动过程,现在以深圳亿道电子技术有限公司开发的基于PXA270 ARM开发平台为例,分析Windows CE 60 *** 作系统启动过程。

1、Startup函数:

从Windows CE 60的帮助文档可以看出,WinCE60的启动只与oalexe和kerneldll有关,至于kitldll,只有将 *** 作系统编译成具有 KITL功能时才用到。分析Windows CE 60的启动过程实际上找到编译oalexe和kerneldll的源码位置。

oalexe的通过Startup函数完成硬件 的初始化。Startups代码与该硬件平台的Bootloader启动代码共用,其中PreInit函数主要完成将ARM处理器工作模式切换到管理员 模式、同时关闭MMU,并检测系统启动原因,如果是热启动、即在该函数调用之前已经启动了Bootloader程序,相当基本硬件初始化已经完成,则直接 跳转到OALStartUp函数中;否则需要进行硬件中断屏蔽、内存、系统时钟频率、电源管理等硬件的基本初始化过程。(具体过程见代码的分析)

1

首先我们准备好一机多图程序和WINCE模拟器!WINCE模拟器的使用方法参考上个经验!下面我来告诉大家如何修改一机多图!的配置方法,我们下载好一机多图程序,打开first这个文件!

2

我们看到了这个里面全是代码!呵呵不要怕这个要修改很简单!

GLOBALSETTINGS

ShowMessage = 0

QuitOnDoubleClick = no

X = 0

Y = 0

Width = 800

Height = 480

Arrange = No

BackgroundBitmap = ico\bjbmp

StartUpAnimation = FlyUp

Accelerated = yes

TopMost = no

#---------------------------------

#---------------------------------

TEXT

x = 330

y = 435

Text = 甲A·00001

Color = 1E90FF

Size = 36

Weight = 700

CreateFont

#---------------------------------

#---------------------------------

ICONXPBUTTON

x = 115

y = 70

Command = \SDMMC\NaviOne\NaviOneexe

SizeNormal = 128

SizePushed = 128

ScaleAlpha = 100

IconNormal = Ico\凯立德ico

ScaleAlpha = 100

IconPushed = Ico\凯立德ico

TEXT

x = 130

y = 180

Text =

Color = 000000

Size = 25

Weight = 700

CreateFont

#---------------------------------

#---------------------------------

ICONXPBUTTON

x = 250

y = 70

Command = \SDMMC\RtNavi\RtNaviexe

SizeNormal = 128

SizePushed = 128

ScaleAlpha = 100

IconNormal = Ico\道道通ico

ScaleAlpha = 80

IconPushed = Ico\道道通ico

TEXT

x = 270

y = 180

Text =

Color = 000000

Size = 25

Weight = 700

CreateFont

#---------------------------------

下面还有很多我这里就不写了!

3

其中看到这一段!“Text = 甲A·00001”这里等号后面可以修改成我们的汽车牌照,或者您不想在程序中显示车牌号的话,直接把这段删除就行了。记住修改完毕之后点击确定!最后我们看看效果,见下图,车牌号码已经改成京A 88888了!

#---------------------------------

TEXT

x = 330

y = 435

Text = 甲A·00001

Color = 1E90FF

Size = 36

Weight = 700

CreateFont

#---------------------------------

4

下面我们接着修改导航软件的路径!比如我们内存卡装了多个地图,但是这些代码我们如何配置呢!我们以凯立德为例!

5

找到这段代码,其中的X= 115和 Y=70是这个图标在我们导航界面当中所占的位置!修改这个数值,图标的位置会发生变化!

command=\sdmmc\navione\navioneexe这段代码就是导航的具体安装位置!我们找到你SD卡上凯立德的可执行性文件安装路径填写到这里即可!其他导航比如高德啊、道道通、美行、易图通、领路人、铁将军一样的设置方法,主要是找到主程序的可执行文件的文件夹名字和程序地址即可!

#---------------------------------

ICONXPBUTTON

x = 115

y = 70

Command = \SDMMC\NaviOne\NaviOneexe

SizeNormal = 128

SizePushed = 128

ScaleAlpha = 100

IconNormal = Ico\凯立德ico

ScaleAlpha = 100

IconPushed = Ico\凯立德ico

TEXT

x = 130

y = 180

Text =

Color = 000000

Size = 25

Weight = 700

CreateFont

#---------------------------------

6

例如我的凯立德导航在NaviOne文件夹下的NaviOneexe这个文件所以这里的代码改为command=\sdmmc\NaviOne\NaviOneexe就行了,其他的同样修改!另外说一句,如果不需要那么多图的话,可以把相应的代码段删除就可以了!一般删除一个图标位置的话是下面的代码!见图2,这一段代码就是关于铁将军的图标及其联接方式,如果不用的话整段删除!最后调整每段代码前面X 和 Y的数值即可调整图标位置!最后调整到你满意即可!

先说开发工具,目前用得比较多的开发工具有EVC4(SP4)、VS2005、VS2008和Platform Builder。

其中Platform Builder主要是用来定制 *** 作系统的,虽然也支持编写应用程序,但用得相对较少。记得没错的话,它还得先编译系统,才能新建应用程序的工程。

VS2005和VS2008是微软的集大成开发工具,PB60就是作为VS2005的插件安装的(PB60目前应该是不支持VS2008)。在VS2005中,你可以编译WinCE60的 *** 作系统,也可以编译设备上的应用程序,省去了切换开发环境的麻烦。

EVC4(SP4)即嵌入式的VC,使用起来基本跟VC60一致。

WinCE应用程序的开发相对桌面Windows应用程序的开发有一些特点,如下:

1 UNICODE编码。WinCE中的应用程序只能使用UNICODE编码,桌面系统则支持UNICODE和ANSI码。在移植PC端程序到设备上时需要注意这一点。

2SDK。SDK即软件开发支持包,软件开发都少不了这个,但在WinCE应用程序的开发中尤为重要。因为WinCE系统本身是一个非标的 *** 作系统,它的组件特性和可裁剪性决定了不同的系统支持的API是不同的。而桌面系统相对标准,SDK的作用就弱化了。WinCE中的SDK由系统开发人员在编译完系统后,通过Platform Builder导出。应用程序的开发人员安装此SDK,并编写应用程序,最终将应用程序下载到目标平台上运行测试。一般来说,SDK是应用程序和 *** 作系统之间的纽带,但他们之间也并不是完全一一对应的。譬如,在硬件和 *** 作系统都没调试好时,我们可以先用标准的SDK或者自己定制一个模拟器的SDK进行应用程序的开发,等硬件和系统调试完成后再做联调。应用程序基于新的SDK编译一下,甚至无需重新编译也可运行。当然,一个应用程序在别的设备上跑得很好,但到另外一个设备上却不能工作也是很正常的。就像很多WM上的应用程序在WinCE中不能跑一样,虽然内核相同,但系统不同,支持的API也是不同的。

最后说说开发语言,WinCE应用程序的开发有Win32、MFC和Managed等几种方式。对于开发者来说,选择使用哪一个主要看效能,开发的效能和运行的效能。根据能量守恒定律,开发效能和运行效能应该是一个此消彼长的关系。呵呵,跟能量守恒定律有关系么?勉强找个有力证据吧。托管代码的开发效率很高,但执行效率相对就低了。这在物资还不是极大丰富的嵌入式系统上,就显得尤为突出,实时性也得不到保证。MFC是基于Window32的一个基础类库,封装了很多Win32的API,方便开发者使用,但它也是有缺点的,似乎也没再更新。Win32是这三者中最底层的一个,编译出的程序小,没有额外的包袱,运行起来快,所以开发的难度自然就大了,代码量也很大。我们在开发应用程序时应根据实际情况选择更合适的。

WindowsMobile和WindowsCE是两回事,但是Mobile用的是CE内核,因此部分软件也可以不加修改便可在两个系统中通用,如果要开发WinCE应用程序,你需要安装WinCE50的SDK,如果目标系统是WinCE421的话,你可以去微软的网站上下载eVC40来进行开发,以下文字就不用再看了

WinCE50或更高版本SDK的来源有这么几种方式:

1通过PlatformBuilder50裁剪出自己所需要的WinCE50内核,然后再用PlatfromBuilder通过内核导出相应的SDK安装包,这个安装包就可以在电脑上使用了,这种方法主要是WinCE50的内核开发人员生成SDK开发包用的,一般而言WinCE应用软件的开发人员不需要使用PlatformBuilder。

2厂家提供,如果是基于其他厂家已有的WinCE设备进行开发,那么厂家会给你提供相应的SDK的

3上网下载别人已经生成好的SDK,如果只是为了学习WinCE的应用软件开发,并不涉及具体硬件,这个方法也可以

SDK安装好后,新建项目时就能选择WinCE项目了

Wince是嵌入式平台的 *** 作系统。wince之于嵌入式硬件,正如Windows XP,Vista之于PC。

Wince上面当然可以装其他软件。你的导航软件正是运行在这个 *** 作系统之上的。

但是安装软件必须是Wince程序。普通PC软件无法在Wince上运行。一般通过吧软件拷到SD卡上然后插到设备的SD插槽上运行,或者通过数据线与PC进行同步。

希望对你有帮助。

以上就是关于如何开发arm开发板winceOS下运行的程序全部的内容,包括:如何开发arm开发板winceOS下运行的程序、wince系统能安装哪些软件(wince系统安装软件教程)、wince6.0启动异砦新手求助等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10622866.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存