仿真器的知识

2023-05-16

 

目前,在线仿真器(In Circuit Emulator,ICE)在嵌入式系统开发中被越来越多的工程师所采用。尤其是在国外嵌入式开发公司中,ICE是一种必备的调试工具,被大规模地应用,以提高开发调试阶段的效率。但在国内,由于调试习惯和开发成本的原因,仿真器更多是在产品开发初期的底层驱动程序调试阶段中被应用。当产品的性能比较稳定后,工程师往往会采用串口调试方法进行应用程序的调试。
与仿真器调试相比,串口调试的功能比较简单,人机交互功能也不够友好。遇到复杂的程序错误时,开发效率可能会大大降低。一个功能强大的ICE,往往能够提供丰富的调试手段,使调试工作事半功倍。ICE为嵌入式调试工作所带来的方便和高效,只有使用者才能够深刻地体会。

 

仿真器的原理:
仿真器内部的P口等硬件资源和51系列单片机基本是完全兼容的。仿真主控程序被存储在仿真器芯片特殊的指定空间内,有一段特殊的地址段用来存储仿真主控程序,仿真主控程序就象一台电脑的操作系统一样控制仿真器的正确运转。
仿真器和电脑的上位机软件(即KEIL)是通过串口相连的,通过仿真器芯片的RxD和TxD端口和电脑的串行口做联机通讯,RxD负责接收电脑主机发来的控制数据,TxD负责给电脑主机发送反馈信息。控制指令由KEIL发出,由仿真器内部的仿真主控程序负责执行接收到的数据,并且进行正确的处理。进而驱动相应的硬件工作,这其中也包括把接收到的BIN或者其他格式的程序存放到仿真器芯片内部用来存储可执行程序的存储单元(这个过程和把程序烧写到51芯片里面是类似的,只是仿真器的擦写是以覆盖形式来做的),这样就实现了类似编程器反复烧写来试验的功能!不同的是,通过仿真主控程序可以做到让这些目标程序,做特定的运行,比如单步、指定端点、指定地址的等,并且通过KEIL可时时观察到单片机内部各个存储单元的状态。仿真器和电脑主机联机后就象是两个精密的齿轮互相咬合的关系,一旦强行中断这种联系(比如强行给仿真器手动复位或者拔去联机线等),电脑就会提示联机出现问题,这也体现了硬件仿真的鲜明特性,即“所见即所得”。这些都是编程器无法做到的。这些给调试、修改、以及生成最终程序创造了比较有力的保证,从而实现较高的效率。


仿真器的种种:
1.1
仿真的概念:仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。-在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。例如,在单片机的开发过程中,程序的设计是最为重要的但也是难度最大的一种最简单和原始的开发流程是:编写程序烧写芯片验证功能,这种方法对于简单的小系统是可以对付的,但在大系统中使用这种方法则是完全不可能的。

1.2仿真的种类:---软件仿真:这种方法主要是使用计算机软件来模拟运行,实际的单片机运行因此仿真与硬件无关的系统具有一定的优点。用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最终的设计。---硬件仿真:使用附加的硬件来替代用户系统的单片机并完成单片机全部或大部分的功能。使用了附加硬件后用户就可以对程序的运行进行控制,例如单步,全速,查看资源断点等。硬件仿真是开发过程中所必须的。

