ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:145.15KB ,
资源ID:21560987      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21560987.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式复习资料文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式复习资料文档格式.docx

1、理论上包含文件系统,数据库,系统注册表。GWES:图形窗口系统负责操作系统中与图形界面相关的部分提供基本的绘图功能和窗口管理器。所有的用户输入(键盘,触摸屏等)相关的驱动程序都由GWES.EXE来加载和管理。设备管理:DEVICE.EXE是windows CE中的设备管理器。它负责加载,卸载和管理所有不被GWES.EXE管理的驱动程序,也负责加载所有的总线驱动程序和电源管理DLL,同时向系统提供所有关于驱动的的实现。网络服务:SERVICES.EXE是负责加载系统服务的进程。它们提供一些后台的处理或者为应用程序提供高级的功能。Windows CE中,FTP,HTTP和TELNET都是以系统服务

2、的形式实现。Windows CE提供单独的来启动,停止和操作服务。二、线程与进程的区别 WinCE是一个基于优先级的抢占式多任务操作系统,在WinCE中,每一个运行着的应用程序都是一个进程。在一个进程中可以包含一个或多个线程。进程是程序的一次动态执行实例。进程与程序不同,当程序被WinCE加载到内存并开始执行后就变成了一个实例或者说进程。在WinCE中进程本身不参加系统的调度,也没有优先级和上下文。线程是WinCE中最小的可执行单元。WinCE中真正参加调度的是线程,每个进程在创建的时候都会创建一个主线程作为该进程默认的执行体。从某种意义上说,进程只是线程的容量。线程除了占有内存外,还占有其他

3、资源,例如处理器的寄存器和栈,每个线程都有自己独立的栈。这些资源构成了线程的上下文。进程总是先于线程创建而后与线程撤离,也只有在进程中才有可能创建线程。同一进程中的多个线程共享该进程的地址空间,这些线程可以执行同一段代码、处理同一堆数据,还能共享内核对象的句柄。知识拓展:WinCE最多只支持32个进程同时运行。每个进程占据32MB的虚拟内存空间。由于操作系统本身也被分成多个进程,因此,用户实际可用的进程数只有不到三十个。因此,在构建复杂的应用程序时,如果需要同时处理多个任务,那么应该选择多线程解决方案而不是采用多进程。线程可以运行在核心态和用户态。在核心态,线程可以访问操作系统所有的资源。三、

4、线程的调度线程的调度是抢占式的,WinCE使用的是基于时间片轮转算法对线程进行调度的,也就是说,对于处于就绪状态列队的线程,先分给优先级更高的线程以时间片,当时间片用完后,无论线程是否执行完毕,都退回就绪状态列队中继续等待下一次时间片的分配。WinCE的线程被分为256个优先级,从0255, 0的优先级最高。通常,应用程序能使用的优先级为248255这八个最低的优先级,0247供驱动程序和内核使用,这样做的目的是为了保证系统的可靠性和安全性。应用程序可使用CreateThread( )函数创建一个新线程。结束线程,可以从线程的执行体函数返回,也可以使用WinCE中的ExitThread( )和

5、TerminateThread( )函数结束线程。四、WinCE内核启动过程在NBOOT引导EBOOT后,EBOOT加载并引导WinCE操作系统(NK)。首先,eboot跳转到OAL.exe的startup函数中执行。startup的作用是初始化CPU。startup函数执行完后将跳转到Kernelstart函数中, 这个函数的主要任务就是为WINCE操作系统设置页表并且启用MMU。之后KernelStart函数就会调用ARMInit函数。ARMIint函数有三个主要的任务:是调用KernelRelocate( )函数进行内核全局变量重定位。全局变量重新定位之后,对内核启动所需要的KDataS

6、truct结构体是调用函数FindKernelEntry通过TOC找到kernel.dll的入口点函数地址调用函数ARMInit函数后返回到NKStartup函数。NKstartup函数的主要工作如下:从NK Loader传递过来的KDataStruct结构体数据中获取到供自身启动所需要的数据信息,定位对WINCE6.0特有的OEMGLOBAL结构体的初始化函数OEMInitGlobals地址, 该结构体构建了内核和OAL层之间进行通信的桥梁。调用函数ARMSetup为操作系统内核进程填充虚拟内存0XA00000000XBFFFFFFF 范围的uncachable静态映射区域如果系统启用了KI

7、TL调试功能,则加载KITL模块调用OAL函数执行对目标平台板级硬件的初始化动作。NKStartup函数完成后跳转到第二个KernelStart函数,这里的KernelStart函数与前面的KernelStart函数的属于两个完全不同的函数。这个函数的主要工作有两部分:调用KernelInit函数来初始化内核调用FirstSchedule。FirstSchedule函数为Windows CE操作系统启动过程中最后无条件跳转的一个函数,FirstSchedule调用HandleException函数来让系统进行重新调度,这样就选择了第一个就绪的线程来执行。kernelStart函数完成之后就调用

