




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、利用嵌入式仿真器实现调试功能引言本文介绍了一种先进的片上嵌入式仿真系统功能及其 应用实例。由于该系统集成在 MCU 内部,包括复杂断点设 置、触发序列发生器及处理器状态存储器等多种功能模块, 使工程师在设计电路中实现调试功能。调试方法对比调试是嵌入式产品开发人员的主要工作之。随着电路设 计趋于复杂化,调试过程也变得愈加困难和耗时。仿真器的 小足之处在于小能准确再现实际应用时的工作状态,许多仿 真器不仅仿真了 CPU 内核及少数外设。 不过, 仿真器也有诸 多优点,可提供代码覆盖、配置及条件断点等功能。嵌入式 应用通常涉及多个软硬件交互过程。 由于 MCUT 作在不同环 境下,实时事件有时由外接
2、电路产生,有时由自身集成的 ADC 或者计时器产生。 有时, MCU 还与 DSP 配合组成更加 复杂的系统。在只有 CPU 内核的仿真器环境内调试、校验 IC 间通信软件并不容易。另一种常用方法是使用电路内仿真器 (1CE) ,它使用适配 器替代日标 Ib 路板 MCU ,并连接了用于模拟 MCU 活动的 复杂电路,同时提供调试功能。 ICE 吸收了仿真器在真实环 境实时运行软件的优点,但其价格昂贵、体积较大且无法提 供 100精确度,尤其是涉及到 ADC 、DAC 、比较器、振荡 器及及电压参考电路等模拟外设时。通过在 MCU 中增加具备调试功能的嵌入式仿真器克服 了上述缺点。嵌入式仿真过
3、程中,试用主机通过 JTAG 等串 行接口直接连接到片上仿真逻辑电路。 应用程序代码在 MCU 的运行状况与没有连接调试接口时想同。由于软件是在实际 工作环境下调试,所以在软件开发完成后无需与硬件再进行 调试。某些 8位和 16 位微型控制器现在电具备了嵌入式调试 功能,但大多数还只能提供存储器存取、 CPU 执行控制及硬 件断点设置等基本功能, 与成熟的 ICE 相比还有较大的提高 空间。最新 16 位 MCU 提供的嵌入式仿真模块增加了更多新 功能,从而缩小了与 ICE 的差距, 下面将介绍部分新型 MCU 高级调试功能及应用实例。EEM 系统构成 集成的增强型嵌入式仿真模块 (EEM)
4、包含以下功能块: 基本触发器、触发器组合逻辑发生器、触发器序列发生器、 触发器动作、状态存储及时钟控制单元。要使用 EEM 进行调试,则至少要配置八个可用基本触 发器输入中的一个。一般情况下,只能对CPU地址总线(MAB) 指定的内存位置停止执行程序进行触发器设置。 但现在 MCU 中的触发器能够支持非常复杂的设置。除了地址总线以外, 所有触发器还可通过配置来监控 CPU 数据总线 (MDB) 、内部 CPU 寄存器及部分处理器控制信号。 此外, 如果需要则可以 在地址及数据总线触发器加入位掩码以隔离需要的值,常数 及“等于”、“不等于”、“小于”和“大于”等比较选项可以 使用。以上这些功能组
5、合起来即可实现复杂的断点设置。通过将可用基本触发器输出的逻辑功能进行组合形成 了复杂触发器。用户可以自行定义本单元的触发器输出,即 基本触发器输入的组合逻辑。例如,组合地址、数据总线触 发器后即可监控存储器某一位置是否发生了特定值的读/写操作。这个复杂的触发器事件可以用作直接停止执行某个程 序或产生一个状态存储事件。 同时, 触发器序列发生器 (具有 四种状态的嵌入式状态机 )可以对触发器时间进行设定。 触发 器所建立的可编程转换条件引起在几种状态间的动作转换。 当序列发生器到达最后事件状态时, MCU 可配置为停止程 序运行和 /或产生一个状态存储事件。状态存储单元可以使用任何复杂触发器,该
6、存储单元是 一个环形缓冲区,最多含有 8 条记录,每条记录分别是 16 位地址总线、 16 位数据总线以及 CPU 部分重要控制信号在 触发发生时的快照。可以将其看作能够采集状态信息而义不 会影响 MCU 软件实时运行的简单跟踪缓冲区。当基本触发 事件发生时或在每个 CPU 时始终期,可以用触发器组合逻辑 或触发器序列输出捕捉系统快照。现在某些 MCU 的 EEM 附带了时钟控制单元, 三个可用 内部时钟树信号均可驱动 ADC 、 LCD 驱动器、训时器及串 行通信模块等不同外设。停止程序执行时,时钟控制单元能 对每个模块进行配置而使外设继续得到时钟信号。当处理器 在调试过程中停止时,时钟将停
7、止,如果仿真模块简单停止 所有时钟 (如到达断点时 ) ,则可能发生通信字符丢失或 A/D 转换结果有误等不必要的副作用。另一种实现方法是仿真停 止时继续向外设提供时钟,但是该解决方案可能引起计时器 等模块永久设置中断标志 ( 即使是在 CPU 停止时 ),使源代码 进入单步运行。使用时钟控制单元,开发人员可以有选择地 向应用模块发送时钟信号。利用 EEM 建立复杂断点EEM 具有设定程序断点的能力, 如果能够为断点增加一 个条件则在众多情况下可简化调试环境。例如,用 c 语言编写的嵌入式应用程序实现复杂的状态机。当前状态存储为全 局变量,可在整个源代码的不同位置得到更新。应用时,全 局变量在
8、错误条件下进入了状态 3。如果要找出引起意外 转换的源代码段,需要监控状态机变量StateVar当该值为 3时,利用 EEM 模块触发器即可停止程序运行。该复 杂断点是两个基本 EEM 触发器的逻辑与组合。为如何实现 复杂触发器的简化示意图。一个基本触发器配置后, 用于监控器 M A B 状态机变量 StateVar地址及CPU写访问控制信号,其他触发器用于 监控 MDB 是否为 3。这样配置 EEM 后,即可实现当指令将 3 写入变量 StateVar时,程序马上停止运行。这样就 能轻松找出引起这个误写操作的代码段。同样的机制也可以 用于 RAM 、闪存及外设模块的访问。使用每个基本 EEM
9、 触发器都具备的位掩码功能可以进 一步对该复杂触发器进行配置。例如,客户在运动手表中应 用超低功耗 MCU 时发现了一个问题:端口 1的引脚 3的设 定值异常。端口 1 在应用中的作用是控制各种外部电路,所 以在代码运行过程中受到多次访问。现在的任务是找出哪一条 CPU 指令和哪一行源代码引 起该端口引脚值的意外改变。如上所述,复杂 EEM 断点可 用于监控端口 1 的输出寄存器,而使用位掩码功能则能够隔 离第3位,具体做法是将掩码与值设为 0x0008,将触发器比 较值设为0x0008。MDB EEM触发器在每次比较前先执行与 操作。 CPU 继续运行,当执行代码将端口 1 输出寄存器设定
10、为 3 时马上停止程序执行。程序运行几次之后就能确定引起 意外操作的 c 表达式。寻找堆栈指针中的 BUG堆栈溢出是嵌入式应用的常见错误。大多数 MCU 架构在 RAM 中分配堆栈空间, 但 RAM 空间有限,且经常由其他变量及程序单元共享, MCU 通常在程序初始化时将堆栈指针置于 RAM 空间的顶端。根 据开发工具的不同,链接程序在 RAM 中为 c 程序缺省分配 0x50 字节堆栈空间。 随着软件开发和全局变量数量的不断增 加,在编译过程中链接程序最终将报告空间不足。所以,如 果小注意定义堆栈尺寸,预留空间将无法满足应用需求。实时动态内存分配及递归程序技术电非常消耗内存空 间。意外事件
11、( 如按钮振动或其他造成嵌套中断的输入信号)可能会将堆栈指针推向并最终越过内存边缘。如果不做堆栈 指针实时校验,堆栈可能会占用变量存储区域,一旦发生这 种情况,关键的应用数据将受到破坏,程序运行结果难以预 料甚至会出现软件崩溃。 如果建立一种机制, 即堆栈指针 (sP) 离开指定 RAM 区域时立即停止程序运行,则很容易发现问 题所在。另一种形式的复杂断点是范围断点,范围断点监控一定范围以内或以外的地址或数据总线。试器使用两个内部结合 的 EEM 基本触发器监控同一个总线,其中一个触发器配置 为“小于”比较模式,另一个配置为“大于”比较模式,当 两个条件同时满足时将停止程序执行。例如,范围断点
12、可监 控并防止 CPU 指令在程序内存之外读取数据。 在调试过程中 如果出现因计算错误的间接跳转导致程序计数器损坏的情 况,范围断点会很有帮助。 若与读 /写修改结合使用可防止覆 盖数据区域的操作。触发器序列发生器应用在数码相机中的应用是另一个显示 EEM 强大功能的实 例,它应用 MCU 与 DSP 共同完成键区扫描、电源管理及实 时时钟等功能。两个处理器通过串口连接, DSP 向支持的 MCU 发送多字节指令序列请求当前电池状态。 如果 MCU 无 法正常执行指定命令,开发人员必须在串行接收中断服务中 加入断点以找出问题所在,同时又不能影响应用的实时运 行。目前的错误是 DSP 软件超时,
13、 通信中断, 数据交换并未 达到既定目标。解决方案:将三个复杂触发器信号输入触发 器序列发生器, 并完成相关设置, 在接收到触发序列 (长度为 3 个字节 ) 的最后一个字节后马上停止程序运行。然后用单步执行 CPU 在整个程序中的操作, 以便分析命令未执行的原因状态存储单元应用另一个功能强大的 EEM 组件是状态存储单元。在调试 代码时如果将状态存储模块配置为 CPU 的每个取指周期采 集状态信息,则存储器缓冲区将包含最后八个已经执行的汇 编指令的历史信息 (历史信息深度为 8 级 )。手动或者通过断 点停止程序运行后,上述列表可以提供程序停止前发生事件 的有用信息。如果将其配置为收集基本或
14、组合 EEM 触发器 事件的数据,则可能只记录“跳转” 、“转移”等操作指令, 这为检查最近发生的程序流提供了强有力的跟踪手段。因为通过 JTAG 接口访问状态存储缓冲区时,不影响 CPU 和应用程序,所以,可以实现马达控制应用等调试环境 下的实时监视功能。例如,在向应用插入断点以停止程序运 行,并通过正常监视窗口读取变量时,控制算法受到损坏, 这可能引起机械设备受损。而将其中一个 EEM 触发器与状 态存储功能结合则可实现对变量的实时监视,而不用修改程 序代码。将触发器设定为监视包含写访问的变量内存地址, 则可产生状态存储事件。传递到缓冲器的数据总线值即变量 当前值。本例中,反映马达当前速度
15、的全局变量存储在地址 0x200,同时受到写访问的监视。实时马达控制算法使状态 存储窗口自动刷新并在“数据总线”列表显示最新的马达速 度,同时不会影响应用的正常运行。从截图可以看出马达在 加速。尽管使用数据总线作为实时监视器最高只能达到 16 位精度,但在人多数情况下可以满足应用需求。时钟控制单元应用EEM 时钟控制单元有助于开发另外一种嵌入式应用, 即 将 MCU 用于驱动场效应管。场效应管连接到计时器 PWM 输出,输出信号占空比由软件算法控制。在应用运行过程中 工程师需要修改 RAM 中的参数, 应用停止之前要修改 RAM 内容,工程师需要禁用时钟控制配置对话窗口的“停止计时 器B仿真停止”选项设置。如果手动停止程序运行,由于计 时器仍然在运行并产生合适的 PWM 波形,所以占空比将保 持 20。反之,则可能使高压输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国防教育知识竞赛题库及答案
- 2025年锅炉工岗位应知应会知识新题库(带答案)
- 2025年乡村旅游特色民宿运营合同
- 2025年规范汉字书写大赛试题(含答案)
- 2025年广西梧州市辅警招聘考试题库及答案
- 护肤生理学考试题及答案
- 大数据分析平台运维合作合同
- 陇南中考试卷地理真题及答案
- 九江卫校考试题库及答案
- 2025年职业健康培训考试题及答案
- 恋爱课件教学课件
- 人民陪审员培训民事课件
- 药物中毒的护理与急救
- 2025年食安员、食品安全总监、主要负责人考试题及答案
- 兄弟分户房屋协议书模板
- 学堂在线 大数据系统基础 章节测试答案
- 降本增效总结汇报
- JJF(蒙) 058-2023 重点排放单位碳计量审查规范
- 小学歌曲教学课件设计与实践
- 不交社保给补贴协议书
- 叉车产品数据表
评论
0/150
提交评论