1.3为什么要使用仿真器?---在与一些有经验的工程师交谈中,我们会发现有相当一部分工程师在开发中不使用或很少仿真器。向他们询问,原因得到的回答是"仿真器不可靠"但是他们是如何解决程序开发中遇到的问题呢?通过深入的交流才明白他们是按照这样的方法来开发程序的:
---(1)根据自己的设计建立一个符合要求的硬件平台,如果该平台涉及的程序比较复杂。还要搭建一个人机交流的通道人机交流通道可能是一个简单的发光二极,管蜂鸣器,复杂的可能是串口通讯口LCD显示屏。
---(2)写一个最简单的程序例,如只是将发光二极管连续的闪烁。程序编译后烧写到单片机芯片中,验证硬件平台是否工作正常。
---(3)硬件平台正常工作后编写系统最低层的驱动程序,每次程序更改后都重新烧写单片机芯片验证。如果在程序验证中遇到问题,则可能在程序中加入一些调试手段。例如通过串口发送一些信息到PC端的超级终端上,用于了解程序的运行情况。---(4)系统低层驱动程序完成后再编写用户框架程序,由于这部分已经不涉及到硬件部分,所以程序中的问题用户一般能够发现。---但是更多的调查表明,使用以上方法的工程师总的看来所设计的程序不是很庞大或很复杂。因为在做简单的项目时,我们可以通过一个发光二极管就可以表达出内部的信息:如果程序复杂,可能需要更多的信息来表示内部的状态,这样可能就需要串口协助调试:如果程序更复杂,硬件更多,实时性更强,那工程师就要更多的增强调试手段,串口可能就不能满足了,需要类似于断点的功能,因为我想知道在某一个时刻单片机内部的状态究竟是怎样?---如果用户程序的修改非常频繁,可能一次又一次地的烧写芯片占用的时间就很多,这时用户就会想能下载程序并运行的装置。---到这里,您会看到,随着用户要求的越来越高,调试装置已经越来越象一个通用的仿真器了。因此我们的建议是:不要回避使用仿真器因为使用仿真器能提高您的开发速度。---但是不能否认的是,用户回避使用仿真器也是有原因的。因为仿真器也是一种电子装置,非常依赖于设计者的水平。如果一个仿真器设计者的水平有欠缺,那将给仿真器的使用者带来很大的问题。因为仿真器的使用者将分不清楚究竟是程序的问题还是出在那里。随着电子设备的复杂化,设计工程师面临前所未有的压力。您可以想象,用户发现了程序中有一个问题,首先怀疑是自己系统中的问题,可能是软件方面也可能是硬件方面。因为用户系统处于开发阶段,用户基本上不会怀疑仿真器。在这种情况下,用户将耗费很大的精力在自己的系统中寻找并不存在的问题。如果用户最终发现问题来源于仿真器,并通过烧写芯片验证确,实如此那这个仿真器用户以后可能会逐渐放弃使用仿真器。---用户放弃使用仿真器,对用户的影响是巨大的。因为放弃使用一个设计不完善的仿真器,也放弃了使用其它设计完善的仿真器,关键是放弃了合理的开发方法。因此我们的建议是:不要回避使用仿真器但要挑选好的仿真器。

1.4仿真器的附加服务更加重要---在购买仿真器的同时,还要注意仿真器厂家的服务,这一点很关键。这里说的服务包含仿真器本身的服务,例如仿真器使用上的指导服务,仿真器的维修服务,这些都是一个产品的最基本的服务。对于仿真器这种特殊产品来将还不是全部的服务。---使用仿真器来开发产品,会遇到很多问题:产品本身的问题,仿真器的问题,仿真器和用户系统的问题。如果用户开发经验不是很丰富,他并不能排除遇到的问题究竟来源于哪个方面。这时,他可能求助于仿真器生产厂商。如果仿真器的生产厂商只专注于仿真器的设计,而对于其它的单片机应用不熟悉,他可能对用户提出的问题不能作出正确的判断而一味的强调自己的仿真器没有问题。与之相反,一个既熟悉仿真器的使用,又有丰富开发经验的仿真器支持厂商则能协助用户快速的找出问题。实践证明这两种情况带来的效果是完全不一样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仿真器的知识 的相关文章

