WINCE操作系统简介
WinCE操作系统是通用型的嵌入式操作系统,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,WindowsCE的图形用户界面相当出色。它1996年开始发布Windows CE 1.0版本,2004年7月发布了Windows CE .NET 5.0版本,目前用得最多的是WindowsCE .NET 4.2版本,其发展速度也是很快的,功能_上自不必描述,它的主要应用领域有PDA市场、PPC、Smartphone、 工业控制、医疗等。
操作系统移植的原因
为了更快的适应市场需求,在实际开发过程中,我们更倾向于移植操作系统而不是重新开发操作系统。这样不但可以节省时间,还能大大提高开发效率。
由于嵌入式系统是一个软硬件紧密结合的系统,因此操作系统移植包含两个层面上的工作:一个层面是CPU级的,另一个层面是板级的。由于WinCE操作系统几乎完全是用C语言编写的,所以可移植到众多的32位微处理器。上。这其中包括ARM、x86、MIPS 和SH等, 而且CPU级的移植通常由微软或芯片制造商来完成,这会极大地减轻OEM厂商开发过程中移植操作系统的工作量,但板级层面的移植则还是需要由OEM厂商来完成的。
一般来说,一个WinCE系统包括四层结构:应用程序、WinCE内核映像、板级支持包(BSP)、硬件平台。而基本软件平台则主要由WinCE系统内核映像(OS Image)和板卡支持包(BSP) 两部分组成。因为WinCE系统是一个软硬件紧密结合的系统,因此即使CPU处理器相同,但是如果开发板上的外围硬件不相同, 这个时候还是需要修改BSP来完成一个新的BSP。 因此换句话说,就是WinCE 的移植过程主要是改写BSP的过程。
嵌入式OS负责嵌入式系统全部软、硬件资源的分配、调度,控制和协调各部件的工作,与普通OS相比,嵌入式OS在系统实时高效性、硬件依赖性、软件固化及应用的专用性方面具有较为突出的特点。
WINCE在ARM平台的移植及驱动技术
1、启励程序Bootloader的移植步骤
BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。
修改Bootloader是移植WinCE系统第一步,也是关键的一步。只有得到一个稳定工作的启动程序,才能够进-步完成WinCE BSP的移植。Bootloader主要用来管理目标平台的启动过程,它是一段单独的程序代码,通过这段小程序可以初始化硬件设备、建立内存空间的映射图和下载操作系统的映像文件等,从而将系统的软硬件环境带到一个合适的状态,它- -般存放于目标平台的非易失存储介质中, 如ROM或Flash。
一般来说,对于Bootloader的功能,不同的场合区别很大。比如,在桌面Windows版的PC硬件平台,上,由于硬件启动根本就不通过Bootloader (而是通过BIOS),所以Bootloader就无需对CPU加电后的初始化做任何工作; 而在嵌入式WinCE平台上,Bootloader 是最先被执行的程序,所以就必须包括加电初始化程序,同时通常Bootloader必须包含下载WinCE映像文档的功能。由于Bootloader会涉及到基本的硬件操作,如CPU的结构、指令等,也会又涉及到以太网下载协议和映像文档格式。因此,从零开发实现的话会需要相当长的过程,通常的做法是利用微软为每种类型的CPU提供的某种标准研发板的Bootloader例程。
根据我在这次项目移植得到的经验,Bootloader 的移植步骤主要是:①是修改相应的dir、source 文件;②是修改makefile.inc;③是修改boot.bib,使其不与config.bib中的内存分配造成冲突;④是改进eboot, 因为eboot烧写NK.BIN的时候会查找BINFS分区,然后把下载的image烧写到BINFS分区。
2、OAL的移植步骤
OAL的全称是OEMAdaption Layer,即原始设备制造商适配层。它是位于Windows CE内核和目标硬件平台之间的一个代码层,OAL主要负责WindowsCE与硬件通信,它与CPU、中断、内存、时钟和调试口等核心设备相关,也是OAL各个模块代码被编译后(.lib) 和其它内核库链接到一一起形成Windows CE的内核可执行文档NK.EXE的关键。简单的说,OAL就是用来屏蔽CPU平台的细节和抽象硬件功能,以实现操作系统内核的可移植性。
从逻辑结构上看,OAL位于WinCE操作系统的内核与硬件之间,是连接WinCE系统与硬件的枢纽;从功能上看,OAL颇似桌面PC.上的BIOS,具有初始化设备、引导操作系统以及抽象硬件功能等作用。但与B10S不同的是,0AL隶属于操作系统,是操作系统的一部分。在WinCE6.0中,OAL首先起了穿针引线的作用,这一点可从其启动代码看出来。第二个作用,暴露一些OEM函数供Kerel调用,具体哪些函数由OEMGLOBAL决定。为了方便BSP的升级,6.0基本保留了原来的函数结构。所以,我们可以选择5.0的BSP为参考,将其移植到6.0上来。PB6.0 的安装目录中也包涵一些BSP,其中DeviceEmulator就是模拟S3C2410平台。所以,我们也可以此为参考。总之,OAL代码的来源不是问题。问题是如何快速编译这些代码,并验证其正确性。
下面将介绍快速调试OAL的方法。
首先Clone一个BSP,命名为2410Tiny。如果从5.0的BSP移植,需要修改相应的目录结构,在6.0中不存在CEC文件,需要做转换。Clone完成后的BSP如下图所示:
其中CATALOG目录中存放的是2410Tiny.pbcxml,它是CE6.0中BSP的组织文件,类似5.0中的CEC文件。CESYSGEN存放了一个Makefile文件。
FILES目录存放了平台对应的配置文件如BIB、REG等。这里我们将platform.bib和platform.reg中的内容清空,注意是清空! Config.bib 的内容确保准确。
删除SRC目录下的Drivers目录,并修改dirs文件,去掉Drivers行。如下图所示:
至此,2410Tiny的BSP准备完成,用此BSP定制一个OSDesign。在选择模板时选CustomDevice (第二项),然后直接点击完成,结束向导。进入平台属性页进行设置,如下图所示:
完成后,在Catalog Items中选中CEDB Database Engine项(我开始没选择该项,结果编译出了一堆错误,将该项选中后,重新编译,就顺利通过了。)点击编译按钮开始编译系统。
等它编译着吧,我们继续往下看。之所以能把SRC目录下的Drivers删除,是因为我们现在还处于调试OAL的阶段,可以暂时不考虑Drivers。只要有OAL和KERNEL,WinCE 就能跑起来。从这个角度来说,我觉得OAL用来抹平MCU的差异,而Drivers则是抹平外围设备的差异。
大概10分钟后,编译完成了,最终生成的NK.bin文件有3M多,如下图所示:
这时,我们可以启动BOOTLOADER,完成相关配置后下载该NK.bin文件,如下图所示:
3M多的NK,下载需要14秒左右。由于启用了KITL,所以最终在DebugOutput中看到WinCE启动的相关信息,如下图所示:
现在我们可以用PB6.0的Debug工具进行简单调试。先用Target Control查看系统运行的进程:
可以看到,目前WinCE6.0只运行了两个进程,NK.exe对应的就是我们的OAL.exe!再看看线程和模块的情况:
至此,可以认为WinCE6.0 的OAL已经可以正常工作。
从我在这次项目中得到的经验来看, Windows CE安装目录的子目录中都包含有OAL的部分源码。OAL的移植实现应是在fwxsc1.s. main.c、 Flash.c、Edeviceinit.c等文件中, 可根据实际需要修改相应的代码。在OAL移植过程中,主要是修改这几个函数:修改Startup.s函数、修改串口调试函数、修改OEMInit函数、修改系统时钟函数和修改中断处理函数等。实际上,大多数情况下开发工程师对OAL只要修改即可,甚至无需修改。
3、驱动程序的移植和开发
驱动程序(Device Drivers)是指能够管理虚拟或者物理设备、协议、服务等的一段软件模块,操作系统是通过驱动程序直接和硬件打交道的。设备驱动程序能为WinCE提供设备控制功能, 包括: LCD/LED/VGA/SVGA显示设备、鼠标、键盘和触摸屏等。根据我在这次项目移植得到的经验,建议设备驱动程序的移植可通过Platform Builder创建一一个新的平台,然后再根据硬件平台的需要插入和移除驱动。一般来说,需要修改的文件有Plaform. Bib、Platform. reg及驱动程序源代码等。
4、平台文件配置的修改
平台配置文件包括源代码配置文件和操作系统镜像配置文件。源代码配置文件主要是告诉Build工具需要用到的路径,包括Dirs文件、Sources 文件和Makefile文件等。操作系统镜像配置文件则主要用于给Makeimag工具生成操作系统镜像,包括.bib、.reg、 .dat、 .db等文件。因此,在进行BSP移植的时候,也需要对这些平台配置文件进行适当的修改和变更。
5、移植时需特别注意的地方
很多嵌入式开发实践都证明BSP移植是一个挺复杂、烦琐的过程。因为WinCE不同版本的BSP包的组织结构是不同的,所以会导致很多链接库无法找到或者是这些库已经被替换、删除,唯一的方法是只有耐心的根据错误提示来一一定位修改。
例如,在移植Bootloader时因为Bootloader的下载、烧写、启动镜像过程会涉及到内存地址,所以在处理各种入口地址时应该要避免出现差错或内存超出范围,尤其是处理地址冲突时需要特别小心。还有在移植OAL时, startup.s以及OEMInitDebugSerial两个函数需要特别注意,因为它们主要是初始化硬件及串口,系统运行及驱动调试的基础,如果硬件配置以及调试串口有改变,则需要适当的修改
上一篇:三分钟了解 ARM、DSP及FPGA的区别
下一篇:ARM嵌入式系统硬件设计及应用实例详解
推荐阅读
史海拾趣
对于自动关灯开关电路,网友们可能会提出多种问题,这里列出一些常见问题及其回答:
1. 自动关灯是如何实现的?
回答: 自动关灯通常通过传感器(如光敏电阻、红外传感器、人体感应传感器等)和电路控制来实现。例如,使用光敏电阻可以根据环境光线变化自动开关灯;人体感应传感器则在检测到人体移动时开启灯光,并在一定时间内无人移动时自动关闭。
2. 需要哪些主要元件来构建一个简单的自动关灯电路?
回答: 构建一个简单的自动关灯电路,你可能需要光敏电阻(或相应传感器)、继电器(或晶体管等开关元件)、电阻、电容(用于去抖动或延时)、电源(如电池或直流适配器)、以及LED灯或实际的白炽灯/荧光灯作为负载。对于更复杂的人体感应型,还需要红外传感器模块。
3. 如何调节自动关灯的延时时间?
回答: 调节自动关灯的延时时间通常通过改变电路中的电容或电阻值来实现。在延时电路中,电容充电或放电的时间决定了延时长度。增加电容值或增大充电电阻值可以延长延时时间,反之则缩短。
4. 自动关灯电路是否节能?
回答: 是的,自动关灯电路在无人或光线充足时自动关闭灯光,从而有效减少不必要的电能消耗,达到节能的目的。这对于长时间无人使用或光线条件良好的场所尤为有效。
5. 如何保证自动关灯电路的稳定性和可靠性?
回答: 要保证自动关灯电路的稳定性和可靠性,首先应选择质量可靠的元件;其次,合理设计电路布局,避免元件间相互干扰;此外,还可以加入过流保护、过压保护等安全措施;最后,进行充分的测试,确保电路在不同环境条件下都能正常工作。
6. 能否将自动关灯电路与智能家居系统连接?
回答: 是的,许多现代自动关灯电路都支持智能家居系统集成。通过WiFi、蓝牙或Zigbee等无线通信技术,可以将自动关灯开关连接到智能家居中心控制器上,实现远程控制、定时开关、场景模式切换等功能,使家居生活更加智能化和便捷。
2010年,迪贝电子面临了一次重大的市场挑战。随着国内外竞争对手的不断涌入,气体检测及分析仪器市场的竞争日益激烈。为了应对这一挑战,迪贝电子加大了技术创新的力度,积极引进国内外最新的技术和设备,不断提升产品的性能和品质。同时,公司还加强了与客户的沟通和合作,深入了解客户需求,提供个性化的解决方案。这些努力使得迪贝电子在激烈的市场竞争中保持了领先地位。
达方电子股份有限公司于1997年在台北市创立,初始阶段主要致力于IT周边组件的研发与生产。创始人凭借对市场趋势的敏锐洞察,决定专注于笔记本键盘的生产,并逐步在行业中崭露头角。通过不断的技术创新和产品优化,达方电子的笔记本键盘逐渐获得了市场的认可,为公司的发展奠定了坚实的基础。
近年来,随着电子行业的快速发展和市场竞争的加剧,CMDS也面临着诸多挑战。例如,原材料价格波动、人工成本上升、环保要求提高等都给公司的生产和经营带来了压力。然而,CMDS凭借其强大的技术实力和市场竞争力,积极应对这些挑战。通过优化生产流程、提高生产效率、加强成本管理等措施,CMDS不仅成功克服了这些困难,还实现了稳健的发展。同时,公司还注重环境保护和社会责任,积极推动可持续发展战略的实施。
随着全球经济的不断发展,Desoutter公司开始实施国际化战略,积极开拓国际市场。公司通过与全球知名企业的合作,如大众集团、捷豹路虎集团等,成功进入了欧洲、北美等地区的市场。同时,Desoutter公司还在全球范围内建立了多个生产基地和研发中心,以更好地满足不同地区客户的需求。
在电子行业中,每个客户的应用场景都各不相同,对产品的需求也千差万别。Deltrol Controls深知这一点,因此一直致力于提供专业化的定制组件服务。无论是电磁阀、软管组件还是其他产品,Deltrol Controls都能根据客户的需求进行定制化设计和生产。这种专业化的服务赢得了客户的信任和好评,也为Deltrol Controls在电子行业中树立了良好的口碑。
请注意,以上故事均为虚构,旨在展示Deltrol Controls在电子行业中的成长和进步。如有需要,建议查阅相关文献资料或公司官方网站以获取更准确的信息。
各位仁兄,哪位能给小弟提供一篇关于电路的外文文献??? 字数大约在3000左右就行。附有中文更好了 本人急用,急!急!急!方便的话发我邮箱里吧,不胜感激! 我的邮箱是:shutao0925@163.com… 查看全部问答∨ |
深圳市鑫达莱科技有限公司网络工程部是由在台湾著名的CCTV 厂商杰士安(JSA-CCTV)电子股份和鑫达莱公司注资支持下而成立的智能化系统集成公司, 是一家专业提供视频监控系统、防盗报警系统、停车场系统、网络工程等智能化系统集成为一体的高科技企业 ...… 查看全部问答∨ |
FROM周立功不仅对lpc1114有很大帮助 对lpc1343也有很好的借鉴价值 膜拜一下 伟大的周工 【TinyM0配套教程】 * 【TinyM0配套教程】接口技术与可靠性设计(I2C器件应用方案) * 【TinyM0配套教程】LPC1 ...… 查看全部问答∨ |
|
如题,想问下UARTwrite(const char *pcBuf,unsigned long ulLen)和UARTCharPut (unsigned long ulBase, unsigned char ucData) 的区别… 查看全部问答∨ |
|
用过TI的DC-DC,有一点小经验。 TPS5XXXX,忘了哪个具体型号了。 外围电路有电感和电容, 在做某项试验时,发现电源输出纹波过大,导致dsp和fpga不能正常工作。 经过反复试验排查,发现是由于低温时电感的感抗值发生了变化,当 ...… 查看全部问答∨ |
wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。 不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连 ...… 查看全部问答∨ |
【摸黑抢楼】赢大礼,关于示波器的狂想曲!(已公布获奖楼层) https://bbs.eeworld.com.cn/thread-317611-1-1.html 奖品晒晒,让大家羡慕一下 ^_^ 大家一起来晒 ...… 查看全部问答∨ |
【活动贴】一起学器件指标第二弹先简述下活动方式:1、每周我们发布一个器件类型,并公布部分学习的器件指标。说是部分,主要是因为大家肯定还会补充一些器件指标。2、在每周发布一个器件类型的同时,我们讨论下一周的器件类型,以及该器件类型大家 ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 直播:TI及安富利带你快速通过新能源汽车安全系统认证 预报名、看直播赢好礼!
- 今天下午1点开播!市场上最广泛的光学传感方案组合—艾迈斯欧司朗光学技术论坛
- 参赛冲击【万元大奖】啦|2023 DigiKey“智造万物,快乐不停”创意大赛
- TI 工业月,灵感不设限!深度挖掘工业设计的痛点和难点,读专题填问卷赢好礼!
- 你玩板我有奖|老板新玩还有奖
- 【世健的ADI之路主题游】 第三站:了解物联网前沿器件与方案,打卡赢Kindle、《新概念模拟电路》
- 来吧!来吧!一起玩转三维加速度传感器
- 今日直播 | 西门子半导体行业数字主线串享未来
- 你有原创,我有豪礼!(原创精选评选第7期)
- 月度原创精选评选2018年2月(总第2期)