仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3649|回复: 19
打印 上一主题 下一主题

[学习教程] IOS设计WinCE启动时频仍逝世机的缘故原由剖析仓酷云

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:49:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
维护一个堆栈-(void)pushViewController:(UIViewController*)viewControlleranimated:(BOOL)animated是像堆栈里压一个UIViewController-(UIViewController*)popViewControllerAnimated:(BOOL)animated是从堆栈里弹出来一个UIViewController就算你的程序不是像联系人那样向右推进也可以用UINavigationController 近期,我所卖力的一个嵌进式开辟项目碰到了一点贫苦。这个嵌进式体系用的是ARM处置器+WinCE平台,我此次项目标目标是要把WinCE平台从旧版本移植到WinCE6.0平台上。但了局是这个WinCE体系在启动的时分常常会呈现失利,并且每次失利的缘故原由都莫明其妙和不尽不异。这使到我们开辟团队每一个人在启动WinCE体系时都心有余悸,十分忧虑体系又再一次呈现让人意想不到的失利。这类频仍的启动失利对开辟团队来讲明显是一种让人难以忍耐的熬煎。
 为何会呈现这类情形呢?经由几个早晨夜以继日的加班剖析和研讨,本来主因是体系的引诱历程、内核加载历程、OAL启动历程和硬件驱动加载历程时都存在大概招致的失利的隐忧。本文经由过程对以上要素举行剖析,并提出响应的办理举措。但因为WinCE启动失利会十分取决于硬件平台,因而在详细使用时必要综合思索和剖析。
 一.甚么是WinCE启动历程?
 WinCE体系在启动时一样平常必要三个基础元素:引诱初始化、内核加载和OAL初始化等。它们的感化是要完成引诱历程的初始化和操纵体系实行情况的初始化。个中引诱初始化是由引诱工具BootLoader完成,次要是完成板级、片级的初始化。比方,经由过程设置存放器来完成硬件的初始化,如设置时钟、设置中止把持存放器、完成内存映照和初始化MMU的事情体例等。内核加载是指将操纵体系内核映像从只读存储器加载大概拷贝到体系的RAM中并实行。OAL(OEMAdaptionLayer,即原始设备打造商适配层)是位于操纵体系的内核与硬件之间的适配层,也是毗连体系内核与硬件的关键,它具有屏障硬件设备细节和笼统硬件功效的感化。而OAL初始化则是指经由过程一组函数来表现出0AL屏障和笼统硬件设备的感化。
 别的,假如要WinCE体系成为完全的操纵体系,还得加上硬件驱动程序、硬件接口程序和使用程序组。因而,即便在一个复杂的嵌进式体系里,WinCE体系启动时是必要加载内核和加载很多组件或驱动程序。
 如今让我们来看看WinCE体系在启动时挪用函数的按次:①CPU实行引诱向量,跳转到硬件初始化代码,即Startup函数。②在startup函数完成最小硬件情况初始化后跳转到KernelStart函数,来对内核举行初始化。③Kernelstart函数挪用OEMInitDebugSerial完成对换试串口的初始化;同时挪用0EMInit函数来完成硬件初始化事情和设置时钟、中止;最初,挪用OEMGetExtensionDRAM函数来判别是不是另有别的一块DRAM。至此,内核加载终了。因而可知,WinCE体系启动的重中之重是Startup函数的准确加载,假如这个Startup函数挪用失利,则会使到体系在启动频仍堕落。WinCE启动时挪用函数按次以下图所示:

<br> 因而,WinCE启动失利大概会存在于引诱初始化失利、内核加载失利、0AL函数初始化失利、驱动程序加载失利、组件加载失利和使用程序加载失利。也就是说,WinCE启动失利一方面多是在Startup函数的处置上,比方引诱初始化和OAL初始化。另外一方面还存在于驱动程序和组件自启动的失利上,比方基础的驱动程序、注册表设置或自运转的程序等。
就不克不及被利用。以是,当注册表在启动时加载毛病大概注册表设置有毛病时,也是会招致WinCE体系启动失利的。
 二.招致WinCE启动失利的主因剖析
 WindowsCE在启动时为何会失利呢?这个成绩也一向让我头痛。由于WindowsCE启动失利既有软件要素,也有硬件要素。比方,多是WinCE的启动引诱历程有成绩、大概是内核加载时有成绩、大概是OAL函数挪用的隐性成绩大概硬件设备自己的成绩酿成的。以是,办理起来对照贫苦和对照耗工夫,也是最使我们头疼的事变。
 一样平常来讲,办理和剖析WinCE启动失利有一个准绳,就是"先软后硬"的准绳,也就是说要先剖析软件要素再到硬件要素。本文次要是在ARM微处置器和WindowsCE6.0平台长进行剖析软件要素酿成的失利。
 (1)引诱程序BootLoader招致的失利
 在WindowsCE体系中,全部体系的加载启动义务由BootLoader来完成,BootLoader是在WinCE内核运转之前运转的一段小程序。经由过程这段小程序,能够初始化硬件设备、创建内存空间的映照图和初始化MMU等。从而将体系的软硬件情况带到一个符合的形态,为挪用操纵体系内批准备好情况。因而,只要在引诱程序准确的完成本人的义务后,才会将把持权移交给内核。
 在WinCE平台上,引诱装载程序是在硬件上实行的第一段代码,一般将引诱程序安排在不容易丧失的存储器的入手下手地点大概是体系冷启动时PC存放器的初始值。假如这段小程序代码编写毛病,则体系没法完成第一步的引诱操纵,这是招致启动体系失利的第一个要素。
 ①BootLoader初始化硬件失利
 BootLoader第一个功效是要完成板级和片级初始化硬件,次要是把CPU初始化到一已知形态。在BootLoader目次下,会发明一些.s文件,大概会是init.s大概是reset.s等,如许的文件是CPU加电后开始实行的代码。StartUp函数是BootLoader的出口函数。该函数通常为利用汇编言语编写,与CPU干系十分严密,能完成初始化CPU、内存等中心硬件。然后,BootLoader在平台初始化终了后就能够在不必野生干涉的情形下主动加载WinCE内核了。但假如BootLoader在初始化硬件时失利,就会间接招致体系的启动失利了。
 ②BootLoader加载内核时失利
 一样平常在平台调试终了后,BootLoader就会加载WinCE内核映像,这也是BootLoader的功效之一。WinCE内核映像文件一般叫做nk.bin,它是WindowsCE二进制数据格局文件,不但包括了无效的程序代码,另有依照必定划定规矩到场的把持信息。
 在体系启动时BootLoader能够经由过程两种分歧的体例来加载WinCE内核文件nk.bin。一种是下载形式,另外一种是当地启动形式。当地启动形式也称为自立形式,即BootLoader从方针机上的某个固态存储设备大将操纵体系加载到RAM中运转,全部历程并没有效户的参与。而下载形式则是方针机上的BootLoader将经由过程串口毗连或收集毗连等通讯手腕从主机(Host)下载文件。当BootLoader准确的把nk.bin解压到RAM后,就会把CPU把持权交给CE内核。因而,假如BootLoader处置不妥,便可能会形成加载息争压nk.bin文件的失利,如许天然也就会形成体系启动的失利了。
 (2)OAL招致的启动失利
 OAL(OEMAdaptationLayer)是指OEM适配层,它是位于WindowsCE内核和硬件之间的一层适配层,是OAL各个模块代码被编译后(.lib)和别的内核库链接到一同构成WindowsCE的内核可实行文档NK.EXE。OAL包含了和体系硬件通信的最底层代码,内核是经由过程OAL跟硬件举行交互。逻辑上,OAL是介于CE内核和设备硬件之间的一个代码层,是一个笼统的观点。物理上,OAL和别的一些库一同链接成可实行文件。
 与之前的WinCE旧版本分歧的是,在WinCE6.0中内核(Kenerl)和OEM代码被分红oal.exe、kernel.dll和kitl.dll三个部分,个中启动代码(startup)和OAL层的完成部分不再与内核链接天生NK.exe,取而代之的是启动代码(startup)和硬件相干且自力于内核的OAL层的完成部分编译成oal.exe;而与内核相干且自力于硬件的OAL层代码包括在kernel.dll中,内核有关传输层(KITL)的撑持代码从OAL层分别出来编译成kitl.dll。因而,WinCE6.0的启动只与oal.exe和kernel.dll有关。至于kitl.dll,只要将操纵体系编译成具有KITL功效时才用到。如许做的优点是能够独自晋级OAL,但全体的OAL布局并没有改动。
 ①OAL初始化硬件时失利
 oal.exe是经由过程Startup函数来完成硬件的初始化。一样平常来讲,OAL的启动代码(Startup.s)与该硬件平台的Bootloader的启动代码(Startup.s)是能够共享的。比方,个中PreInit函数次要完成将ARM处置器事情形式切换到办理员形式,同时封闭MMU,并检测体系启动缘故原由。假如是热启动,即在该函数挪用之前已启动过Bootloader的启动代码(Startup.s),相称基础硬件初始化已完成,则可间接跳转到OALStartUp函数中;不然必要举行硬件中止屏障、内存、体系时钟频次、电源办理等硬件的基础初始化历程。
 在StartUp函数初始化CPU等中心硬件并跳转到Main函数后,体系就会转进C言语代码实行情况。这时候Main函数分为3个模块:BLCOMMON、DownloadFunction、FlashFunction。个中BLCOMMON模块是由微软供应的,实行一些逻辑上的功效。而DownloadFunction、FLASHFunction中的函数与硬件平台互相关注。因而,关于每种硬件平台都要将函数的完成举行得当修正,这类修正是必要对硬件十分熟习的。当修正呈现毛病时,就会招致体系启动失利了。
 在硬件平台初始化完成后,oal.exe的启动义务基础完成,余下的启开工作由内核相干且自力于内核的OAL层完成体kernel.dll接受。也就是说,这时候Startup会挪用OALStartUp函数,OALStartUp函数次要完成将OEMAddressTable表传送给内核,然后挪用KernelStart函数跳转到内核。因而,假如此时OAL的启动Startup函数挪用失利的话,就也会招致体系的启动失利了。
 这里必要出格注重的是,Bootloader和OAL中均包括启动Startup函数。它的功效大抵不异,都是要初始化最小硬件情况。Bootloader的启动Startup函数是在为本人的实行筹办硬件情况,OAL的启动Startup函数则是为kernel的实行筹办硬件情况。因为这两种硬件情况请求基础不异,以是它们的代码也有很年夜部分能够互相自创。但应当分明Bootloader与OAL在物理上是自力的,它们并非统一段代码。固然,假如能够断定这一部分在Bootloader已初始化过如热启动,则在OAL中不用反复实行。
 ②OAL出口地位定位掉误招致的失利
 从上述WinCE启动流程可知,在OAL初始化硬件后而在内核启动前,体系是必要挪用KernelStart函数来跳转到内核。因而,这里有一个要点,就是WinCE必要找到OAL的出口地位,然后才干挪用出口函数与全局块举行指针互换,如许内核才干利用OAL层中的信息,一样OAL层也才干会见内核(kernel)导出的函数。
 OAL出口地位函数的挪用实践上是经由过程OEMGLOBAL布局体完成的,实践挪用地位为OEMInitDebugSerial和OEMInit。也就是说,OEMGLOBAL布局体构建了内核和OAL层之间举行通讯的桥梁。OEMGLOBAL布局体界说了OAL层一切必需的函数,该布局体在oemglobal.c文件中被初始化,并会被编译在OEMMain.lib和OEMMain_StaticKITL.lib两个库中。假如OAL链接这两个库,则必需要有准确的该布局体的函数完成体,同时还必要挪用ARMSetup来设置物理地点和非缓冲的假造内存地点的映像、ARM中止向量和内核形式所必要的仓库、挪用OEMInitDebugSerial函数初始化调试串口、挪用OEMInit举行平台初始化等。不然,假如OAL出口地位函数有误,则内核和OAL层之间的会见就会失利,也就会招致体系在启动时堕落和失利。
 三.招致的启动失利的别的相干要素
 (1)驱动程序加载毛病招致的失利
 在调试中,我们还发明体系在启动时实行到OEMInit时也常常会呈现毛病。一样平常来讲,体系挪用OEMInit运转完成以后,就会跳回Private或Public下的代码持续运转,然后再启动device.exe加载各个驱动程序。因为这一段代码是微软供应的default代码,基础上不会有成绩。以是,我们就有来由嫌疑假如加载的驱动程序出了成绩,是也会形成体系启动失利的。一样平常来讲,这些加载的驱动程序次要是BSP中的Audio、Display、SDMMC、Serial、USB等。
 (2)启动时加载设置有误的注册表招致的失利
 在WinCE中注册表在启动过程当中也饰演着十分主要的脚色。与桌面Windows一样,WinCE注册表(Registry)也是一个体系数据库,用来保留使用程序、驱动程序、用户的设定和别的一些体系的设置信息,一般还存储着操纵体系运作和挪用程序的形态信息。比方,每一个用户的设置文件、安装的使用程序和每一个使用程序能够创立的文档范例、文件夹和使用程序图标的属性表设置、体系上存在哪些硬件和正在利用哪些端口等。
 因而,关于硬件外设来讲注册表是一个纪录驱动程序设置和地位的数据库。当WinCE体系在启动时必要启动某些需要的硬件设备时,就会必要利用外设驱动程序。但假如在WinCE中这个外设驱动是自力于操纵体系的,WinCE体系就必要晓得从那里找到它们,比方文件名、版本号、别的设置和信息。因而,注册表上没有此设备的纪录时,它们就不克不及被利用。以是,当注册表在启动时加载毛病大概注册表设置有毛病时,也是会招致WinCE体系启动失利的。

