其他有用资料4-Cortex-M3的优势_第1页
其他有用资料4-Cortex-M3的优势_第2页
其他有用资料4-Cortex-M3的优势_第3页
其他有用资料4-Cortex-M3的优势_第4页
其他有用资料4-Cortex-M3的优势_第5页
免费预览已结束

下载本文档

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

文档简介

Information QuarterlyNumber 10, Spring 2009 28 Cortex-M3是Cortex系列的成员, 已经集成到多家芯片供应商的MCU系 列中, 还有数家芯片供应商准备采用这 款产品, 这款产品时常被当作颇受欢迎 的ARM7TDMI-S的继承者来宣传; 尽 管二者的架构有很大差别, 从大多数一 般性比较(如表1所示)还是可以看出, Cortex-M3的性能更为优越。 总体而言, 它所整合的增强功能有助于其在需要确 定性系统行为的成本敏感应用程序中为 自己建立面向嵌入式系统的适用性。 尽管C或者C+开发人员通常不太关 注嵌入式处理器的低级别特性(如中断 优先级、 堆栈处理和指令集) , 但是它们 可能会严重影响最终产品的性能。 比如, 如果缺少了中断嵌套功能, 便会极大增加 对服务要求苛刻的高优先级源的延迟时 间。 由于Cortex-M3在大多数定性评估 方面改进了ARM7的性能, 如更简单的堆 栈架构、 更好的中断控制器、 增强的调试 功能、 更高性能的指令集, 因此有必要详 细列出二者的差别所在。 堆栈和中断 C o r t e x-M3只合并了两个堆栈 (如 下一页中的 图1所 示),减 少了 ARM7TDMI-S堆栈管理的开销(和复 杂性)。采用进程堆栈在“线程”模式 下执行任务;采用主堆栈在“处理器” (Handler)模式下执行中断。 在发生 异常时,任务上下文会自动保存在进 程堆栈上,此时处理器转入 “处理器” (Handler)模式, 令主堆栈处于活动状 态。从异常返回时, 任务上下文得到恢 复, 继而恢复为 “线程” 模式。 这是假定在中断返回时被中断的任 务仍为活动任务, 但是, 如果要安排一个 新任务, 则必须进行上下文切换。 通过保 存任务上下文, Cortex-M3硬件减少了上 下文切换时间。 软件必须只保存旧任务堆 栈上的寄存器R4-R11, 将R4-R11从新 任务堆栈中弹出, 调整堆栈指针和异常返 回值, 然后返回。 这不仅比ARM7/9处理 器所需步骤简单直接得多, 还可令消耗的 处理器周期减少50%。 NVIC和SysTick Cortex-M3不仅包括内核CPU(如 ALU、控制逻辑、数据接口、指令解码 等), 还包括一些集成外设, 最为重要的 是为低延迟、 高效和可配置性而设计的嵌 套向量中断控制器(NVIC) 。 NVIC: 可在发生中断时自动保存一半的处 理器寄存器, 在退出中断时将其恢 复, 以提供高效的中断处理。 此外, 处理背靠背中断时不用保存/恢复寄 存器(因为没有必要这样做) ; 作 者 Brian Nagel Micrium 摘 要: ARM于2004年推出了全新 Cortex架构系列, 为嵌入式市场提 供了一个三管齐下的解决方案。 首 先, Cortex-A系列提供高性能应用 处理器, 其次, Cortex-R系列专门 针对实时、 深度嵌入式解决方案, 再次, Cortex-M系列专注于低成本 嵌入式微控制器。 Cortex-M3的优势 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表1:ARM7TDMI-S和Cortex-M3特性的比较。 TECHNOLOGY IN-DEPTH Information QuarterlyNumber 10, Spring 2009 29 提供8到256个优先级, 并可动态分 配优先级; 可处理1到240个外部源; 集成一个用于实时操作系统(RTOS) 的24位倒计数定时器(SysTick) 。 N V I C 和 S y s T i c k 外设可方便 Cortex-M3处理器之间的迁移; 尤其适用 于RTOS。 与ARM7TDMI-S处理器相连 的C/OS-II端口需要以下配置: 通用ARM端口 (对于所有处理器都 是相同的) ; 与处理器的中断控制器相连的端口; 与硬件定时器相连的端口。 (除了系 统时钟和GPIO的低级别初始化) 。 通常, 这需要编写一组函数, 如图 2(b-d)所示。 相比之下, Cortex-M3端口必须只 提供一个函数, 该函数返回SysTick定时 器的时钟频率(除了系统时钟和GPIO的 正常低级别初始化) , 如图3(b)所示。对 于ARM7TDMI-S, 必须为每个端口写入 (图2(d)) 中断功能, 而对于Cortex-M3, 则在C/CPU端口的CPU_IntSrc.()函数 中为所有端口提供中断功能: CPU_IntSrcEn() Enable interrupt. CPU_IntSrcDis() Disable interrupt. CPU_IntSrcPrioSet() Set interrupt priority. CPU_IntSrcPrioGet() Get interrupt priority. 图2 C/OS-II ARM7TDMI-S端口。 (a) 启动任务调用BSP_Init()执行低级别处理器初始化,并(b)调用BSP_TmrTick_Init()对将会生成 操作系统定时器时钟的处理器定时器进行初始化。 (c) 通用ARM端口(用于所有ARM7/9处理器)利用汇编语言将所有异常转移到以C语言编写的同 一个处理程序中(OS_CPU_ExceptHandler())。该函数必须调用生成请求的IRQ或者FIQ的 处理程序。 (d) 可启用和禁用各个IRQ源并设置处理程序和源优先级的函数必须可写入(在适当情况下,此功 能应该是“内联的”)。 图1:Cortex-M3任务堆栈 TECHNOLOGY IN-DEPTH Information QuarterlyNumber 10, Spring 2009 30 在目标应用程 序空闲时, 可以利 用Cortex-M3的休眠模式功能节省电 力。在C/OS-II中, 空闲任务一般在 不需要运行高优先级任务(例如应用 程序)时执行。 该任务调用应用程序级 App_TaskIdleHook()挂钩函数(如图4所 示)。 通过调用WFI(等待中断)指令, 此 挂钩函数令处理器进入休眠模式, 直至 接收到下一个中断。 内存映射和MPU 内部SRAM、 外设和外部存储器以及 设备占据了4GB空间的前3.5GB, 接下来 的256kB专用于内核外设, 且寄存器位置 内存保护单元(MPU)是一个可选 的Cortex-M3组件, 作为内核的一部分, MPU(如果有的话)对于每个实现而言是 相同的, 均由同一个RTOS端口 (在NVIC 和SysTick的支持下)供应。 最多可构建 八个区域并为其赋予访问权限, 每个区域 又包含八个可以单独禁用的子区域。 可以利用M P U保护系统,如利用 C/OS-MPU( C/OSII的扩展)防止未 经授权对系统内存进行访问。 系统被分 为多个MPU环境(进程) ; 每个进程包括 一个或多个任务(线程)。 每个进程有自 己的读、 写和执行权限。 线程之间交换数 据所采用的方式可以与C/OS-II相同, 但是跨不同进程进行处理需由内核操作 系统来完成。 图3 C/OS-II Cortex-M3端口。 (a) 启动任务调用BSP_Init()执行低级别处 理器初始化, 调用OS_CPU_SysTickInit() 对SysTick定时器进行初始化。 (b) OS_CPU_SysTickClkFreq()必须返回 SysTick定时器的时钟频率。 图4 gC/OS-II空闲挂钩函数。 在空闲任务期间,RTOS可使用Cortex-M3的 集成休眠模式来节省电力。应用程序空闲任 务挂钩函数应调用WFI指令(此处通过汇编语 言函数CPU_Wait ForInt()执行)。 图5 Cortex-M3内存映射 对于所有实现通用, 该区域中的系统控制 空间(SCS)包含NVIC(包括SysTick)和 其他重要控制寄存器。 最低1MB的SRAM 和外围空间是位段区; 该区域中的每位均 可通过将1或0写到各自别名区域中的字 来进行设置或者清除。 例如, 要清除位于 0 x20001000的字节的位5, 应向该地址 的字写入值 “0” 。 与传统位设置和清除操作不同, 位 段提供了一种无需 “读-改-写” 循环的原 子级过程。 如果处理器内部RAM的一部 分扩展到位段区之外, 或将外部RAM用 于存放数据, 则仍可确保重要变量(如核 心RTOS结构)位于SRAM位段区内。 在 大多数开发工具链之下, 可以将编译单元 的读/写数据(变量) (通常是一个代码文 件)分配给在链接程序文件或者内存映射 中定义的特定内存区域。 TECHNOLOGY IN-DEPTH Information QuarterlyNumber 10, Spring 2009 31 指令集 在v4T架构的基础上, ARM又推出了 Thumb指令集架构(ISA) , 这是一个16 位的ISA, 可以改进代码密度(一般约为 30%) 。 Cortex-M3使用Thumb-2 ISA 来实现ARMv7-M,ARMv7-M是原始 Thumb的一个超集, 其中包括新的16位 和32位指令。这些新增功能使得系统不 再需要原始ARM ISA, 这样Cortex-M3 便可始终以一种模式(Thumb-2)执行, 而不像ARM7那样需要在ARM/Thumb这 两种模式下切换。 C o r t e x - M 3 包 括 3 6 个 ARM7TDMI-S没有提供的指令; 其中一 些较为有趣的指令包括: CLZ(前导零计数) RBIT(反转字中位的顺序) MOVT(将16位立即数移到字的顶 部)和MOVW(移动16位立即数) BFC(位字段清零)和BFI(文件字段 插入) SBFX(带符号位字段提取)和UBFX (无符号位字段提取) CLZ指令提供了一个相关度很高的 示例优化: 内核调度算法。大多数内核 (如C/OS-II)使用位字段跟踪就绪任 务, C/OS-II使用两级分层字段。 如图 6所示, OSRdyTbl为每个任务包含了 一个位; 如果该位为1, 则表示对应的任 务准备就绪; 如果该位为0, 则表示该任 务尚未就绪。 OSRdyGrp在OSRdyTbl 中为每行包含了一个位; 如果该行中有 任何任务准备就绪, 则OSRdyGrp中的 相应位为1; 如果没有任务准备就绪, 则 OSRdyGrp中的相应位为0。 如果某个任 务被暂停, 则其在OSRdyTbl中的相应 位必须清零, 如果之前它是所在行中唯一 准备就绪的任务, 则该行在OSRdyGrp中 的位也必须清零。 由于C/OS-II是独立于硬件的, 因 此它不需要依靠CLZ指令来确定最高优 先级就绪任务, 不过, 原始C代码(如下 一页的图7所示, 为清晰起见稍作修改) 可以利用汇编语言轻松重写, 以充分利用 CLZ。 结果如右侧的图6所示。 (注意: 由 于需要对尾随零而不是前导零的数目进 行计数, RBIT指令是必需的。 与图6(介 绍的是64位任务配置)不同的是, 此C代 码和汇编代码将要用于256位任务配置, 其中OSRdyTbl是一个由16个16位整数 组成的数组, 而OSRdyGrp是一个16位 整数。 调试与跟踪 调试控制器是Cortex-M3推出的一 项令人振奋的功能。 各种设备通过调试 端口 (串行线JTAG调试端口 (SWJ-DP) 或串行线调试端口(SW-DP) )进行访 问, 因具体实现而异。 SWD提供低引脚数 调试解决方案(只用两个引脚, 而JTAG 需要5个引脚), 且功能和速度丝毫不比 JTAG逊色。 功能强大的跟踪单元通过嵌入式跟 踪宏单元(ETM)和一个全新的仪器跟 踪宏单元(ITM)集成了传统指令跟踪功 能, ITM允许应用程序或者软件模块使用 printf()形式的输出跟踪事件, 与采用传统 半主机环境中的printf()不同的是, ITM输 出可在不暂停目标处理器的情况下执行。 来自ETM和ITM的信息都是通过串行线 浏览器(SWV)输出的, 无论采用曼切斯 特编码格式还是ART格式, 都从同一个输 出引脚输出。 通过AHB访问端口 (AHB-AP) , 调 试端口可以访问所有存储器和寄存器(包 括处理器寄存器)而无需停止内核。 也就 是说, 调试器可以直接访问Cortex-M3存 储器, 如此一来, C/Probe之类的实时 监控程序便能够以非侵入方式运行(无 需额外代码, 也无需停止处理器, 只需一 个标准调试接口即可)。 反之,ARM7/9 处理器上的存储器只能在不停止处理 器的情况下通过调试通信通道(DCC, Debug Communication Channel)访问。 由于DCC只能为处理器/调试器通信提供 一个单独的数据寄存器, ARM7和ARM9 还需要额外的目标代码来执行存储器读 写操作。 Micrium的实时监控程序C/Probe 可通过Cortex-M3的SWD或者JTAG接口 来检索带有仿真器(如J-Link)的目标存 储器数据。 C/Probe是一个Windows应 用程序, 它允许用户显示连接嵌入式目标 上几乎所有变量(在运行期间)的值或存 储器位置。 用户只需在图形环境中填充测 量范围、 表格、 图表和其他组件, 并将其 分别与一个变量关联。 变量名称和地址 从用户编译器/链接器生成的ELF文件中 图6 管理就绪任务信息:暂停任务 TECHNOLOGY IN-DEPTH Information QuarterlyNumber 10, Spring 2009 32 读取。 一旦通信配置完毕(如波特率、 端 口等) , 即可开始采集数据。 之后, 这些组 件将利用从目标中读取的变量值进行更 新。 图8中展示的是基本架构。 图9显示了 C/OS-II工作空间的两个 屏面, 并且均填充了任务信息, 令人回想起 典型IDE内核。 通过Cortex-M3的调试接 口, 借助J-Link, C/Probe每秒可以采集 大约相当于900个符号的值 (约为4000字 节/秒) , 这足可与在115200波特率下利用 RS-232实现的传输速率相媲美。 不过, J-Link访问不需要目标代码, 不会耗费处 理器周期, 也不需要停止处理器。 小结 Cortex-M3处理器采用ARMv7-M 架构, 专用于成本敏感的嵌入式应用。 这款M C U集成了高效的中断控制器 (NVIC) , 包括RTOS定时器(SysTick) 和MPU(可选) 。 与最早期的ARM相比, 它还有一组内存映射。 这些共享功能使得 它易于从一个控制器迁移到另一个控制 器, 或将RTOS移植到新的平台。 很多功能是为了让Cortex-M3s上 的软件更为高效。 简单的堆栈架构, 加上 NV

温馨提示

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

评论

0/150

提交评论