嵌入式工程师必备技能——软件仿真

今日头条/西瓜视频/抖音短视频 同名:正点原子原子哥

今日头条/西瓜视频/抖音短视频 同名:正点原子原子哥

感谢各位的关注和支持,你们的支持是原子哥无限前进的动力。

前言

MDK的一个强大的功能就是提供软件仿真(注意:STM32F4不支持软件仿真),通过软件仿真,我们可以发现很多将要出现的问题,避免了下载到STM32里面来查这些错误,这样最大的好处是能很方便的检查程序存在的问题,因为在MDK的仿真下面,你可以查看很多硬件相关的寄存器,通过观察这些寄存器,你可以知道代码是不是真正有效。另外一个优点是不必频繁的刷机,从而延长了STM32的FLASH寿命(STM32的FLASH寿命≥1W次)。当然,软件仿真不是万能的,很多问题还是要到在线调试才能发现。

这里我们以战舰版跑马灯实验为例子。废话不多说了,接下来我们开始进行软件仿真。

第一步

主要检查芯片型号和晶振频率,其他的一般默认即可,具体操作如下:

嵌入式工程师必备技能——软件仿真

(特别提醒:Xtal参数只用于软件仿真的,对于硬件仿真或者直接把程序下载到板子里是没有影响的。而且MDK5.35开始禁用外部晶振设置选项,所以是灰色的,显示undefined)

第二步

选择操作类型,以及设置DialogDLL等参数,具体操作如下:

嵌入式工程师必备技能——软件仿真

选择:UseSimulator,即使用软件仿真。
选择:Runto main(),即跳过汇编代码,直接跳转到main函数开始仿真。

设置下方的DialogDLL分别为:DARMSTM.DLL和TARMSTM.DLL,Parameter均为:-pSTM32F103ZE,用于支持STM32F103ZE的软硬件仿真(即可以通过Peripherals选择对应的外设的对话框观察仿真结果)。

第三步

点击开始/停止仿真按键,开始仿真,出现如下界面

嵌入式工程师必备技能——软件仿真

Register即寄存器窗口,这里一般用于查看程序运行时间即Sec处,以及一些比较高级的bug查找,主要就是对CortexM3内核寄存器R0~R14数据进行分析是否异常。

Disassembly即反汇编窗口,C语言代码与汇编代码比对显示,方便从汇编级别进行查看程序运行状态,也是属于比较高级的bug查找。

代码窗口,就是我们的工程代码了。左侧有黄色和绿色两个三角形,黄色三角形代表将要执行的代码,绿色的三角形表示当前光标所在代码,一般情况下,两个三角形是同步的,只要你点击其他位置查看代码时,绿色三角形就会移位。

CallStack + Locals即调用关系和局部变量窗口,通过该窗口可以查看函数调用关系以及函数的局部变量,仿真调试时,很有用。

除了这些窗口,实际上还有一些其他窗口,可以根据实际需求去选择使用。
上图还有一个很重要的工具条即Debug工具条。

嵌入式工程师必备技能——软件仿真

复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。
执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。
停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。
执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。
执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。
执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。
执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。
汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。
堆栈局部变量窗口:通过该按钮,显示CallStack+Locals 窗口,显示当前函数的局部变量及其值,方便查看。
观察窗口:MDK5提供2个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗口,输入你所想要观察的变量/表达式,即可查看其值,是很常用的一个调试窗口。
内存查看窗口:MDK5提供4个内存查看窗口(下拉选择),该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口。
串口打印窗口:MDK5提供4个串口打印窗口(下拉选择),该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。
逻辑分析窗口:该图标下面有3个选项(下拉选择),我们一般用第一个,也就是逻辑分析窗口(LogicAnalyzer),点击即可调出该窗口,通过SETUP按钮新建一些IO口,就可以观察这些IO口的电平变化情况,以多种形式显示出来,比较直观。
系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。

以上是比较常用的,当然不是每次都用得着,具体看你程序调试时候的需求。

第四步

