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

下载本文档

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

文档简介

精品文档 1欢迎下载 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 是哈佛结构 精品文档 2欢迎下载 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 位结果 32X32 64or32X32 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 操作系统使 精品文档 3欢迎下载 用的保护模式 指令终止模式 abt 当指令预取终止时进入该模式 数据访问终止模式 abt 当数据访 问终止时进入该模式 可用于虚拟存储及存储保护 系统模式 sys 运行具有特权的操作系统任务 注 除了用户模式外 其它模式都是特权模式 18 ARM 异常类型 当正常的程序执行流程发生暂时的停止时 称之为异常 复位 当处理器的复位电平 有效时 产生复位异常 程序 跳转到复位异常处理程序处执行 未定义指令 当 ARM 处理器或协处理器 遇到不能处理的指令时 产生未定义指令异常 可使用该异常机制进行软件仿真 软件中断 该异常由执 行 SWI 指令产生 可用于用户模式下的程序调用特权操作指令 可使用该异常机制实现系统功能调用 指 令预取中止 若处理器预取指令的地址不存在 或该地址不允许当前指令访问 存储器会向处理器发出中 止信号 但当预取的指令被执行时 才会产生指令预取中止异常 数据中止 若处理器数据访问指令的地 址不存在 或该地址不允许当前指令访问时 产生数据中止异常 IRQ 外部中断请求 当处理器的外 部中断请求引脚有效 且 CPSR 中的 I 位为 0 时 产生 IRQ 异常 系统的外设可通过该异常请求中断服务 FIQ 快速中断请求 当处理器的快速中断请求引脚有效 且 CPSR 中的 F 位为 0 时 产生 FIQ 异常 异常向量表 地址 异常 进入模式 0 x0000 0000 复位 管理模式 0 x0000 0004 未定义指 令 未定义模式 0 x0000 0008 软件中断 管理模式 0 x0000 000C 中止 预取指令 中止模式 0 x0000 0010 中止 数据 中止模式 0 x0000 0014 保留 保留 0 x0000 0018 IRQ 0 x0000 001C FIQ FIQ 异常优先级 1 最高 复位 2 数据中止 3 FIQ 4 IRQ 5 预取指令中止 6 最低 未定义 指令 SWI 19 ARM 嵌入式处理器支持 7 种一场 对于复位 Reset 异常 ARM 嵌入式处理器是如何处理的 复位异 常向量地址是什么 答 复位异常通常是由系统加电或硬件强制使处理器的复位引脚出现负跳变而产生的 当处理器复位引脚 出现负跳变时 当前程序运行程序跳转到复位处理程序处执行 并将复位向量地址是 0 x0000 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 压栈指令 R1 R0 STR R0 R1 出栈指令 R0 R1 LDR R0 R1 4 前变址寻址 R1 4 R0 不影响 R1 的值 LDR R0 R1 4 自动变址模式 R1 4 R0 R1 4 LDR R0 R1 4 后变址模式 R1 R0 然后 R1 4 ARM 存储器访问指令 单寄存器存取指令 LDR STR 字 32 位 半字 16 位 字节 8 位 多寄存器 存取指令 LDM STM 存储器和寄存器交换指令 SWP 跳转指令 B 跳转到指定的地址执行程序 BL 将下一条指令的地址拷贝到 R14 即 LR 链接寄存 精品文档 4欢迎下载 器中然后跳转到制定地址运行程序 BX 带状态切换的跳转指令 ARM Thumb Thumb ARM BLX 带 链接和状态切换的跳转指令 跳转的范围是 32MB RSB 逆向减法指令 RSB R0 R1 R2 R2 R1 R0 RSC 带进位的逆向减法指令 BIC 清楚操作数 1 中在操作数 2 中为 1 的那些位 BIC R0 R0 0 x0b 将 0 1 3 位置 0 CMN 将操作数 2 取反后再与操作数 1 比较 CMN R1 R0 MLA 操作数 1 操作数 2 操作数 3 目的寄存器 MLA R0 R1 R2 R3 R1 R2 R3 R0 22 常见的嵌入式系统存储设备 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 实时操作系统分类 具有强实时特点的嵌入式操作系统 强实时系统 其系统响应时间在毫秒或微秒级 精品文档 5欢迎下载 数控机床 具有一般实特点的嵌入式操作系统 一般实时系统 其系统响应时间在毫秒 几秒的数量级 上 其实时性的要求比强实时系统要差一些 电子菜谱的查询 具有弱实特点的嵌入式操作系统 弱实时 系统 其系统响应时间约为数十秒或更长 工程机械 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 临界段 同其它内核一样 C OS II 为了处理临界段代码 必须关中断 处理完毕后 再开中断 微 处理器一般都有关中断 开中断的指令 C OS II 定义了 2 个宏来关中断和开中断 OS ENTER CRITICAL OS EXIT CRITICAL 31 实时操作系统 RTOS 特征 一 高效的任务管理 1 支持多任务 2 优先级管理 3 任务调度 基 于优先级的抢占式调度 时间片轮转调度的算法 4 支持快速而确定的上下文切换 二 快速灵活的任 务间通信 1 信号量 二进制 互斥 计数器 2 通信机制 消息队列 管道等 三 高度的可剪裁性 四 动态链接与部件增量加载 快速有效的中断和异常事件处理 五 优化的浮点支持 六 动态内存管 理 七 系统时钟和定时器 32 任务状态 精品文档 6欢迎下载 休眠态 任务仅驻留在程序空间 还没有交给 C OS II 管理 就绪态 任务一旦建立 这个任务就进入 就绪态 准备运行 运行态 任何时刻只能有一个任务处于运行态 等待状态 正在运行的任务可能需要 等待某一事件的发生或将自己延迟一段时间 中断服务态 正在运行的任务是可以被中断的 除非该任务 将中断关闭 被中断了的任务进入了中断服务态 33 OS ENTER CRITICAL 关中断 OS EXIT CRITICAL 开中断 OSTaskDel OS PRIO SELF 当任务结束时删除自己 使任务进入就绪态 prio 是任务是优先级 OSRdyGrp OSMapTbl prio 3 OSRdyTbl prio 3 OSMapTbl prio 使任务脱离就绪态 If OSRdyTbl prio 3 任务的调度 任务级的调度由函数 OSSched 完成 中断级的调度有函数 OSIntExt 完成 OS TASK SW 任务的切换 OSSchedlock 给调度器上锁 OSLockNesting 跟踪该函数被调用的次数 OSSchedUnlock 给调度器解锁 给 OSLockNesting 值减 1 OSIntNesting 中断嵌套计数器 OSIntEnter 将 OSIntNesting 加 1 OSIntExit 中断结束返回函数 将 OSIntNesting 减 1 OS TaskIdle 创建空闲任务 OSTaskStat 统计任务 统计运行时间 运行 1 次 秒 计算当前的 CPU 利用率 OSInit 系统初始化函数 精品文档 7欢迎下载 OSStart C 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 OSMapTbl prio 3 pevent OSEventTbl prio 3 OSMapTbl prio 使任务脱离等待状态 if pevent OSEvent prio 3 查找优先级最高的任务 y OSUnMapTbl pevent OSEventGrp x OSUnMapTbl pevent OSEventTbl y prio y 3 x 精品文档 8欢迎下载 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 什么是什么是 ATPCSATPCS 答 arm thumb procedure call standard PCS 规定了应用程序的函数可以如何分开地写 分开地编译 最后将它们连接在一起 PCSPCS 规范强制实现如下约定 规范强制实现如下约定 调用函数如何传参 被调用函数如何获取参数 以何种方式传递函数返回值 寄存器的使用规则 寄存器的使用规则 子程序间通过寄存器 R0 R3 来传递参数和结果 在子程序中 使用寄存器 R4 R11 来保存局部变量 Thumb 用 R4 R7 寄存器 R12 用作子程序间 scratch 寄存器 用于保存 SP 在函数 返回时使用该寄存器出栈 记作 ip 寄存器 R13 用作数据栈指针 记作 sp 寄存器 R14 称为连接寄存器 记作 lr 寄存器 R15 是程序计数器 记作 pc 它不能用作其他用途 数据栈使用规则数据栈使用规则 ATPCS 规定数据栈为 FD Full Descending 类型 并且对数据栈的操作是 8 字节 对齐的 参数传递规则 参数传递规则 参数个数可变的子程序参数传递规则 参数不超过 4 个时 使用 R0 R3 来传递 参数超 过 4 个时 可以使用数据栈来传递 参数个数固定的子程序参数传递规则 有关浮点运算 子程序结果返 回规则 结果为一个 32 位整数时 可以通过寄存器 R0 返回 结果为一个 64 位整数时 可以通过寄存器 精品文档 9欢迎下载 R0 和 R1 返回 依次类推 C C 和汇编混合编程中需遵循一定的和汇编混合编程中需遵循一定的 ATPCSATPCS 规则规则 汇编程序的设计要遵守 ATPCS 保证程序调用时参数的正确传递 在汇编程序中使用 EXPORT 伪操作声明本程序 使得本程序可以被别的程序调用 在汇编程序中使用 IMPORT 伪操作声明将要调用 C 程序 在 C 语言程序中使用 extern 关键词声明该汇编程序 41 c OS IIc 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 0 x400 设置数据栈指针 r13 用于保存工作寄存器数值 Blockcopy 进行以 8 个字为单位的数据复制 MOVS r3 r2 LSR 3 需要进行的以 8 个字为单位的复制次数 BEQ copywords 对于剩下不足 8 个字的数据 跳转到 copywords 以字为单位复制 STMFD sp r4 r11 保存工作寄存器 精品文档 10欢迎下载 Octcopy LDMIA r0 r4 r11 从源数据区读取 8 个字的数据 放到 8 个寄存器中 并更新目标数据区指针 r0 STMIA r1 r4 r11 将这 8 个字数据写入到目标数据区中 并更新目标数据区指针 r1 SUBS r3 r3 1 将块复制次数减 1 BNE 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 中数据写入到目标数据区中 并更新目标数据区指针 r1 SUBS r2 r2 l 将字数减 l BNE Wordcopy 循环 直到完成以字为单位的数据复制 Stop 程序退出 MOV r0 0 x18 AREA 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 程序执行的入口点 精品文档 11欢迎下载 Start MOV r0 0 设置 3 个参数 然后调用于程序 arithfunc 进行算术运算 MOV r1 3 MOV r2 2 BL arithfunc 调用子程序 arithfunc Stop 程序退出 MOV r0 0 x18 LDR r1 0 x20026 SWI 0 x123456 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 READONLY ENTRY 精品文档 12欢迎下载 Main ADR r0 ThumbProg 1 将 ThumbProg 1 地址值读取到 r0 BX r0 跳到 ThumbProg 程序切换到 Thumb 状志 CODE16 CODE16 指示编译器后面的为 Thumb 指令 ThumbProg MOV R2 2 MOV R3 3 ADD R2 R2 R3 ADR r0 ARMProg BX r0 跳转到 ARMProg 程序切换到 ARM 状态 CODE32 CODE32 指示编译器后面的为 ARM 指令 ARMProg MOV r4 4 MOV r5 5 ADD R4 R4 R5 Stop MOV r0 0 x18 LDR R1 0 x20026 SWI 0 x12345 END 结束汇编 4 混合编程中需遵循一定的 ATPCS 规则 汇编程序的设计要遵守 ATPCS 保证程序调用时参数的正确传 递 在汇编程序中使用 EXPORT 伪操作声明本程序 使得本程序可以被别的程序调用 在 C 语言程序中使 用 extern 关键词声明该汇编程序 include stdio h extern void strcopy char d const char s 使用关键字 extern 声明 strcopy int main const char srcstr First string source char dststr second string 精品文档 13欢迎下载 destination printf Before copying n printf S n S n srcstr dststr strcopy dststr srcstr 调用汇编 将源串和目标串地址传递给 strcopy dststr 是第 1 参 数 srcstr 是第 2 参数 ATPCS 规则 printf After copying n Printf s n s n srcstr dststr return 0 AREA scopy CODE READONLY EXPORT 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 返回 END 5 汇编程序调用 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 READONLY IMPORT g 使用伪操作 IMPORT 声明 C 程序 g STR lr sp 4 保存返回地址 ADD r1 r0 r0 假设进入程序 f 时 r0 中值为 i r1 值设为 2 i ADD r2 r1 r0 r2 值设为 3 i ADD r3 r1 r2 r3 值先设为 5 i STR r3 sp 4 第五个参数通过数据栈传递 ADD r3 r1 r1 r3 值设为 4 i 精品文档 14欢迎下载 BL g 调用 C 程序 g ADD sp sp 4 调整数据栈指针 准备返回 LDR pc sp 4 返回 END 6 用 ARM 汇编语言指令和 C 语言编写一个完成 64 位二进制数相加的程序 加法子程序用汇编语言编写 主程序用 C 语言编写 include include Extern void add asmsub int a int b int c int d Void main Char as bs cs Long int a 111111 Long int b 12222 Long int c 211111 Long int d 22222 Add asmsub a b c d As isalnum a Bs

温馨提示

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

评论

0/150

提交评论