8、内核初始化KernelInit函数。主要完成在启动第一个线程前对内核进行初始化,主要包括API函数集初始化、堆的初始化、初始化内存池、进程初始化、线程初始化和文件映射初始化等操作。之后跳转到操作系统的第一个启动的任务FirstSchedule函数。 FirstSchedule函数为Windows CE操作系统启动过程中最后无条件跳转的一个函数,windows CE进行第一个调度,实际为一个空闲线程,因为windows CE系统还没有完成启动,只有当windows CE完全启动并进入稳定状态,然后启动文件系统filesys.dll,设备管理device.dll,窗体图像子系统gews.dll和s

9、hell程序 explore.exe。五、WINCE流驱动接口函数参数详解 DWORD XXX_Init ()备注:当驱动被系统加载时,调用此函数。初始化必要的驱动资源,执行内存映射操作,初始化服务线程。BOOL XXX_Deinit()当驱动被系统卸载时,调用此函数。释放初始化时分配的内存资源,停止服务线程。(驱动卸载)DWORD XXX_Open ()当应用程序调用CreatFile()函数时,调用此函数。返回函数句柄为其他IO函数使用,为打开的资源分配必要的资源。BOOL XXX_Close ()当应用程序调用CloseHandle()函数时,调用此函数。释放打开设备时分配的一些内存资源

10、。DWORD XXX_Read ()当应用程序调用ReadFile()函数时,调用此函数。从设备中读取数据DWORD XXX_Write ()当应用程序调用WriteFile()函数时,调用此函数。向设备中写入数据DWORD XXX_Seek ()该函数移动设备的数据指针DWORD XXX_IOControl ()当应用程序调用DeviceIOControl()函数时,调用此函数。提供支持自定义驱动操作机制,大多数驱动系统采用该方法进行设备控制,每个口控制代号表示某种设备操作。void XXX_PowerDown (DWORD hDeviceContext);当系统停止对设备供电,或在调用De

11、viceIOControl()函数时,I/O命令字为IOCTL_POWER_XXX时调用此函数。允许驱动执行使驱动设备进入低功耗模式。void XXX_PowerUp (DWORD hDeviceContext);当系统恢复对设备供电,或在调用DeviceIOControl()函数时,I/O命令字为IOCTL_POWER_XXX时调用此函数。该函数恢复对设备供电XXX_PreClose通知设备管理器把它打开的句柄设置为无效,并唤醒任何正在休眠的线程XXX_PreDeinit释放设备,在设备被卸载时调用六、汇编指令1.数据处理指令 MOV MVN ADD ADC SUB SBC RSB RSC

12、AND ORR EOR BIC CMP CMN TST TEQMOV MOV R1,R0 ;将寄存器R0的值传送到寄存器R1 MOV R1,R0,LSL 3 ;将寄存器R0的值左移3位后传送到R1 LSL 左移M VN MVN R1,R2 ;将R2取反,结果存到R1中 ADD ADD R0,R1,R2 ;R0 = R1 + R2 ADC ADDS R0, R2, R4 ;低32位加,S影响标志位 ADC R1, R3, R5 ;高32位带进位加SUB SUB R0,R1,#6 ;R0 = R1 - 6 SUB R0,R2,R3,LSL#1 ;R0 = R2 - (R3 左移一位) SBC SB

13、C R0,R1,R2; R0=R1-R2-!C,并根据结果设置CPSR的进位标志位,!C表示C取反RSB 实例: RSB R0,R1,R2 ; R0=R2-R1;RSC 实例:RSC R0,R1,R2;R0=R2-R1-!CAND AND R0,R0,#3; 该指令保持R0的0,1位,其余位清零清零ORR ORR R0,R0,#3;该指令设置R0 的0和1位,其余位保持不变置位EOR EOR R0,R0,#3; 该指令反转R0的0和1位,其余位保持不变保持BIC BIC R0,R0,#%1011;该指令清除RO的0和1位,其余位保持不变位清CMP CMP R1,R0 ;将寄存器R1和R0相减,

14、根据结果设置CPSR 标志位CMN CMN R1,R0 ;将R1 和R0相加,根据结果设置CPSR标志位TST TST R1,0xffe ;R1和0xffe按位与,根据结果设置CPSRTEQ TEQ R1,R2; R1 和R2 按位异或 ,根据结果设置CPSR2.乘法MUL MUL R0 ,R1,R2; R0=R1*R2MLA MLA R0,R1,R2,R3; R0=R1*R2+R3SMULL SMUL R0,R1,R2,R3; R0=(R2*R3)低32位 ,R1=(R2*R3)高32位SMLAL SMLAL R0,R1,R2,R3;R0=(R2*R3)低32位+R0 ,R1=(R2*R3)