随机推荐

  • 树莓派(3B):启动流程,系统初始化配置,引脚图图示说明

    目录 一 xff0c 树莓派刷机及串口方式登陆 准备工具 操作步骤 二 xff0c 配置树莓派接入网络 树莓派入网 固定树莓派的ip地址 三 xff0c 网络SSH方式登陆树莓派 打开树莓派SSH功能 登陆SSH 四 xff0c 用国内的源
  • 写论文的标题(title)和(abstract)的一些小感想

    最近老师在帮着改论文 xff0c 发现了自己的很多问题 在写论文的思路上海很不成熟 xff0c 根据最近的一些经验 xff0c 有一些小的建议可以分享给大家 xff0c 不一定对 xff0c 但是希望能帮助到需要小论文的盆友们 有什么说的不
  • Init container容器Volume文件复制脚本(共享存储)

    Deprecated 1 由于卷的挂载是直接在容器当前目录之上的 xff0c 即容器原本目录下文件被隐藏 xff0c 等umount才可见 xff0c 因此 xff0c 如果不希望发生把原本目录下的文件也影藏掉 xff0c 需要通过复制容器
  • Jeston nano+RealSense D455相机+ORB_SLAM3+ROS实时运行

    Jeston nano 43 RealSense D455相机 43 ORB SLAM3 43 ROS实时运行 安装各种ORB SLAM3依赖项编译编译正常版本编译ROS版本 外接相机实时运行ORB SLAM3修改订阅话题名运行效果 本人是
  • px4机架和混控文件读取

    在px4启动文件RCS中 xff0c 可以看到对autostart文件的读取 span class token macro property span class token directive hash span span class t
  • px4_add_module.cmake

    span class token macro property span class token directive hash span span class token expression span class token functi
  • 终于有人把Prometheus入门讲明白了 | 留言送书

    Prometheus既是一个时序数据库 xff0c 又是一个监控系统 xff0c 更是一套完备的监控生态解决方案 作为时序数据库 xff0c 在2020年2月的排名中 xff0c Prometheus已经跃居到第三名 xff0c 超越了老牌
  • Dockerfile文件全面详解

    Docker 可以通过读取 Dockerfile 中的指令自动构建镜像 Dockerfile 是一个文本文档 xff0c 其中包含了用户创建镜像的所有命令和说明 一 变量 变量用 variable name 或者 variable name
  • enum枚举类型作为成员变量

    Enum是枚举类型 定义形式一 xff1a Enum 枚举类型名 枚举常量1 xff08 61 0 xff09 xff0c 枚举常量2 xff08 61 0 xff09 xff0c 枚举变量1 xff08 xff0c 枚举变量2 xff0c
  • 嘉立创EDA持续进化,以创新引领板级EDA高质量发展

    从标准版到专业版 xff0c 嘉立创EDA正通过持续进化 xff0c 更好地满足中国企业应用需求 出品 常言道 作者 丁常彦 集成电路作为先进制造业的代表 数字经济的基石 xff0c 重要性日益凸显 近年来 xff0c 在一系列政策的持续推
  • 手把手教你设置路由器端口映射

    2012 06 11 18 33 45 来源 路饭网 大 中 小 浏览117 次 点击投稿 在前面其实 xff0c 我们也讲到过设置路由器端口映射方法 xff0c 今天之所以再次提及这个问题 xff0c 目的是想图文深化一下路由器端口映射的
  • 学习OpenCV(3)了解OpenCV的数据类型-1

    目录 openCV的数据类型 基础类型 固定向量类cv Vec lt gt 固定矩阵类 cv Matx lt gt cv Point lt gt 类 cv Scalar lt gt Size类 cv Rect类 cv RotatedRect
  • STM32 串口驱动,分层通信

    以前在使用串口的时候都是直接使用中断 xff0c 每收发一个字节都要进一次中断 xff0c 然后直接在中断进行封包 xff0c 现在做了一个简单的分层设计 xff0c 其实这个设计还是驱动设计 xff0c 后期将逻辑层划分再细致一点 xff
  • 【踩坑实录】Mission planner+Ardupilot飞控固件配置教程

    写在前面 飞控 xff1a 雷迅CUAV V5 43 固件 xff1a Arudupilot Arduplane Stable 地面站 xff1a Mission Planner 1 3 74 之前为飞控刷写了px4固件 xff0c 并采用
  • leetcode 专题:动态规划 python 版(持续更新中)

    递归 xff1a 自己调用自己 代码比较简洁 xff0c 但是浪费空间 xff0c 有许多重复计算 迭代 xff1a 利用已知的变量值 xff0c 根据递推公式不断得到新的值 xff0c 一直到解决问题为止 代码相对复杂一点 递归中一定有迭
  • FreeRTOS中数据结构链表思考的几个问题

    使用的资料为野火FreeRTOS教程 xff1a 其中有一个 将节点插入链表的尾部的一个函数如下 void vListInsertEnd List t const pxList ListItem t const pxNewListItem
  • Looking for pthread_create in pthreads - not found

    版权申明 转载请附上出处链接 Looking for pthread create in pthreads not found error log xff1a Looking span class token keyword for spa
  • Ubuntu系统备份、恢复至其他电脑

    以A电脑的系统向B电脑移植为例 xff08 Intel 64 NUC xff09 xff0c 第一步 xff08 将A电脑的系统打包 xff09 xff1a 进入A电脑根目录并获取权限 cd sudo su 将根目录所需文件打包为backu
  • git报错fatal: unable to access ‘https://github.com/.......‘: OpenSSL SSL_read: Connection was reset, e

    fatal unable to access https github com OpenSSL SSL read Connection was reset errno 10054 产生原因 一般是因为服务器的SSL证书没有经过第三方机构的签
  • 仿真器的知识

    目前 xff0c 在线仿真器 In Circuit Emulator xff0c ICE 在嵌入式系统开发中被越来越多的工程师所采用 尤其是在国外嵌入式开发公司中 xff0c ICE是一种必备的调试工具 xff0c 被大规模地应用 xff0