嵌入式系统重点整理_第1页
嵌入式系统重点整理_第2页
嵌入式系统重点整理_第3页
嵌入式系统重点整理_第4页
嵌入式系统重点整理_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.嵌入式系统:定义:以应用为中心、以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式系统是应用于特定环境下执行面对专业领域的应用系统,其特点为:系统内核小,可裁剪;专业性强;系统精简;通常要求有高实时性的操作系统;嵌入式系统开发需要专门的开发工具和环境;一旦进入市场,就具有较长的生命周期。嵌入式系统的典型组成:按模块:中央处理器、外设、操作系统、应用按体系结构:硬件层、中间层、操作系统、功能层早期的嵌入式系统包含3个部分:硬件平台、嵌入式实时操作系统和应用程序;经过不断发展,在硬件平台和操作系统之间演化出了新的一层硬件抽象层;硬件抽象层屏蔽了底层硬件的多样性,操作系统不再直接面对具体的硬件环境,而是由硬件抽象层代表的、逻辑上的硬件环境。板级支持包是大多数商用嵌入式操作系统实现可移植性所采用的一种方案,是硬件抽象层的一种实现。2.嵌入式系统软件体系结构:早期的嵌入式系统包含3个部分:硬件平台、嵌入式实时操作系统和应用程序;经过不断发展,在硬件平台和操作系统之间演化出了新的一层硬件抽象层;硬件抽象层屏蔽了底层硬件的多样性,操作系统不再直接面对具体的硬件环境,而是由硬件抽象层代表的、逻辑上的硬件环境。板级支持包是大多数商用嵌入式操作系统实现可移植性所采用的一种方案,是硬件抽象层的一种实现。3.嵌入式系统的分类:按表现形式分(硬件范畴) :芯片级嵌入(含程序或算法的处理器),模块级嵌入(系统中的某个核心模块),系统级嵌入。按实时性要求分(软件范畴) :非实时系统(PDA),软实时系统,硬实时系统。嵌入式系统软件一般由嵌入式操作系统和应用软件组成 ;操作系统是连接计算机硬件与应用程序的系统程序,可分为:顺序执行系统(单任务系统,如DOS),分时操作系统:其特点包括多路性、交互性、“独占性”和及时性(UNIX),实时操作系统(RTOS):计算的正确性不仅取决于程序的逻辑正确性,更取决于结果产生的时间 ,根据对产生时间要求的严格程度又可分为:硬实时操作系统,软实时操作系统。4.嵌入式操作系统有RTOS和DTOS之分,说明RTOS的实时性含义答:RTOS意指实时操作系统,RTOS的实时性并非是简单的要求嵌入式操作系统响应速度快,而是要求嵌入式操作系统对外部事件和软件任务请求的响应事件具有严格的确定性。5.实时操作系统的特点:计算的正确性不仅取决于程序的逻辑正确性,更取决于结果产生的时间 。6.冯诺伊曼与哈佛结构:冯诺依曼结构:采用二进制代码表示数据和指令;采用存储程序工作方式,数据和程序都存储在存储器中 ;由存储器、运算器、控制器、I/O设备组成计算机硬件系统;总结:程序存储,程序执行。哈佛结构:采用分别用于存储数据和程序的两个存储器,两条总线的系统结构;各个部件有专用的数据、地址与控制总线;CPU和外设DMA的操作引入了某种并行度;区别:地址空间和数据空间分开与否。哈佛结构与冯诺依曼结构的区别:使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,这两条总线之间毫无关联;冯诺依曼体系结构的特点:数据与指令都存储在存储器中,被大多数计算机所采用,ARM7 冯诺依曼体系。哈佛体系结构的特点:程序存储器与数据存储器分开,指令和数据可有不同的数据宽度 ,提供了较大的数据存储器带宽,适合于数字信号处理,大多数DSP都是哈佛结构,ARM9是哈佛结构。7. 中断的重要性:响应突发事件(异步事件)。对计算机发展的影响:使得计算机能解决客观世界的突发事情,如实时系统。使轮询系统到事件驱动系统成为可能。8. 编址方式:独立编址(I/O具有与内存不同的地址空间),统一编址(I/O与内存在同一地址空间)9. 指令:面向程序员(软件)。微指令:复杂指令由微指令有序序列实现(在CPU中实现)。区别:每条微指令所代表的都是很简单的基本操作;所有微指令的格式都很规则、简单、易于解码;取微指令的速度很快;微指令的执行速度很快。10. 机器码是是计算机能理解和执行的唯一语言.机器码的有序集合对应于高级语言的语句.机器码是指令的二进制表示形式.11. CISC:复杂指令集(Complex Instruction Set Computer): 具有大量的指令和寻址方式; 大多数程序只使用少量的指令就能够运行。CISC的缺点:20与80的问题(20的简单指令利用率达到80,80的复杂指令的使用概率只有20)指令复杂度对处理器VLSI实现性能的影响(CISC中指令长度不统一,高性能的VLSI实现难度大)软硬件的协同设计问题(CISC多采用微指令技术,增强指令系统的功能,简化了目标软件的设计,但增加了硬件(微程序)复杂度,程序执行时间不一定短)。RISC:精简指令集(Reduced Instruction Set Computer) : 只包含最有用的指令, 确保数据通道快速执行每一条指令, 使CPU硬件结构设计变得更为简单。RISC的特点:硬连线的指令译码逻辑(RISC指令格式和长度固定,指令类型少,功能简单,寻址方式少,译码控制器可采用规则的硬布线逻辑(组合逻辑型),CISC大多使用微码ROM进行指令译码(存储逻辑型);减少指令和寻址方式的种类;大多数指令单周期执行;分开的Load/Store结构的存取指令;固定指令格式。RISC的优势:处理器管芯面积小,开发时间少,开发成本低,容易实现高性能。RISC的缺点:与CISC比代码密度低,不能执行X86代码,给优化编译程序带来了困难。12.ARM嵌入式处理器的指令系统采用RISC体系,RISC有何主要特点:答:1.采用固定长度的指令格式,指令规整,简单; 2.使用单周期指令; 3.大量使用寄存器。13.ARM的特点:小体积、低功耗、低成本、高性能,Load/Store体系结构,16位/32位双指令集,3地址指令格式,全球众多的合作伙伴(自己只设计高性能的IP核,授权给别人生产)14.体系结构的演变:T变种:16位压缩指令集;M变种:增强型乘法器,产生全64位结果:(32X3264or32X32+64 64);E变种:增强型DSP指令集,包括全部算法操作和16位乘法操作;J变种:支持新的JAVA,提供字节代码执行的硬件和优化软件加速功能;SIMD变种:媒体功能扩展;D变种:支持片上Debug;I变种:EmbededICE硬件,以支持片上断点和观察点;S:表示可综合的“软”IP核15.在ARM嵌入式处理器系列中有ARM7TDMIMI,ARM9TDMI的CPU核,解释其中“TDMI”的含义。答:T:支持16位的Thumb指令集; D:支持片上Debug; M:片内嵌有硬件乘法器; I:嵌入式在线仿真ICE。16.ARM微处理器的两种工作状态:第一种为ARM状态:此时处理器执行32位的字对齐的ARM指令;第二种为Thumb状态:此时处理器执行16位的、半字对齐的 Thumb 指令;在程序的执行过中,可随时在两种工作状态之间切换17.ARM七种工作模式:用户模式(usr):ARM处理器正常的程序执行状态;快速中断模式(fiq):用于高速数据传输或通道处理;外部中断模式(irq):用于通用的中断处理;管理模式(svc):操作系统使用的保护模式;指令终止模式(abt):当指令预取终止时进入该模式;数据访问终止模式(abt):当数据访问终止时进入该模式,可用于虚拟存储及存储保护;系统模式(sys):运行具有特权的操作系统任务;注:除了用户模式外,其它模式都是特权模式。18.ARM异常类型:当正常的程序执行流程发生暂时的停止时,称之为异常。复位:当处理器的复位电平有效时,产生复位异常,程序 跳转到复位异常处理程序处执行;未定义指令:当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真;软件中断:该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用;指令预取中止:若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常;数据中止:若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常;IRQ(外部中断请求):当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务;FIQ(快速中断请求):当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常.异常向量表:(地址,异常,进入模式):(0x0000,0000, 复位,管理模式)(0x0000,0004,未定义指令,未定义模式)(0x0000,0008,软件中断,管理模式)(0x0000,000C, 中止(预取指令),中止模式)(0x0000,0010,中止(数据),中止模式)(0x0000,0014,保留,保留)(0x0000,0018,IRQ)(0x0000,001C,FIQ,FIQ)异常优先级:1(最高):复位;2:数据中止;3:FIQ;4:IRQ;5:预取指令中止;6(最低):未定义指令,SWI。19.ARM嵌入式处理器支持7种一场,对于复位(Reset)异常,ARM嵌入式处理器是如何处理的,复位异常向量地址是什么?答:复位异常通常是由系统加电或硬件强制使处理器的复位引脚出现负跳变而产生的,当处理器复位引脚出现负跳变时,当前程序运行程序跳转到复位处理程序处执行,并将复位向量地址是0x0000 0000开始的连续4个字节。20.ARM微处理器共有37个32bit寄存器,其中R13(SP),LR(R14),R15(PC),R16(CPSR)的有何用途,SPSR有何用途?答:R13是一个32位的通用寄存器,通常用作堆栈指针寄存器; R14是一个32位的通用寄存器,亦称连接寄存器,用于保存子程序的返回地址; R15程序计数器,控制程序的执行顺序; CPSR:是当前程序状态寄存器,用于保存条件码标志,中断标志和运行模式控制位; SPSR:是CPSR的备份寄存器,用于保存CPSR的值。21. LDR R0, R1; 压栈指令:R1R0; STR R0, R1; 出栈指令:R0R1;LDR R0, R1, #4; 前变址寻址:R1+4R0,不影响R1的值LDR R0, R1,#4!; 自动变址模式:R1+4R0, R1+4LDR R0, R1,#4; 后变址模式:R1R0,然后R1+4ARM存储器访问指令:单寄存器存取指令(LDR,STR)(字32位,半字16位,字节8位),多寄存器存取指令(LDM,STM)。存储器和寄存器交换指令:SWP跳转指令:B:跳转到指定的地址执行程序; BL:将下一条指令的地址拷贝到R14(即LR)链接寄存器中然后跳转到制定地址运行程序;BX:带状态切换的跳转指令(ARMThumb,ThumbARM); BLX:带链接和状态切换的跳转指令。跳转的范围是+-32MB。RSB:逆向减法指令:RSB R0,R1,R2:R2-R1R0RSC:带进位的逆向减法指令:BIC:清楚操作数1中在操作数2中为1的那些位:BIC R0, R0, #0x0b:将0,1,3位置0CMN:将操作数2取反后再与操作数1比较:CMN R1, R0MLA:操作数1*操作数2+操作数3目的寄存器:MLA R0,R1,R2,R3;R1*R2+R3R022.常见的嵌入式系统存储设备:(1).随机存取存储器:SRAM静态RAM;DRAM动态RAM:ASDRAM 异步动态RAM,SDRAM同步动态RAM (2).只读存储器:掩膜式ROM ;PROM可编程ROM;EPROM可擦除、可编程;EEPROM电可擦除可编程;Flash Memory(闪速存储器) (3).静态RAM:数据存入静态RAM后,只要电源维持不变,其中存储的数据就能够一直维持不变 ;读写速度快;由触发器构成基本单元,接口简单;存储单元结构复杂,集成度较低;常常用作高速缓冲存储器 (4).DRAM动态RAM:依靠电容存储信息,需要不断刷新;读写速度慢;集成度高,成本底;地址引脚少,地址总线采用多路技术,接口复杂 (5).Flash memory:保密性好。分类:Nor Flash,Nand Flash (6).Nor Flash:芯片内执行;读速度快(比较Nand Flash);写入与擦除速度很低;擦除按块进行,写入前必须先擦除;带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节;常用来存储代码。Nand Flash:NAND读和写操作按512字节的块进行;写入与擦除速度比Nor Flash快;擦除按块进行,写入前必须先擦除;NAND的擦除单元更小,相应的擦除电路更少;NAND器件使用复杂的I/O口来串行地存取数据;常用来存储数据23.液晶显示:液晶显示器(Liquid Crystal Display)LCD具有省电、体积小、低成本、低功率等特点,被广泛应用于嵌入式系统中.液晶:以液态形式存在的晶体.有电流流过,液晶分子会以电流的方向进行排列;没有电流时,平行排列。如果提供带有细小沟槽的外层,液晶会顺着槽排列。液晶能使光线发生扭转. 液晶的这些特点使得它可以被用来当作一种开关 。液晶单元的底层是由细小的脊构成的,这些脊的作用是让分子呈平行排列,上表面也是如此,在这两侧之间的分子平行排列;不过当上下两个表面之间呈一定的角度时,液晶成了随着两个不同方向的表面进行排列,就会发生扭曲。结果便是这个扭曲了的螺旋层使通过的光线也发生扭曲。 24.触摸屏由触摸检测部件和触摸屏控制器组成:触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触摸屏控制器;触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU 。按照触摸屏的工作原理和传输信息的介质,我们把触摸屏分为四种:1.电阻式:利用压力感应进行控制。 2.电容感应式:利用人体的电流感应进行工作的。 3.红外线式:利用X、Y方向上密布的红外线矩阵来检测并定位用户的触摸。 4.表面声波式:表面声波是超声波的一种,在介质(例如玻璃或金属等刚性材料)表面浅层传播的机械能量波。通过两个方向上声波能量缺口来定位,并可检测压力.25.实时操作系统:采用实时操作系统(Real Time Operation System)的计算机系统为实时系统.它是一个能够在指定或确定的时间内完成系统功能及对外部事件在同步或异步时间内作出响应的系统.一般只有最高优先级的任务才能占有CPU的控制权。26.实时操作系统分类:具有强实时特点的嵌入式操作系统:强实时系统,其系统响应时间在毫秒或微秒级(数控机床);具有一般实特点的嵌入式操作系统:一般实时系统,其系统响应时间在毫秒几秒的数量级上,其实时性的要求比强实时系统要差一些(电子菜谱的查询);具有弱实特点的嵌入式操作系统:弱实时系统,其系统响应时间约为数十秒或更长(工程机械)。27.任务的基本状态:运行状态:该任务已获得运行所必需的资源,它的程序正在处理机上执行;阻塞状态:任务正等待着某一事件的发生而暂时停止执行。这时,即使给它CPU控制权,它也无法执行,则称该任务处于阻塞态;就绪状态:任务已获得除CPU之外的运行所必需的资源,一旦得到CPU控制权,立即可以运行。任务状态转换:在任务运行过程中,由于任务自身进展情况及外界环境的变化,这三种基本状态可以依据一定的条件相互转换:就绪运行:调度程序选择一个新的进程运行;运行就绪:运行进程用完了时间片或运行进程被中断,因为一高优先级进程处于就绪状态;运行等待:当一进程必须等待某个事件时(OS尚未完成服务,对一资源的访问尚不能进行,初始化I/O 且必须等待结果);等待就绪:当所等待的事件发生时 。28.可重入型函数:可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中。一个不可重入型函数的例子:int Temp;Void swap (int *x,int*y) Temp=*x; *x=*y; *y=Temp; 一个可重入型函数的例子:Void swap (int *x,int*y) int Temp; Temp=*x; *x=*y; *y=Temp; 29.代码的临界区:代码的临界区也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。在进入临界区之前要关中断,而临界区代码执行完以后要立即开中断(在任务切换时,地址、指令、数据等寄存器堆栈保护)。30.临界段:同其它内核一样,mC/OS-II为了处理临界段代码,必须关中断,处理完毕后,再开中断。微处理器一般都有关中断/开中断的指令。mC/OS-II定义了2个宏来关中断和开中断:OS_ENTER_CRITICAL(),OS_EXIT_CRITICAL()。31.实时操作系统(RTOS)特征:一,高效的任务管理(1.支持多任务,2.优先级管理,3.任务调度:基于优先级的抢占式调度、时间片轮转调度的算法,4.支持快速而确定的上下文切换);二,快速灵活的任务间通信(1.信号量:二进制、互斥、计数器,2.通信机制:消息队列、管道等);三, 高度的可剪裁性;四,动态链接与部件增量加载;快速有效的中断和异常事件处理;五,优化的浮点支持;六,动态内存管理;七,系统时钟和定时器。32.任务状态休眠态:任务仅驻留在程序空间,还没有交给mC/OS-II管理;就绪态:任务一旦建立,这个任务就进入就绪态,准备运行;运行态:任何时刻只能有一个任务处于运行态;等待状态:正在运行的任务可能需要等待某一事件的发生或将自己延迟一段时间;中断服务态:正在运行的任务是可以被中断的,除非该任务将中断关闭;被中断了的任务进入了中断服务态。33. OS_ENTER_CRITICAL():关中断; OS_EXIT_CRITICAL():开中断OSTaskDel(OS_PRIO_SELF); 当任务结束时删除自己使任务进入就绪态:prio是任务是优先级:OSRdyGrp |=OSMapTblprio3;OSRdyTblprio3 |=OSMapTblprio & 0x07;使任务脱离就绪态:If(OSRdyTblprio3 &= OSMapTblprio & 0x07)= 0) OSRdyGrp &= OSMapTblprio3;任务的调度:任务级的调度由函数OSSched()完成,中断级的调度有函数OSIntExt()完成OS_TASK_SW():任务的切换OSSchedlock():给调度器上锁,OSLockNesting跟踪该函数被调用的次数OSSchedUnlock():给调度器解锁,给OSLockNesting值减1OSIntNesting:中断嵌套计数器OSIntEnter():将OSIntNesting加1OSIntExit():中断结束返回函数,将OSIntNesting减1OS_TaskIdle:创建空闲任务OSTaskStat():统计任务,统计运行时间,运行1次/秒,计算当前的CPU利用率OSInit():系统初始化函数OSStart():mC/OS-II的启动,多任务的启动/多任务调度OSTaskcreat( ):任务建立函数/OSTaskCreateExt()OSTaskCtr:任务计数器OSTaskChangePrio():改变任务优先级OSTaskSuspend():挂起任务OSTaskResume():恢复任务OSTaskQuery():获取任务的信息OSTimeDLY():时间延迟函数OSTimeDlyResmue():延时恢复函数OS_EventWaitListInit(OS_EVENT *pevent): 初始化一个事件控制块,只初始化等待事件任务列表OS_EventTaskWait():使一个任务进入等待某事件的状态OS_EventTaskRdy():使一个任务就绪OS_EventTO():因为等待超时而使一个任务进入就绪态OSSemCreate():建立一个信号量OSSemDel():删除一个信号量OSSemPend:P操作OSSemPost:V操作OSSemAccept:无等待的请求一个信号量OSSemQuery:查询信号量当前状态34. 将任务置于等待事件任务列表:pevent-OSEventGrp|=OSMapTblprio3; pevent-OSEventTblprio3|=OSMapTblprio&0x07;使任务脱离等待状态:if(pevent-OSEventprio3&=OSMapTblprio&0x07)=0)pevent-OSEventGrp&=OSMapTblprio3; 查找优先级最高的任务:y=OSUnMapTblpevent-OSEventGrp; x=OSUnMapTblpevent-OSEventTbly; prio=(y3)+x;35.嵌入式系统实验中用的硬件平台是以EP7312微处理器为核心的实验系统,EP7312是ARM7微处理器家族中的一种,其内嵌JTAG,ICE,MMU,Cache,说明其含义与用途答:JTAG是一种国际标准测试协议,主要用于芯片内部测试及系统仿真测试 MMU意指存储单元管理,用于实现虚拟地址空间到物理存储空间的映射,存储器访问权限的控制,设置虚拟存储空间的缓冲特性 CACHE称高速缓冲存储器,主要用来提高存储系统的性能,数据的高速读写36.以ARM处理器为核心的嵌入式系统的程序设计中要遵守ATPCS,解释ATPCS答:ATPCS 最早是为方便ARM程序与Thumb程序之间调用规定的一些规则,而ATPCS的扩充班还规定了C语言与汇编语言的相互调用规则37.在嵌入式系统的软硬件构架中,硬件抽象层(HAL)或板级支持包(BSP)的作用是什么?答:硬件抽象层(HAL)或板级支持包(BSP)的作用是什麽 硬件抽象层位于操作系统内核与硬件电路之间的接口,其主要目的是将硬件抽象话,即通过程序来控制所有硬件电路操作,这就使得系统的设备驱动程序与硬件设备无关,提高系统可移植性 板级支持包是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统的一部分,主要是实现对操作系统的支持,为上层驱动程序提供访问硬件寄存器的函数包,使之能够更好的运行于硬件主板38.什么是函数的可重入特性?它对多任务调度有何影响?如何将非重入函数改写为重入函数?答:如果一个函数任何时候都可被中断,一段时间后又可以运行而相应的数据不会丢失该函数具有可重入性 可重入函数可被一个以上的函数调用,而不必担心数据被破坏 对非重入函数,将其中的全部变量改为局部变量或使用信号量技术,可是其具有可重入性39.在嵌入式系统运行中,为何要设置临界段,Uc/OSII中实现临界段设置的两个函数是什么?答:为了保护某些代码在运行中不被中断,需要将其设置为临界段,系统在进入临界段之前要关中断,而临界段代码执行完后要立即开中断, Uc/OSII中实现临界段设置的两个函数是OS-ENTER-CRITICAL()和OS-EXIT-CRITICAL()40. 什么是ATPCS答:arm-thumb procedure call standard,PCS规定了应用程序的函数可以如何分开地写,分开地编译,最后将它们连接在一起PCS规范强制实现如下约定:调用函数如何传参;被调用函数如何获取参数,以何种方式传递函数返回值寄存器的使用规则:子程序间通过寄存器R0R3来传递参数和结果;在子程序中,使用寄存器R4R11来保存局部变量(Thumb用R4R7 );寄存器R12用作子程序间scratch寄存器(用于保存SP,在函数返回时使用该寄存器出栈),记作ip;寄存器R13用作数据栈指针,记作sp;寄存器R14称为连接寄存器,记作lr;寄存器R15是程序计数器,记作pc。它不能用作其他用途数据栈使用规则 :ATPCS规定数据栈为FD(Full Descending )类型,并且对数据栈的操作是8字节对齐的参数传递规则:参数个数可变的子程序参数传递规则:参数不超过4个时,使用R0R3来传递,参数超过4个时,可以使用数据栈来传递;参数个数固定的子程序参数传递规则:有关浮点运算;子程序结果返回规则:结果为一个32位整数时,可以通过寄存器R0返回,结果为一个64位整数时,可以通过寄存器R0和R1返回,依次类推。C和汇编混合编程中需遵循一定的ATPCS规则:汇编程序的设计要遵守ATPCS,保证程序调用时参数的正确传递。 在汇编程序中使用EXPORT伪操作声明本程序,使得本程序可以被别的程序调用。 在汇编程序中使用IMPORT伪操作声明将要调用C程序。 在C语言程序中使用extern关键词声明该汇编程序。 41. c/OS-II的移植答:1、设置OS_CPU.H中与处理器和编译器有关的代码:与编译器有关的数据类型;中断屏蔽OS_ENTER_CRITICAL()和退出中断屏蔽的宏定义OS_EXIT_CRITICAL();栈增长方向标志OS_STK_GROWTH 2、用汇编在OS_CPU_A.S文件中编写与微处理器相关的函数:调用优先级最高的就绪任务函数OSStartHighRdy();任务级的任务切换函数OSCtxSw();中断级的任务切换函数OSIntCtxSw() 3、用C语言编写6个和操作系统有关的函数(OS_CPU_C.C中)OSTaskStkInit()(这个必须移植,初始化任务堆栈用),OSTaskCreateHook(),OSTaskDelHook(),OSTaskSwHook(),OSTaskStatHook(),OSTimeTickHook()1.程序示例:数据块复制: 本程序将数据从源数据区src复制到目标数据区dst。复制时,以8个字为单位进行。对于最后所剩不足8个字的数据,以字为单位进行复制。(这时程序跳转到Copywords处执行)在进行以8个字为单位的数据复制时,保存了所用的8个工作寄存器。AREA Block,CODE,READONLY ;设置本段程序的名称(Block)及属性unm EQU 20 ;设置将要复制的字数ENTRY ;标识程序入口点start LDR r0,=src ;r0寄存器指向源数据区src LDR r1,=dst ;rl寄存器指向目标数据区dst MOV r2;unm ;r2指定将要复制的字数 MOV sp,0x400 ;设置数据栈指针(r13),用于保存工作寄存器数值Blockcopy ;进行以8个字为单位的数据复制 MOVS r3,r2,LSR 3 ;需要进行的以8个字为单位的复制次数BEQ copywords ;对于剩下不足8个字的数据,跳转到copywords,以字为单位复制 STMFD sp!,r4-r11;保存工作寄存器Octcopy LDMIA r0!,r4-r11;从源数据区读取8个字的数据,放到8个寄存器中,并更新目标数据区指针r0STMIA r1!,r4-r11;将这8个字数据写入到目标数据区中,并更新目标数据区指针r1SUBS r3,r3,#1 ;将块复制次数减1BNE Octcopy ;循环,直到完成以8个字为单位的块复制LDMFD sp!,r4-r11 ;恢复工作寄存器值Copywords ANDS r2,r2,#7 ;剩下不足8个字的数据的字数BEQ Stop ;数据复制完成Wordcopy LDR r3,r0,4 ;从源数据区读取1个字的数据,放到r3寄存器中并更新目标数据区指针r0 STR r3,r1,4 ;将这r3中数据写入到目标数据区中,并更新目标数据区指针r1SUBS r2,r2,l ;将字数减lBNE Wordcopy ;循环,直到完成以字为单位的数据复制Stop;程序退出MOV r0, #0x18AREA BlockData ,DATA,READWRITE ;定义数据区SrcDCD 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4 ;定义源数据区src DstDCD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;定义目标数据区dst END ;结束汇编2. 利用跳转表实现程序跳转: 跳转表中存放的是各子函数的地址,选择不同子程序的参数是该子程序在跳转表中的偏移量。r3寄存器中存放的是跳转表的基地址.r0寄存器的值用于选择不同的子程序。AREA Jump,CODE,READONLY ;设置本段程序的名称 (Jump)及属性num EQU 2 ;跳转表中的子程序个数ENTRY ;程序执行的入口点StartMOV r0,#0 ;设置3个参数,然后调用于程序arithfunc,进行算术运算MOV r1,#3 MOV r2,#2BL arithfunc ;调用子程序arithfunc Stop;程序退出MOV r0, #0x18 LDR r1,=0x20026 SWI 0x Arithfunc ;子程序arithfunc入口点CMP r0,#unm ;判断选择子程序的参数是否在有效范围之内 MOVHS pc,lr ;若不在,则直接返回ADRr3,JumpTable ;读取跳转表的基地址LDRpc,r3,r0,LSL #2 ;根据参数r0的值跳转到相应的子程序JumpTable DCD DoAdd DCD DoSub DoAdd ;子程序DoAdd执行加法操作 ADD r0,r1,r2 MOV pc,lr DoSub ;子程序DoSub执行减法操作 SUB r0,r1,r2 MOV pc,lr END ;结束汇编 3.进行状态切换的程序示例, ARM到Thubm状态;Thumb到ARM状态AREA AddReg,CODE,READONLYENTRYMainADR r0,ThumbProg+1 ;将ThumbProg+1地址值读取到r0 BX r0 ;跳到ThumbProg,程序切换到Thumb状志CODE16 ; CODE16指示编译器后面的为Thumb指令 ThumbProg MOV R2,2 MOV R3,3 ADD R2,R2,R3ADR r0,ARMProg BX r0 ;跳转到ARMProg,程序切换到ARM状态CODE32 ;CODE32指示编译器后面的为ARM指令 ARMProg MOV r4, #4 MOV r5, #5 ADD R4,R4,R5StopMOV r0,#0x18 LDR R1,0x20026 SWI 0x12345 END;结束汇编4. 混合编程中需遵循一定的ATPCS规则: 汇编程序的设计要遵守ATPCS,保证程序调用时参数的正确传递。在汇编程序中使用EXPORT伪操作声明本程序,使得本程序可以被别的程序调用。在C语言程序中使用extern关键词声明该汇编程序。#includestdiohextern void strcopy(char d,const char *s);/使用关键字extern声明strcopy int main()const char *srcstr=“First string - source”;char dststr=“second string - destination”;printf(“Before copying:n”); printf(“SnSn” srcstr,dststr);strcopy(dststr,srcstr);/调用汇编,将源串和目标串地址传递给 strcopy,dststr是第1参数,srcstr是第2参数 ATPCS规则 printf(“After copying:n”);Printf(“snsn”,srcstr,dststr);return(0);AREA scopy CODE, READONLYEXPORT strcopy ;使用EXPORT伪操作声明本汇编程序Strcopy ;寄存器RO中存放第1个参数,即dststr, 寄存器R1中存放第2个参数,即srcstr LDRB R2,R1,#1 ;读一个源字符 STRB R2,R0,#1 ;写一个字符于目的地CMP R2, #0 ;0为字符串结束标志 BNE strcopy MOV PC,LR ;返回END5. 汇编程序调用C程序示例:汇编程序的设计要遵守ATPCS,保证程序调用时参数的正确传递 ,在汇编程序中使用IMPORT伪操作声明将要调用C程序。/c程序g()返回5个整数的和int g(int a, int b, int c, int d ,int e) /5个参数 return a + b + c + d + e; EXPORT f ;声明符号f可被其他文件引用AREA f, CODE,READONLYIMPORT g ;使用伪操作IMPORT声明C程序g() STR lr,sp,#-4! ;保存返回地址ADD r1,r0,r0 ;假设进入程序f时,r0中值为i,r1值设为2iADD r2,r1,r0 ;r2值设为3iADD r3,r1,r2 ;r3值先设为5iSTR r3,sp,#-4! ;第五个参数通过数据栈传递ADD r3,r1,r1 ;r3值设为4iBL g ;调用C程序g()ADD sp,sp,#4 ;调整数据栈指针,准备返回LDR pc,sp,4 ;返回END 6.用ARM汇编语言指令和C语言编写一个完成64位二进制数相加的程序(加法子程序用汇编语言编写,主程序用C语言编写)#include#includeExtern void add-asmsub(int a, int b, int c,int d);Void main()Char *as, *bs, *cs;Long int a=;Long int b=12222;Long int c=;Long int d=22222;Add-asmsub(a,b,c,d);As=isalnum(a);Bs=isalnum(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论