Armoric的笔记 https://bbs.21ic.com/?357347 [收藏] [复制] [RSS] 160M虚拟示波器+10M任意信号发生器=EZDSO2041 正在热卖中。  提供完整的DLL动态库,方便在VB,VC,MATLAB,LABVIEW环境中进行二次开发。  一个电话,小莫为你真诚服务。15921793503  http://www.dzmi.com

日志

转载:仿真工具知识之一

已有 1508 次阅读2008-6-14 13:21 |个人分类:单片机|系统分类:单片机| MON51

      本文来自:启东市东疆计算机有限公司 新闻栏目


      现在市面上的许多IAP式的仿真器尤其是单步运行区和保存用户程序数据区,损坏的居多。保存数据最好用XDATA  RAM保存数据。这样无论是步越,还是单步执行的速度都快,性能也大大提高,但单步执行区还是存在频繁写入的问题,如果采用循环写入法,用多个FLASHROM来做单步执行区,减少对某一个固定字节的写入,从而解决flash寿命过短问题。
   现在用SST公司的公版HEX做的仿真机到处都有。为了推广自己的产品,把Keil的许多功能加进来,说成是自己仿真机所具有的。例如:可单步、断点、全速,可参考变量、RAM变量 ,支持汇编,C语言,混合调试。这些本来就是Keil仿真机软件的功能,也是最基本的功能,否则如何让用户调试?
1:如何区分是否为SST公司的公版程序?
   要区分是否为SST公司的公版程序,只要看它是否占有用户的标准资源,特别是串口和定时器。否则就必须改程序代码。

   2:MON51仿真机的工作原理是什么?

简单说明:就是通过Keil开发平台,将用户的程序下载到MON51仿真机中,根据Keil开发平台的命令,不断地执行用户程序,再将临时数据传回Keil开发平台的过程。MON51仿真机的软件,基本上由:通讯模块、Keil命令解析模块、51系列单片机的指令分析模块、断点处理模块、运行模块、单步执行模块等组成。

3:MON51仿真机的“运行到断点处(光标处)”和“单步运行” 、“跨步”、“全速运行”有什么区别?

这些功能是每一个仿真机所具有的。但它们实现的方法是不同的。MON51仿真机是借用单片机的IAP功能,来实现仿真的。所以上述几种运行模式(除开单步运行),全部改写了用户下载到FLASGROM中的程序代码。在断点表中保存了断点的地址,和用户代码。MON51监控程序,会在用户要设立断点的地址处写入一条指令: LCALL  RUN_RETURN 。RUN_RETURN 是停止用户程序,保存用户数据,并恢复MON51监控程序的数据后,再进入MON51监控程序的一段处理程序。实际上就是任务切换。当用户执行到断点处时,会通过LCALL  RUN_RETURN ,自动进入MON51监控程序。再把用户的数据发送到Keil平台。

“跨步”运行实际上也是一种变相的断点运行模式。只不过断点,不是用户定义的,而是Keil开发平台计算的。是隐含处理的。

这里很明显,如果用FLASHROM保存中间数据,则要频繁地删除、写入数据,RUN_RETURN 的执行速度就会明显下降。而用RAM保存,是最快的。而且没有寿命问题。

“全速运行” 有2中方式:

一种是不带中断响应运行。它完全不再受Keil平台的控制,一旦开始运行,用户只有通过手动复位,停止用户程序。

另一种是带中断运行。既勾选Serial Interrupt 选项。这样便会在用户程序的串口中断向量处,写入一条指令LJMP   BREAK ,这样发生中断后,就跳转到MON51监控程序的中断处理程序。BREAK程序判别Keil平台是否发来停机命令。如果是停机命令(0x1B),便会进入STOP程序,保存用户程序数据,并进入MON51监控程序。如果不是,则退出中断程序,继续运行应户程序!这也是所谓的“夭折功能”。
通常的做法是将中断向量转移到0x3b.所以用户必须避开0x3b-0x3d这三个字节.

“单步运行”是比较繁杂的一种运行模式。仔细分析51系列单片机的指令,可以知道,虽然有100多条指令,但把转移指令、判位指令、数据转移指令、运算指令等归类后,实际只有10种类型的指令。首先MON51监控程序分析是哪一种指令,如果是转移类指令(LJMP、AJMP 、SJMP、 LCALL、 ACAL、RET、 RETI),MON51监控程直接计算PC指针的地址,并不执行。而其它类的指令则,既可以用模拟的方式执行,也可以全部复制到单步执行区(最大6个字节)。再在后面添加转移指令 LCALL  RUN_RETURN .进入“单步运行”后,MON51监控程跳转到单步执行区,就可以执行用户的一条指令。然后进入STOP程序。完成一次单步!如果大量采用单步执行的话,单步执行区会被频繁修改,严重影响寿命!这是现在所有采用IAP技术仿真的弊病!

实际上MON51监控程在读取、写入特殊功能寄存器时,也要用“单步运行”方法来实现!例如:“mov a,direct ; mov direct,R0”这俩条指令必须要用“单步运行”来实现。如果用户程序有大量的此类指令,寿命问题就会暴露出来。但如果说改用模拟方式执行,则可解决寿命问题!但也会出另外的问题.

MON51监控程占用用户堆栈,是在RUN_RETURN程序运行时占用的,进入RUN_RETURN 程序时,单片机的硬件已经将PC指针自动压入用户堆栈。此时占用2个字节。实际上不压入堆栈,用单片机内部不用的寄存器就可以保存就可以了!例如:看门狗寄存器WDTD或IAP操作的寄存器组:SFAL、SFAH、SFDT(但不能用SFCM寄存器)所以SP堆栈占用了2个字节的技术并不神秘!但这会影响执行速度.


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (2 个评论)

访客s85Are 2008-6-16 16:27
embest 仿真器 “简洁小巧,稳定高效” 支持Embest Blackfin Development Tools(BDT,免费) 支持VisualDSP++ 4.0/4.5/5.0 集成开发环境 支持Blackfin系列处理器的调试: - BF531/BF532/BF533/BF534/BF536/BF537 Embest特有仿真调试技术,速度高达200KByte/s(1.5Mbps) 仅升级驱动软件可支持新的嵌入式处理器 标准USB 2.0(兼容USB 1.1) USB口供电,无需外部电源 ICE简洁小巧易携带,大小仅45 x 32 x 12mm(比名片还小) 详情请咨询Emlink@embedinfo.com
回复 110114 2009-3-1 07:12
向高手学习