- 40
- 0
- 约 20页
- 2017-02-01 发布于重庆
- 举报
嵌入式系统设计的最后知识点总结
系统概念
嵌入式系统的定义?
以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
嵌入式系统的软、硬件组成?以及主要特点?
嵌入式系统产品设计的基本流程?
处理器及操作系统的选型主要考虑哪些方面?
① 操作系统本身所提供的开发工具。
② 操作系统向硬件接口移植难度。
③ 操作系统的内存要求。
④ 开发人员是否熟悉此操作系统及其提供的系统API。
⑤ 操作系统是否提供硬件的驱动程序,如网卡驱动程序等。
⑥ 操作系统的是否具有可剪裁性。
⑦ 操作系统实时性能。
交叉开发、交叉开发环境?为何需要交叉开发环境?
在一台通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中运行调试的开发方式
交叉开发环境一般由运行于宿主机上的交叉开发软件、宿主机到目标机的调试通道组成
不同机器、不同操作系统之间通过网络共享文件本来库函数fputc()是把字符输出到调试器控制窗口中去的,但用户把输出设备改成了UART端口,这样一来,所有基于fputc()函数的printf()系列函数输出都被重定向到UART端口上去了。
当正常的程序执行流程发生暂时的停止时,称之为异常
对异常的处理有优先级,处理异常需要跳转至异常模式。并根据异常向量跳转至响应的子程序(执行之前必须保存现场),即异常出现后强制跳转至固定的存储器地址执行。异常是比中断更大的概念。ARM有7种异常。包括
复位 管理模式 0软中断SWI 管理模式 0IRQ IRQ模式 0FIQ FIQ模式 0x0000001c
还包括预取中止、数据中止、未定义。
(异常出现时,异常模式分组的R14和SPSR用于保存下一条程序地址和CPSR。异常返回时,SPSR-CPSR,R14-PC)
在启动代码中首先就是设置所谓的异常向量表,也就是在指定的位置放置异常处理程序(一般是跳转指令)。异常发生时,CPU会根据规定强制置PC,恰好去执行我们设置好的跳转指令,接着执行服务程序。
异常处理流程:(硬件机制,只做这些,跟代码无关。)
1、根据异常类型,强制设置CPSR的运行模式位
2、在切换到的异常模式下,在当前的链接寄存器LR (r14)中保存上个模式的PC值-4,以便程序在处理异常返回时能从正确的位置重新开始执行
3、将上一个模式的CPSR复制到当前异常模式的SPSR中
(注意1与2、3的矛盾,不能独立执行,但是是硬件实现的,无关代码)
4、强制PC。然后就到了执行代码的时候从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
异常返回流程:(有指令)
1、将LR寄存器中的值减去相应的偏移量(对于IRQ/FIQ是4)送到PC中
2.、将 SPSR 复制回 CPSR
(注意1与2的矛盾,不能独立执行,用一条带∧的指令执行,怎么着都是一条)
3、清除禁止中断标志,如果它被设置成使能
4、所有修改过的用户寄存器必须从处理程序的保护堆栈中恢复(即出栈)。
对中断嵌套的处理:
注意:
保存在LR中的PC值,和该值返回时的处理过程。
当IRQ异常中断产生时,程序计数器pc的值已经更新,它指向当前指令后面第3条指令(对于ARM指令,它指向当前指令地址加12字节的位置;当IRQ异常中断产生时,处理器将值(pc-4)保存到IRQ异常模式下的寄存器lr_irq中,它指向当前指令之后的第2条指令,因此返回操作可以通过下面指令实现:subs pc, lr, #4
有两种返回机制:
当返回地址保存在当前异常模式的r14时使用其中一种机制
当返回地址保存在堆栈时使用另一种机制(进中断的时候保存的)。
SUBS?? PC,R14_fiq ,#4 (不同模式有不同的指令,返回PC的同时返回CPSR,一条指令实现)
2、
SUB LR,LR,#4
STMFD R13!,{R0,R4-R12,LR}
;将寄存器列表中的寄存器R0,R4到R12,LR存入堆栈。
LDMFD R13!,{R0,R4-R12,PC} ∧
;将堆栈内容恢复到寄存器R0,R4到R12,PC,同时SPSR复制到CPSR
{∧}为可选后缀,当指令为LDM且寄存器列表中包含R15,选用该后缀时表示:除了正常的数据传送之外,还将SPSR复制到CPSR,一条指令实现。
代码指令分析:
AREA Init,CODE,READONLY;代码段Init、只读
……
CODE32 ;32位ARM指令集
LDR R0,=NEXT+1 ;给R0赋地址值
BX R0 ;程序跳,并将处理器切换到Thumb工作状态
……
CODE16 ; 16位th
原创力文档

文档评论(0)