点击LogicAnalyzer并点击Setup新建两个信号PORTB.5和PORTE.5,具体操作如下:

嵌入式工程师必备技能——软件仿真

嵌入式工程师必备技能——软件仿真

两个信号的DisplayType都选择bit,然后点击Close关闭对话框,可以看到逻辑分析窗口出现两个信号,如下图所示。

嵌入式工程师必备技能——软件仿真


第五步

点击执行到断点处即。运行一段时间之后,按关闭按键,暂停仿真回到逻辑分析窗口,得到的波形如下图所示:

嵌入式工程师必备技能——软件仿真

这里注意:Gird要调节到0.2s左右比较合适,可以通过Zoom里面的In按钮来放大波形,通过Out按键来缩小波形,或者按All显示全部波形。从上图也可以看到PORTB.5和PORTE.5交替输出,从这里就可以判断代码的准确性了。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/132034.html

(0)

相关推荐

  • 治疗病人的同时抚养他们是没有用的。不能只吃药不吃醋。

    今天碰到一个年轻女病人,说是来看胃病,还有胃溃疡。

    生活 2021年11月29日
  • 中医六字诀,防治慢阻肺

    来源:生命时报

    生活 2021年9月18日
  • 大华股份发展机遇--深度布局云+边+端安防产品

    大家好!我是喵董。 近期,在首届新型智慧城市建设国际峰会上,涵盖智慧城市上、中、下游的诸多优质企业纷纷到来。就讨论的话题主题,AI 依旧是主角。 "AI+行业 "...

    科技 2021年11月2日
  • 《师道与传心》之百家篇(三)

    三、孙思邈:大医精诚 孙思邈(581~682年)[1],世称“孙真人”,后世尊之为“药王”,唐朝京兆长安华原(今陕西耀县)孙家塬人,他历经隋唐两代,是一位知识渊博、医术精湛的医家。...

    生活 2021年10月18日
  • 联想与司马南事件到底谁是谁非?

    这几天司马南在视频里面说联想柳老爷子有贱买了国有资产,柳老又发出去音频回应搞得大家都在关注,其实这里面是大家对联想恨铁不成钢的失望表达。因为差不多时间成立的华为成绩斐然,对国家和民族包括自己企业带来了很多荣誉和成果,这样一对比就非常失望,这里我个人觉得这里有个人性格因素在里面,作为柳老的性格比较强势,当时把企业搞得还不错,当他老了找接班人肯定不希望接班人太有性格(孙宏斌就是案例),你想啊如果接班人也是有个性强势上台后肯定有自己想法和作为,在作为的时候肯定要否定一部分柳老的一些决策,这个肯定是柳老不希望看到的(基本上老板用人优先用自己心腹忠于自己利益的人,不会用有能力的人,这个是人性)但是这个接班人杨元庆的确有点拉垮,没有什么拿得出手的业绩还拿那么高薪水,这就让很多人不满意了(虽然没有拿他们家里的钱)。很多人质疑柳老和创业元老倪光南先生之间办理联想集团线路,走了贸工技而不是技工贸路线,这里我个人感觉那个决策柳老应该没有什么大错误,毕竟创业开始缺钱啊 而且非常非常的缺(华为任总那个时候估计也一个头两个大吧),没钱谈什么研发,没钱哪里来的人才,只是联想在."贸‘’方面做得不错,“工”方面估计得有点辛苦就转身做投资了,就后来没有“技”了。这里我要说句公平公正的话,作为一个私人老板单纯赚钱并没有错,企业活下去才是真理(真话有点难听)但是联想承担了太多民众希望了,这所谓就是期望越大失望就越大。最后柳老回应音频里面感觉年龄大了决策也有点问题,音频里面柳老有点把员工带偏了,本来这个是柳老和司马南个人之间事情,音频里面说全体员工要同仇敌忾。还有我很佩服司马南质疑精神,因为你是成功人士就不能质疑了吗?每个人都有质疑和被质疑权利。

    科技 2021年11月21日