除了在程序加载的时候把我的view加载到他上目前我还没用到过其他的苹果一直很推崇MVC的程序结构视图模型控制器简单说就是视图负责显示内容模型负责所有数据的保存结构或者一些其他数据操作控制器是用来协调视图和模型举车的发动机系统的例子
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-21 15:58:24 | 只看该作者
看《iPhone 4与iPad开发基础教程》,跟着一步步来
因胸联盟 该用户已被删除
板凳
发表于 2015-1-25 06:34:45 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
再现理想 该用户已被删除
地板
发表于 2015-1-26 21:13:14 | 只看该作者
好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。
莫相离 该用户已被删除
5#
发表于 2015-1-31 20:48:09 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
老尸 该用户已被删除
6#
发表于 2015-2-4 22:45:35 | 只看该作者
AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
再见西城 该用户已被删除
7#
发表于 2015-2-10 22:21:34 | 只看该作者
学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。
只想知道 该用户已被删除
8#
发表于 2015-2-14 00:59:03 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
9#
发表于 2015-3-4 03:37:01 | 只看该作者
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
飘飘悠悠 该用户已被删除
10#
发表于 2015-3-6 01:36:04 | 只看该作者
培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。
金色的骷髅 该用户已被删除
11#
发表于 2015-3-8 10:22:55 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
活着的死人 该用户已被删除
12#
发表于 2015-3-15 21:20:36 | 只看该作者
培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。
若相依 该用户已被删除
13#
发表于 2015-3-22 04:54:01 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
透明 该用户已被删除
14#
发表于 2015-3-22 19:10:49 | 只看该作者
学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。
谁可相欹 该用户已被删除
15#
发表于 2015-3-27 00:11:09 | 只看该作者
其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。
蒙在股里 该用户已被删除
16#
发表于 2015-4-17 15:46:09 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
飘灵儿 该用户已被删除
17#
发表于 2015-4-26 02:52:04 | 只看该作者
自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉
深爱那片海 该用户已被删除
18#
发表于 2015-4-27 00:15:53 | 只看该作者
开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦
admin 该用户已被删除
19#
发表于 2015-5-4 02:04:38 | 只看该作者
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
变相怪杰 该用户已被删除
20#
发表于 2015-7-11 20:57:00 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 19:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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