《2022年嵌入式系统设计的最后知识点总结.docx》由会员分享,可在线阅读,更多相关《2022年嵌入式系统设计的最后知识点总结.docx(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、系统概念1、嵌入式系统的定义?以应用为 中心 、以运算机技术为 基础 、软硬件 可裁剪 、适应应用系统对功能、牢靠性、 成本、体积、功耗严格要求的专用运算机系统 ;“嵌入、”“专用、”“运算机”2、嵌入式系统的软、硬件组成?以及主要特点?软件 :从底层到上层: bootloader等系统初始化引导程序、设备驱动层(包括驱动程序、板级支持包 BSP 等)、操作系统、用户应用程序; (底层为上层供应服务)开发软件 :即集成开发环境( asemmbler&compiler&linker&debugger&loader)硬件 组成:核心板 +外围板 +外设 核心板:微掌握器( CPU和外设接口、外设掌
2、握器) 、电源、时钟、复位、 SDRAM 、flash ;外围板面对外围设备,一般是引脚的集合、电平转换电路;外围设备; ,当然也可以将核心板和外围板放在一起;硬件特点 :通常由嵌入式处理器和嵌入式外围设备组成, 高度集成, 常采纳 SOC 设计方法, 对功耗、体积等有严格要求,定制性打算了它的可裁剪性,没有像运算机领域的垄断, 解决方案不唯独;软件特点 :采纳交叉开发方式,系统软件层次分明,操作系统为用户程序供应标准 API ,供应图形接口和文件系统;用户调用系统服务,系统调用设备驱动从而操纵硬件;3、嵌入式系统产品设计的基本流程?需求分析功能性需求是系统的基本功能,如输入输出信号、操作方式
3、等; 非功能性需求包括系统性能、成本、功耗、体积、重量等因素;规格说明精品资料精确地反映客户的需求并且作为设计时必需明确遵循的要求;体系结构设计描述系统如何实现所述的功能和非功能需求,包括对硬件、 软件和执行装置的功能划分以及系统的软件、硬件选型等;软硬件设计基于体系结构,对系统的软件、硬件进行具体设计;系统集成把系统的软件、 硬件和执行装置集成在一起,进行调试, 发觉并改进单元设计过程中的错误;系统测试对设计好的系统进行测试,看其是否满意规格说明书中给定的功能要求;4、处理器及操作系统的选型主要考虑哪些方面? 操作系统本身所供应的开发工具 ; 操作系统向硬件接口 移植难度 ; 操作系统的 内
4、存要求 ; 开发人员 是否熟识 此操作系统及其供应的系统API ; 操作系统 是否供应硬件的驱动程序,如网卡驱动程序等; 操作系统的 是否具有可剪裁性; 操作系统 是否具有实时性能 ;5、交叉开发、交叉开发环境?为何需要交叉开发环境?在一台通用运算机(宿主机)上进行软件的编辑编译,然后下载到嵌入式设备(目标机)中精品资料运行调试的开发方式交 叉开 发环境 一般 由运行 于宿 主机 上的交 叉开 发软 件(assembler&compiler&linker&debugger&loader)、宿主机到目标机的调试通道组成 需要交叉开发环境是由于目标机一般对体积、功耗等有严格限制,资源也面对应用,
5、较为紧急,要求仅仅能流畅运行代码即可,而将用户开发软件 (包括各种库、 工具) 放置在主机上, 而且现在的集成开发环境供应了各种修改好的功能库,用起来也便利;6、嵌入式集成开发环境的主要功能?这是由其组成打算的;Assembler将.c 源代码汇编, compiler 形成目标文件, linker 依据链接描述文件将各个目标代码链接定位生成可执行代码;Debugger有些交叉开发工具供应了 仿真调试通道; Loader 可以将目标文件烧录进设备中(有时需要内部引导代码的协作)7、嵌入式 Linux 开发主要流程?搭建开发环境 - 烧写 bootloader- 烧写内核 - 烧写根文件系统 -烧
6、写应用程序;开发环境 :REDHAT LINUX 、下载相应的 GCC交叉编译器进行安装、 配置开发主机 (配置 MINICOM和配置网络, MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具, 配置网络主要是配置IP 地址、NFS网络文件系统, 需要关闭防火墙) 烧写 bootloader下载一些公开源代码的BOOTLOADER依据自己具体芯片进行移植修改;下载时,有些芯片没有内置引导装载程序,比如三星的ARM7 、ARM9系列芯片,这样就需要编写烧写开发板上flash的烧写程序;或者网络上有免费下载的WINDOWS下通过 JTAG并口简易仿真器烧写ARM外围 f
7、lash精品资料芯片的程序;也有LINUX下公开源代码的 J-FLASH程序;下载内核假如有特地针对你所使用的CPU移植好的 LINUX操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改;下载根文件系统从 下载使用 BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统;根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生烧写映象文件;(文件系统就是把你硬盘上数据依据肯定格式组织成一棵树;数据块对应名称; 删了它就相当于把硬盘格式化了;根文件系统就是出了内核以外,全部的系统文件储备的地方;之所以成为根, 是由于有根才能成生长成树,
8、是其它文件的最终挂载点;我们要明白根文件系统和内核是完全独立的两个部分,它是内核启动时所mount的第一个文件系统,里 面有内核启动所必需的数据,不然就退出启动文件系统这种机制有利于用户和操作系统的交互;数据块对应名称;尽管内核是Linux的核心,但文件却是用户与操作系统交互所采纳的主要工具,特别是LINUX ;)下载用户程序可以下载到根文件系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起,这有点类似于UCOS-II的方式;精品资料8、嵌入式 Linux 开发环境中配置 NFS 服务的目的?可以使不同机器、 不同操作系统之间通过网络共享文件,像拜访本地文件一样拜访远端系
9、统上的文件,在开发阶段,主机制作基于NFS 的文件系统,制定开放目录,开放对象的IP 范围,将目录挂载到嵌入式设备后,嵌入式设备可以便利地拜访、修改主机主机文件;9、硬件重定向?上课的时候老师举得printf ()是个很好的例子, 重定向程序是面对编译环境中的连接器的, 是用户自己定义的C 库函数,有了它,在程序连接时连接器会连接用户自己编写的C 库中的功能函数而不是标准C 库; 相当于将标准 C 库进行了一次移植;从主机环境到实际运行 环境的移植;比如:原来库函数fputc 是把字符输出到调试器掌握窗口中去的,但用户把输出设备改成了UART 端口 ,这样一来 ,全部基于 fputc 函数的
10、printf 系列函数输出都被重定向到UART 端口上去了;相当于实现类似的功能,但是底层的驱动变了;10 、你认为一名好的嵌入式系统设计专业同学,应具备哪些才能?如何培育和提高这些才能?专业技能 :微机原理 的学问,即知道微处理器的工作过程、工作原理,对51单片机、 X86T 体系、 ARM 体系的架构有肯定的熟识、 ;电路学问 ,虽然在系统设计中,硬件只占 30% 的工作量,而且随着系统复杂度的提高,对硬件的关怀越来越少, 但是对电路的明白程度会限制你代码的优化, 是有寄存器编程不明白底层电路根本编不出程序来,而且在硬件显现问题的时候,要有才能精确判定; 操作系统 ,随着 ARM 在嵌入式
11、系统中占据主导位置, 单片机已经退出复杂应用,精品资料操作系统引入了嵌入式系统设计中, 在操作系统供应的平台上做开发, 对操作系统功能、使用、层次组成的懂得的重要性不言而喻; 算法与数学 ,这关系着软件代码的优化实现,在高层次的编程中,算法结构和数学学问将发挥很大的作用;掌握理论 ,由于嵌入式系统实现的最主要的功能就是智能掌握, 对掌握思想、 掌握算法、掌握理论的懂得有肯定的重要性;专业思维 :对嵌入式 软硬件层次相当明白;对开发环境 及其原理 开发流程 有肯定的熟识;运算思维 :将运算思想、才能贯穿于“需选改用学”, 解决运算问题,一切归于二进制;职业病思维 :用嵌入式系统的思维去分析生活中
12、遇到的设备,假如能分析明白或者做出估计,将是一件很高兴的事情;“编码”思想:其实整个运算机世界,都表达着一种“编码”思想,人如何与机器交互、器件之间如何交互、通信双方如何定义通信协议,这都表达着编码的思想; 治理的思维 :由于在复杂的运算机系统也是人设计得, 各模块的工作和谐无处不散发着治理的思想,把系统调用抽象为人事支配,将变得很有爱;要信任你要你想到的解决问题的方法(算法) ,确定能编出来;要信任 ,真理确定是存在的, 你仍没有到遇到未解之谜的程度,即只要是问题就能解决, 遇到需要反复测试的时候, 不能丧气, 或许只是哪个学问点懂得的有偏颇,离真理只有一步之遥;从历史看起、 从总体看起 :
13、用历史的眼光和虚心但不自卑的态度看待复杂的系统和学问,这样一切就都简洁又好懂得;精品资料熟识指导实践,实践反作用熟识;治理的思想;个人品质 :不悲不喜 :在嵌入式开发过程中, 会有一个又一个问题显现, 不要由于一个问题的解决和搁置而悲喜,更大的喜剧在前方,或许更大的悲剧也在酝酿;勇于钻研 :对解决问题有剧烈的憧憬, 有战胜的希望; 所以一些很恬淡的人往往不会成为 IT 行业的精英;并从中找到成就感、存在感乐在其中 :俗语说爱好是最好的老师, 拿观赏的眼光看待内核的治理思想、 看待精妙的算法、看待精密的电路设计,你会发觉一切都美好起来;要会学习:有强大的学习才能,要会查资料、会谈天、会估计;用“
14、学道”的思维去学习一切学问,抓住本质,老子说,为学日益,为道日损,损之又损,以至于无为,无为而无不为; ,最复杂的科学,也能用最朴实的话说明;用历史的眼光、用总体的眼光去学习;耐得住孤寂仍得有爱好爱好 ;有时会比较枯燥和辛苦,除了对专业的爱好之外, 最好能有些调剂生活的爱好爱好,比如唱歌、画画、旅行、摄影、健身等等;如何提高 ?由于嵌入式系统设计所涉及的学问面相当广,微机原理学问、 电路学问、 接口学问、操作系统、甚至是掌握理论、数学运算等等,所以单单学习学问点的话,会 很枯燥而且提高很慢,一切以应用为中心, 在做项目中成长 ,加深懂得,边学变做,把解决问题当做学习的目标; 找如干良师益友 ,
15、他们能带给你好的影响,包括做项目和做人, 在与他们的沟通共事中你可以快速提高; 大量的阅读, 开阔眼界,明白当前行业的进展状况, 大量阅览 一些典型系统的设计, 所谓书到用时方精品资料很少是很有道理的;学一些跟专业相关的学问 ,如数据库、网站设计等,不但能在设计系统时打开思维,仍可以给IT 男换个口味,陶冶一下情操;ARM 体系结构11 、ARM 硬件电路最小系统组成?微掌握器(例如 2410 , CPU+ 外设接口 /外设掌握器) 电源、时钟、复位、储备器( SDRAM/FLASH(NOR8 位、 NAND8 16 32位)FLASH :存放操作系统、用户程序等需要掉电后储存的数据SDRAM
16、 :系统运行的主要区域,系统及用户数据及堆栈,都在这个区域;有时启动模式挑选有时需要 JTAG :对芯片内全部部件进行拜访,通过该接口对系统调试、编程12 、ARM 处理器的主要工作模式?ARM 的 7 种处理器模式 (不同的模式下有自己的行为准就)USR ;正常程序执行模式FIQ ;支持高速数据传送和通道处理IRQ ;用于通用中断的处理;治理( SVC );操作系统爱护模式中止 未定义系统除了 USR 之外,其它 6 种又称为特权模式; 6 中种除了系统模式又称为反常模式(即处理反常时的工作模式) ;精品资料在软件掌握下可以转变模式(即转变CPSR 相应),外部中断或反常处理也引起模式变化,
17、 用户模式下不能转变模式;13 、核心寄存器的作用:R13 通常用作堆栈指针 ,称为 SP,被初始化为多个模式下的堆栈;R14 用作子程序连接寄存器 LR,中断反常或执行 BL 时得到 PC 即 R15 的备份;Cpsr 程序状态寄存器 ,32 位只用 12 位,全部模式下均可见;Spsr 储存程序状态寄存器 ,即发生反常时对 CPSR 进行储存,储存当前状态;5 个反常模式下均有各自的 SPSR ;14 、ARM 处理器的启动过程?第一,看一下, ARM 启动时的硬件机制, 上电产生 复位反常 ,CPU 强制 PC 为 0x00000000, 执行复位反常处理函数,接下来就相当于执行了STR
18、ARTUP.S的功能; 是给用户程序执行给以合适的工作环境, 设置中断向量表、 堆栈、时钟、完成内存拷贝等, 相当于 STARTUP.S 或者 bootloader的前端代码,是开机执行的程序;.拿 2410 的启动代码举例,它启动CPU 的过程是:1、在起始地址安排 中断向量表 即中断处理函数 ( CPU 要求的),以为向量空间只有4 字节, 所以一般只是一个跳转指令,去别处执行;在跳到复位反常 之后,关闭中断,关闭看门狗;/2 、之后初始化储备器系统3、初始 多个模式下的堆栈 (模式切换时,硬件给SP 置位)/4 、初始化有特别要求的外围设备,如LED 灯、看门狗5、初始化用户的执行环境(
19、在FLASH中运行太慢了,把代码整体搬迁 到 RAM 中)/6 、切换处理器的工作模式7、调用主程序精品资料15 、当正常的程序执行流程发生临时的停止时,称之为反常对反常的处理有优先级, 处理反常需要跳转至反常模式; 并依据反常向量跳转至响应的子程序(执行之前必需储存现场) ,即反常显现后强制跳转至固定的储备器地址执行;反常是比中断更大的概念;ARM 有 7 种反常;包括复位治理模式0x00000000软中断 SWI治理模式0x00000008 IRQIRQ 模式 0x00000018FIQFIQ 模式 0x0000001c精品资料仍包括预取中止、数据中止、未定义;(反常显现时,反常模式分组的
20、R14 和 SPSR 用于储存下一条程序地址和CPSR ;反常返回时, SPSR-CPSR ,R14-PC )在启动代码中第一就是设置所谓的反常向量表,也就是在指定的位置放置反常处理程序(一般是跳转指令) ;反常发生时, CPU 会依据规定强制置 PC,恰好去执行我们设置好的跳转指令,接着执行服务程序;反常处理流程 :(硬件机制,只做这些,跟代码无关; )1、依据反常类型,强制设置 CPSR 的运行模式位2、在切换到的反常模式下, 在当前的链接寄存器 LR r14 中储存上个模式的 PC值-4,以便程序在处理反常返回时能从正确的位置重新开头执行3、将上一个模式的 CPSR 复制到当前反常模式的
21、 SPSR 中(留意 1 与 2、3 的冲突,不能独立执行,但是是硬件实现的,无关代码)4、强制 PC;然后就到了执行代码的时候 从相关的反常向量地址取下一条指令执行,从而跳转到相应的反常处理程序处;反常返回流程 :(有指令)1、将 LR 寄存器中的值减去相应的偏移量对于 IRQ/FIQ 是 4送到 PC 中2.、将 SPSR复制回 CPSR(留意 1 与 2 的冲突,不能独立执行, 用一条带 的指令执行, 怎么着都是一条 )3、清除禁止中断标志 ,假如它被设置成使能4、全部修改过的用户寄存器必需从处理程序的爱护堆栈中复原(即出栈);对中断嵌套的处理:精品资料留意:1、储存在 LR 中的 PC
22、 值,和该值返回时的处理过程;当 IRQ 反常中断产生时, 程序计数器 pc 的值已经更新, 它指向当前指令后面第3 条指令(对于 ARM 指令,它指向当前指令地址加12 字节的位置;当 IRQ 反常中断产生时,处理器将值( pc-4 )储存到 IRQ 反常模式下的寄存器lr_irq 中,它指向当前指令之后的第2 条指令,因此返回操作可以通过下面指令实现:subs pc, lr, #4有两种返回机制:1、当返回地址储存在当前反常模式的r14 时使用其中一种机制2、当返回地址储存在堆栈时使用另一种机制(进中断的时候储存的);1、SUBSPC,R14_fiq ,#4(不同模式有不同的指令, 返回
23、PC 的同时返回 CPSR ,一条指令实现 )2、SUBLR,LR,#4STMFDR13. ,R0 ,R4-R12 ,LR;将寄存器列表中的寄存器 R0 ,R4 到 R12 , LR 存入堆栈;精品资料LDMFD R13.,R0 ,R4-R12 ,PC ;将堆栈内容复原到寄存器 R0 ,R4 到 R12 , PC,同时 SPSR 复制到 CPSR为可选后缀,当指令为LDM 且寄存器列表中包含 R15 ,选用该后缀时表示: 除了正常的数据传送之外,仍将SPSR 复制到 CPSR ,一条指令实现 ;代码指令分析:AREAInit,CODE ,READONLY ;代码段 Init 、只读CODE32
24、;32 位 ARM 指令集LDRR0, NEXT 1;给 R0 赋地址值BX R0;程序跳,并将处理器切换到 Thumb 工作状态CODE16; 16 位 thumb 指令集NEXTLDRR3, 0x3FF给 R3 赋值END16 、高级语言和汇编语言函数间的相互调用(应当会考 ) :汇编调用 C:IMPORT Main;通知编译器该标号为一个外部标号AREAInit,CODE,READONLY;定义一个代码段ENTRY;定义程序的入口点LDRR0,=0x3FF0000;初始化系统 配置寄存器精品资料LDRR1,=0xE7FFFF80 STRR1,R0LDRSP,=0x3FE1000;初始化用
25、户堆栈BLMain;跳转到 Main ()函数处的 C/C+ 代码执行END;标识汇编程序的终止以上的程序段完成一些简洁的初始化,然后跳转到Main ()函数所标识的C/C 代码处执行主要的任务, 此处的 Main 仅为一个标号, 也可使用其他名称;17 、程序代码段的组成分析、例如: 标注下面程序各条语句中的含义AREAInit , CODE , READONLY ;已定义代码段ENTRY ;程序入口LDRR0, =0x3ff5000 ; R0 赋寄存器地址值LDRR1, 0x0f ;要给寄存器赋的值STRR1,R0 ;赋值LDRR0, =0x3ff5008LDRR1, 0x01STRR1,
26、R0 ;给另一个寄存器赋值的过程BLPROC ;跳转至标号为 PROC 的程序出执行:精品资料:PROC:MOVPC,LR / 将 LR 储存的程序指针返回,即 跳到 BL 下一句接着执行:END2410 设计18 、阐述 CPU 、外设、外设掌握器、时序、寄存器的相互关系?CPU与外设掌握器构成微处理器,微处理器在核心板(最小系统)上发挥作用,将引脚集合成外设接口加上电平转换等就是外围板,外设通过外围板连接 至外设掌握器; CPU通过 寄存器编程掌握外设掌握器产生时序掌握外设;如是没有外设掌握器,就需要CPU 自己产生时序来与外设交互, 这种时序相当于一种商定好的意思表示,相当于“语言”或者
27、“通信协议,”例如 如是 2410 与一个带有 IIC 接口的器件通信,只需要连接起来, 对 IIC 进行寄存器编程,掌握它们之间的工作模式,可能收发数据就变成了在中断中读写寄存器操作,屏蔽了 IIC 规定的通信细节;如是 51 单片机要与 IIC 通信的话,就复杂多了,第一要认真阅读 IIC 的协议,不容丝毫差错,然后用 IO 口模拟时序, CPU 的工作量很大;19 、寄存器编程的本质?如何猎取寄存器的配置?寄存器编程的本质是CPU 掌握外设寄存器工作模式的方法;可以想象 寄存器的每一位确定精品资料是外设掌握器功能模块中的一个个“开关” ,给某一位赋值0 或者 1 ,就相当于使能或关闭某一
28、个功能;20 、2410 最小电路设计?(晶振挑选、启动挑选、数据宽度)与一般的 ARM 系统相同, 都需要微处理器、电源、 晶振、复位、储备器( flash 、SDRAM )、JTAG 接口等,具体情形如下:( 需要对 OM0 和 OM1 配置电平以打算启动方式,对 OM2 和 OM3 配置电平以打算时钟源 ;)电源设计 :处理器用 1.8V ,RTC 给时钟模块供电 1.8V ,储备器和一般 IO 用 3.3V , ADC 模块用 3.3V ,可见最小系统最少要用 3.3 和 1.8 两种直流稳压;课程试验中电源电压 5V ,分别用 LM1085 稳压 3.3V ,用 AS1117 稳压
29、1.8V ;晶振设计2410 的时钟掌握规律可以产生系统所需要的时钟, 包括 CPU 的 FCLK ,和 AHB 总线的 HCLK , APB 的 PCLK ;内部有两个锁相环 PLL ,MPLL 供应前三个, UPLL 给 USB 供应 48MHZ 的时钟;主时钟源( UPLL 和 MPLL 的时钟源)可以挑选是来自外部时钟仍是外部晶振, 这是由 OM2 和 OM3 的管脚确定的,可以 OM2 和 OM3 同时接低电平,挑选外部晶振, 12M 晶振加上 15pF 起振电容(经过锁相环倍频可以达到203M );复位电路设计可以在 nRESET 端设计像 51 单片机那样的阻容复位电路, 但为了
30、稳固, 可以使用复位芯片如 MAX811 或 IMP811 ;JTAG 接口设计有 20 针和 14 针两种 JTAG 接口;储备器设计精品资料2410 有自己的储备器掌握器, 并且规定了哪些 bank 空间是 RAM 哪些是 FLASH , 储备器芯片严格依据 DATASHEET上的要求和标明的引脚连接方式与储备器控 制器的储备器接口相连就可以, 掌握器会依据地址产生读写储备器芯片的时序, 完成存取数据的操作;21 、2410nor 和 nand 启动过程分析 ?NOR flash :读取速度高、 而擦写速度低, 容量小, 价格高, 地址线和数据线分开, 采纳 SRAM 接口;NAND fl
31、ash :读速度不如 NORflash但是擦写速度高,容量大,价格低,有取代硬盘的趋势,但是地址线和数据复用,需要程序协作才能读写数据;可以通过跳线设置时从NAND FLASH启动仍是从 NOR FLASH启动;NAND 启动的优势:廉价、 容量大;但是读写规律不能用硬件产生,也就是没方法接到 BANK空间里,必需有程序协作才能读写( 有特地的掌握器接口,确定要寄存器编程加上程序协作才能读写,没有PC 的根正苗红 ),所以理论上它是不行以用来启动系统的, 由于那之前什么程序都没有, 要想读写它必需是系统装载完了而且有程序了;但是三星采纳了SRAM 映射解决了这个问题,下面就是这个过程:电路中使
32、 OM1 和 OM0 都接低电平,从 NAND FLASH中启动;(2410 有 NAND FLASH 掌握器,连接 NAND Flash 芯片,产生读写时序)在该模式下, 2410 的前 4KB 地址空间对应一个名字叫做“起步石”的SRAM ,系统启动时,自动将 NANDFLASH 的前 4KB 数据加载到起步石中,然后系统自精品资料动执行这些启动引导代码, CPU 从内部 RAM 的 0x00000000 位置开头启动; 这个过程不需要程序干涉 ;也就是类似于 STARTUP.S 的功能,初始化反常向量表、堆栈、将 NAND FLASH中的代码 有代码支持喽 拷贝到 SDRAM 中运行;N
33、OR FLASH采纳的的是 SRAM 接口,可以直接到储备器掌握器上, ARM 内核产生的时序能对其读写; 将 bank0 上接上 NORflash 芯片;上电产生复位反常后会自动从 NOR flash 中启动;22 、S3C2410 的中断处理流程 ?第一应当明确 2410 与 ARM 内核的反常处理系统的角色,依据之前的ARM 反常处理流程, 我们清晰明白了哪些是CPU 的硬件机制; 2410 通过中断掌握器答应以优先级的方式将几十个中断源共同用一个IRQ;一个中断申请提出后, IRQ 反常发生,切换模式、储存CPSR 、储存 PC,然后跳转到 handleIRQ 函数,然后跳转到 ISR
34、IRQ 这只是一个大致流程,或许会定义更多的跳转依据中断源向量表的首地址和偏移量寄存器找出究竟是哪个中断发生了;然后跳转到相应的中断处理函数,比如跳到串口中断,仍可以依据挂起位(即中断标志位)再次判定究竟是接收中断仍是发送完成中断;也就是说2410 处理流程除了 ARM 对反常的响应是硬件机制外,其余的都是代码实现的;我们在编程的时候没有写的话, 那也是编译器加进去的;2410 对嵌套的处理比起 2410 的处理流程不同的是,由于有了中断掌握器,这就是实现高优先级嵌套的硬件基础, 由于每一次进入反常模式用户都会储存环境, 这就是中断嵌套的软件基础; CPU 的反常处理机制总是那些,很明确的;我
35、正在执行一个中断服精品资料务程序,然后再次发生反常,储存,跳转( CPU )、再次判定是哪个中断,进去之后压栈, 运行另一个中断的服务程序, 运行完返回, 这是就是返回到上一个中断了;上一个中断运行完,一返回就是返回发生反常前的状态;23 、S3C2410的串口、端口、外部中断、AD 等及寄存器的编程才能(会读datasheet 、会编程、作业、试验的相关代码)ARM 的汇编语言程序 .PPT认真阅读 DATASHEET,记住 寄存器的赋值指令 ;LDR R0 , =GPHCON LDR R1,=0X2AFAAASTR R1 , R024 、时钟、看门狗的相关概念时钟为整个系统供应同步脉冲,像
36、人的脉搏一样;看门狗 :其实是一个计数器,当它计数溢出的时候,会使系统复位,所以它的作用是防止系统死机;打开看门狗之后,当代码跑飞或者陷入死循环之后,就不能喂狗, 也就是不能清除计数值,那么它就会使系统重启;VIVI25 、什么是 bootloaderBootloader ,为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS ;精品资料Bootloader在系统中的位置通常固化在硬件上的某个固态储备设备上,加电后自启动;Bootloader功能初始化, 给 CPU 合适的工作环境 (相当于 STARTUP.S),以便为最终调用操作系统内核或用户应用程序境;加载内核下载内
37、核或者根文件系统;Bootloader操作模式有启动加载和下载两种模式;启动加载模式 是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必需工作在这种模式下;即初始化CPU 的工作环境之后,将内核如RAM 执行;下载模式 :目标机上的 Bootloader将通过串口连接或网络连接等通信手段从主机下载文件;主要是下载内核映像和根文件系统映像等;从主机下载的文件通常第一被Bootloader储存到目标机的 RAM 中,然后再被Bootloader写到目标机上的 FLASH类固态储备设备中;Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用;此外
38、,以后的系统更新也会使用到这种工作模式;Bootloader启动过程上电之后,先启动 CPU 即执行 startup.s类似功能代码(配置中断、初始化堆栈、拷贝代码等),然后进行加载内核的预备1、至少初始化一个串口,以便向终端用户反馈数据;精品资料2、检测系统内存映射,哪些是可用的RAM ?在这一步之后, 将检测外部按键, 有按键按下将进入下载模式,没有按键的话将执行下面的步骤,加载内核:3、将 kenel 和根文件系统从 flash 调入 RAM 4、为内核启动设置参数5、调用内核;UCOS_II26 、概念分析可重入函数可以被一个以上的任务调用,而不必担忧数据的破坏;可重入型函数任何时候都
39、可以被中断,一段时间以后又可以运行,而相应数据不会丢失;可重入型函数或者只使用局部变量,(关中断、只用局部变量、用互斥型信号量可以使函数变成可重入的)互斥任务在处理共享数据时的排它性,以防止竞争和数据的破坏;也就是任务在某一个时间段独占共享资源,在释放之前别的任务没有该资源的运行权;满意互斥条件的方法:1、 关中断:最简便快捷的方法,即处理共享资源属于临界区代码;2、使用测试并置位指令3、禁止做任务切换精品资料4、利用信号量,其中 2 和 4 的道理是相像的,标志位;死锁死锁也称作抱死, 指两个任务无限期地相互等待对方掌握着的资源,不然都不会执行; 两个任务都是“你不给我,我就不给你”的心态;
40、最简洁的防止发生死锁的方法是让每个任务都:先得到全部需要的资源再做下一步的工作;一般内核会答应在申请信号量时定义申请超时;剥夺型与不行剥夺型内核即占先式仍是非占先式;不行剥夺 :合作型内核,即除非自己主动舍弃CPU 的运行权,不然没方法被切换;不知道什么时候最高优先级的任务才能拿到CPU的掌握权,完全取决于应用程序什么时候释放CPU ;(顾名思义:每个任务不会被其它任务剥夺去,除非中断的到来,即便如此,当中断终止后,仍是会回到原先被中断的程序,而不会切换到具有高优先级的任务中去;) 可剥夺 :最高优先级的任务一旦就绪,总能得到CPU 的掌握权;可以被挂起,可以再中断退出时失去对CPU 的运行权
41、;使用占先式内核时,应用程序不应直接使用不行重入型函数非占先式内核的一个特点是几乎不需要使用信号量爱护共享数据;运行着的任务占有CPU , 而不必担忧被别的任务抢占,什么时候释放,自己说了算;可剥夺型的内核是实时系统所必需的;即实时不在于立刻,而在于可猜测性, 高优先级得到CPU 的时刻是可以猜测的;进程上下文 是进程运行寄存器环境的总和:对 arm 而言, RO-R12,LR,PC,CPSR ,SPSR ;STMFDsp., pc; save pcSTMFDsp., lr; save lr精品资料STMFDsp., r0-r12; save registers and ret address
42、 MRSr4, CPSRSTMFDsp., r4; save current PSR MRSr4, SPSRSTMFDsp., r4; save SPSR27 、实时系统本质是:可猜测性28 、内核的相关学问初始化 : OSINT; 系统初始化,创建系统任务、创建链表,等待将TCB 赋值后放进去;启 动 : OSStart;就 是 将 就 绪 的 状 态 的 任 务 中 找 到 优 先 级 最 高 的 出 栈 运 行 , 调 用OSStartHighRdy;在启动之前要调用OS_Taskcreat ()规定一创建就进入就绪态(初始化就绪态表)它肯定是对 TCB 赋值 调用 TCBinit )放
43、到链表里,从闲暇链表头取一个链表,放在使用链表里;任务组成 :任务由三个部分构成1、任务掌握块 TCB ,储存着任务的全部属性,可以说内核对任务的治理就是对TCB 的治理;它包含了一个任务的前一个任务、后一个任务、指向任务代码的指针、指向任务堆栈的指针、 任务优先级、 任务状态、 延时值等等; 对任务的掌握都是通过拜访任务掌握块来实现的;2、任务栈储存任务的工作环境;3、任务代码;状态 :精品资料任务(无限循环代码)的五个状态: 休眠态:没有加入运行队列;挂起态( waiting ,等待,最复杂,有许多种情形),在等待满意运行条件,如一个信号量、或者延时终止等;就绪态( ready ):具备运行的一切条件,等待切换,只是有更高级的任务占据着CPU ;运行态:正在占用CPU 的运行权被中断态;五种状态间的转换在课件中的图里说的比较清晰;留意 :一个任务在运行态时被挂起时清除就绪态,变成挂起态; 而被占先时就虽然不运行但保持就绪态;任务的调度(占先式,就绪表)UCOS 的就绪表实现:就绪表的实现依靠 两个变量一张表 实现: OS_Rdy_Tbl7( 8 个 8 位数)和 OS_Rdy_Grp ;OSMapTbl相
限制150内