15、高32位+R1UMULL UMULL R0,R1,R2,R3; 和SMULL一样 只不过操作数为无符号UMLAL UMLAL R0,R1,R2,R3;和SMLAL 一样,操作数无符号3. 指令-数据加载与存储指令LDR R1,R2,#0x08; R2+0x08 R1LDR R1,R2,#0x08 ; R2 R1,R2+8R1STR R1,R2,#8; R1R2+8STR R1,R2,#8; R1R2,R2+8R2LDRB R0,R1 ; R1 R0,并将R0的高24位清零。LDRB R0,R1,8; R18 R0,并将R0的高24位清零。STRB R0,R1 ; 将寄存器R0中的字节数据写入以

16、R1为地址的存储器中。STRB R0,R1,8 ;将寄存器R0中的字节数据写入以R18为地址的存储器中。 LDRH R0,R1 ;将存储器地址为R1的半字数据读入寄存器R0,并将R0的高16位清零。LDRH R0,R1,8 ;将存储器地址为R18的半字数据读入寄存器R0,并将R0的高16位清零LDRH R0,R1,R2 ;将存储器地址为R1R2的半字数据读入寄存器R0,并将R0的高16位清零。 STRH R0,R1 ;将寄存器R0中的半字数据写入以R1为地址的存储器中。LDRSB R0,R1,#4 ;将存储地址为R1+4的有符号字节数读入R0, R0中的高24位设置成该字节数据的符号 LDRS

17、H R6, R2, #2 ;将存储地址为R2+2的有符号半字数据读入R6, R6中的高16位设置成该字节数据的符号位, R2=R2+24、 多寄存器加载与存储指令重要的寻址 :堆栈寻址 57面 快复制寻址 58面重要的程序:见书109面 数据块复制程序. LDM/STM批量数据加载/存储指 STMFD SP! ,R1-R7,LR 数据压栈,将R1-R7,LR中的数据FD压栈 LDMFD SP!,R1-R7,LR 数据出栈,将FD堆栈中的数据送入R1-R7,LR5.状态寄存器传送指令: MRS MRS R0 ,CPSR; CPSRR0 MSR MSR CPSR ,R0; R0CPSR6.转移指令

18、:B BL BX BLX B Label ;程序无条件跳转到标号Label处执行CMP R1,0 ;当CPSR寄存器中的Z条件码置位时,程序跳转到标号Label处执行BEQ Label BL Label ;当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14中7.协处理器指令CDP P3,2,C12,C10,C3,4 ;该指令完成协处理器P3的初始化LDC P5,C1,R0 ;将ARM处理器的寄存器R0所指向的存储器中的字数据传送到协处理器P5的寄存器C1中。STC P3,C4,R0 ;将协处理器P3的寄存器C4中的字数据传送到ARM处理器的寄存器R0所指向的存储器中。MC

19、R P5,5,R1,C1,C2,9 ;将ARM处理器寄存器R1中的数据传送到协处理器P5 的寄存器C1和C2中,协处理器执行操作5和9。MRC P3,3,R0,C4,C5,6 ;协处理器P3执行操作3和6,操作数为C4、C5, 其操作的结果传送到ARM处理器寄存器R0中。8.交换指令 SWP R0,R1,R2 ; R2 R0, R1 R2 SWP R0,R0,R1 ;将R1所指向的存储器中的字数据与R0中的字数据交换。SWPB R0,R1,R2 ;将R2所指向的存储器中的字节数据加载到R0,R0的高24位清零,同时将R1中的低8位数据存储到R2所指向的存储单元。SWPB R0,R0,R1 ;将

20、R1所指向的存储器中的字节数据与R0中的低8位数据交换。8.软件中断指令 SWI 0x02 ;该指令调用操作系统编号为02的系统例程(1)把准备传递的参数通过寄存器进行传递 MOV R0,#0x8 ;使用8号功能段 SWI 0 ;实现中断,不指明调用的功能号 (2)用SWI指令传递中断号 SWI 8 ;实现中断,指明调用的功能号 9.ARM伪指令ADR 小范围的地址读取伪指令Start MOV R0,#10;此指令执行完后,PC=start+8 ADR R1,start;因为PC=当前指令地址值为+8,换成SUB R1,PC ,0x0CADRL 中等范围的地址读取伪指令替换为:ADD R4,#

21、84和ADD R4 ,R4,#59904 LDR 大范围的地址读取伪指令 LDR R1,=0xFFF; 编译LDR R1,PC,OFFSER_TO_LPOOL和 LPOOL DCD 0xFFF两条指令 DCD 分配地址 NOP 空操作伪指令指令的可选后缀S后缀:指令中使用S后缀时,指令执行后程序状态寄存器的条件标志位将被刷新,不使用S后缀时,指令执行后程序状态寄存器的条件标志将不会发生变化。假设R0=0x1, R3=0x3, 指令执行之前CPSR=nzcvqIFt_SVC,分别执行如下指令CPSR的值有何变化? SUB R1, R0, R3 ;R0的值减去R3的值,结果存入R1 SUBS R1

22、, R0, R3 ;R0的值减去R3的值,结果存入R1 影响标志位 分析:执行第1条指令对于标志寄存器的值没有任何影响,因此CPSR的值不变。 执行第2条指令后CPSR=NzcvqIFt_SVC, 因为R0的值减去R3值,结果变成负数,故而N被置位了。 !后缀:如果指令地址表达式中不含!后缀,则基址寄存器中的地址值不会发生变化。指令中的地址表达式中含有!后缀时,指令执行后,基址寄存器中的地址值将发生变化,变化的结果如下: 例3.3 分别执行下面两条指令有何区别? LDR R3, R0,#4 LDR R3, R0,#4!在上述指令中,第1条指令没有后缀!,指令的结果是把R0加4作为地址指针,把这

23、个指针所指向的地址单元所存储的数据读入R3,R0的值不变。第2条指令除了实现以上操作外,还把R04的结果送到R0中。指令的条件执行程序要执行的指令,均保存在存储器中,当计算机需要执行一条指令时,首先产生这条指令的地址,并根据地址号打开相应的存储单元,取出指令代码,CPU根据指令代码的要求以及指令中的操作数,去执行相应的操作。 ADD R4, R3, #1 ADDEQ R4, R3, #1 ADDS R4, R3, #1条件后缀只是影响指令是否执行,不影响指令的内容,如上述ADDEQ指令,可选后缀EQ并不影响本指令的内容,它执行时仍然是一条加法指令这上面的指令没有给出明确的定义 只给出例子 不懂

24、得自己看下书 七、电平转换逻辑标准Vcc电平输出高电平UOH输出低电平UOL输入高电平UIH输入低电平UIL传输带宽TTL5V2.40.62.00.880MHZLVTTL3.3V0.4133MHZ2.5V2.11.70.7166MHZ1.8V1.41.1266MHZCMOS3.50.7UCC0.2UCCNALCOMS2.61.9UCC-0.41.5VPCI0.9UCC0.1UCC0.5UCC0.3UCC33,66,133MHZ经常能考到的是TTL与CM OS的对接。PCI电平可以不用看。八、MMU工作过程 大多数使用虚拟存储器的系统都使用一种称为分页(paging)。虚拟地址空间划分成称为页(

25、page)的单位,而相应的物理地址空间也被进行划分,单位是页框(frame).页和页框的大小必须相同。接下来配合图片我以一个例子说明页与页框之间在MMU的调度下是如何进行映射的: 在这个例子中我们有一台可以生成16位地址的机器,它的虚拟地址范围从0x00000xFFFF(64K),而这台机器只有32K的物理地址,因此他可以运行64K的程序,但该程序不能一次性调入内存运行。这台机器必须有一个达到可以存放64K程序的外部存储器(例如磁盘或是FLASH)以保证程序片段在需要时可以被调用。在这个例子中,页的大小为4K,页框大小与页相同(这点是必须保证的,内存和外围存储器之间的传输总是以页为单位的),对

26、应64K的虚拟地址和32K的物理存储器,他们分别包含了16个页和8个页框。 我们先根据上图解释一下分页后要用到的几个术语,在上面我们已经接触了页和页框,上图中绿色部分是物理空间,其中每一格表示一个物理页框。橘黄色部分是虚拟空间,每一格表示一个页,它由两部分组成,分别是Frame Index(页框索引)和位p(present 存在位),Frame Index的意义很明显,它指出本页是往哪个物理页框进行映射的,位p的意义则是指出本页的映射是否有效,如上图,当某个页并没有被映射时(或称映射无效,Frame Index部分为X),该位为0,映射有效则该位为1。我们执行下面这些指令(本例子的指令不针对任何特定机型,都是伪指令)例1: MOVE REG,0 /将0号地址的值传递进寄存器REG.虚拟地址0将被送往MMU,MMU看到该虚地址落在页0范围内(页0范围是0到4095),从上图我们看到页0所对应(映射)的页框为2(页框2的地址范围是8192到12287),因

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1