MDK软件仿真常见问题

一直不知道MDK该怎么仿真调试程序,之前试了好几次都没有成功。因为有个程序一直不知道里面的变量对应着外部怎么的模式,今天想起可以用仿真调试的方法查看当外部设置某种模式的时候,

内部变量的变化,这样想来,仿真调试真是太方便了,而且很实用,估计开发者当时开发这个功能的时候,估计就是出于这个目的吧,哈哈。

其实仿真并不难,就是有一点老是迷惑人,查了很多论坛,很多人都是因为这个问题不知道该怎么调试,就是进不去主函数,老是在systemint 里面徘徊,估计有情况,

其实如果这个问题解决了,也就那么回事。而且这也不是大家的问题,这个开发者当时开发

MDK的时候没有考虑到这个问题,所以有点小麻烦。

我主要是看到这个帖子,才知道了原来如此,这种大神真应该多发点文章,解决我们广大入门者的问题啊。

原文:http://blog.sina.com.cn/s/blog_3c63d2bd0102vt9a.html

问题描述:使用MDK进行软件设计时没有使用ST官方的模板而是手动建立的工程,使用ST官方提供的3.5版本固件库。编译完全通过,在使用软件仿真时出现问题,表现为程序无法跳转到main入口,直接在SystemInit()函数就无法执行,调试窗口出现如标题所示的错误信息:

error 65: access violation at 0x40021000 : no ‘read‘ permission

如下图所示,途中红圈分别表示了代码执行到的位置及相应的错误信息

网络上查找解决方案同时对比ST提供的3.5版本固件库中的工程模板,发现是工程配置选项中的debug选项卡的dialog dll和对应的parameter配置出了问题。选中MCU后默认的配置如下图:

可以看到dialog dll默认配置为DCM.DLL,而parameter默认配置为-pCM3,该种配置无法进行正常的仿真调试。

正确配置应该为dialog dll:DARMSTM.dll parameter:-pSTM32F103C8

这两个参数是根据你使用的MCU不同而不同的,例如本工程使用的MCU为STM系列,那么在dialog DLL选项中就应该使用DARMSTM.dll,名字中的STM就是指厂商,参数则是具体的MCU芯片型号,本项目使用STM32F103C8T6,因此选择为STM32F103C8,如下图所示:

为何使用的是STM32F103C8T6,参数却只能是STM32F103C8,这个原因是因为根据ST公司的MCU命名规则,到C8这个位置就已经完全规定了仿真所需要的所有参数,包括cpu频率,ram容量,flash容量,外设资源等内容。型号中后边的部分都已经和仿真无关了,例如后边的名字主要代表了MCU的封装,工作温度等。官方命名规则如下图:

当然还有一个更加直接的原因是DARMSTM.DLL这个动态链接库文件中没有详细的MCU型号,我们可以通过使用工具打开动态链接库文件查看证明,如下图所示,图中可以清楚的看到一个MCU的型号只有11个字符,不包括后边的其他参数字符。

总结:该问题的产生,归根到底还是keil IDE的问题,正常的情况,应该是通过工程向导建立工程的时候,配置参数就自动使用该MCU应该使用的dialogdll及相关参数。不得不感叹,KEIL有的时候也很傻啊!!

最后,上一下我的调试结果吧:

时间: 2024-10-19 14:00:45

MDK软件仿真常见问题的相关文章

KEIL MDK软件仿真

开发环境:keil MDK V5.10 操作系统:windows 7(32位) 问题描述:使用MDK进行软件设计时没有使用ST官方的模板而是手动建立的工程,使用ST官方提供的3.5版本固件库.编译完全通过,在使用软件仿真时出现问题,表现为程序无法跳转到main入口,直接在SystemInit()函数就无法执行,调试窗口出现如标题所示的错误信息: error 65: access violation at 0x40021000 : no 'read' permission 如下图所示,途中红圈分别

STM32F103学习3:通过器件参考手册和具体程序学习I/O操作(MDK软件仿真+硬件实验)

首先还是贴一下这个LED例程的部分代码: 1 int main() 2 { 3 4 Stm32_Clock_Init();//系统时钟设置 5 RCC->APB2ENR |= 0x00000001; //开启afio时钟 6 // AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000; //关闭JTAG 7 8 RCC->APB2ENR|=0X0000001c;//先使能外设IO PORTa,b,c时钟 9 10 GPIOB-&

stm32 MDK5软件仿真之查看io口输出

软件MDK5 stm32的pack 打开MDK,添加工程 一.首先找到Project的Options选项,里面的Debug选为Use Simulator,也就是选择软件仿真. 然后再Logic Analyzer的Setup选项里添加你要观察分析的IO,如PORTA.0.开始仿真后会看到逻辑分析窗口出现波形,调整Zoom的In或者Out就可以看到了 ①点开debug ②添加io ③运行 二.软件仿真时,MDK Logic Analyzer添加current logic analyzer signa

CCS2.2基于软件仿真简易教程(汇编)

CCS2.2基于软件仿真简易教程(汇编) Rev 1.0 Writer Nirvana Silence 配置目标芯片 打开此图标 导入配置,生成gel文件,导入点击close 然后关闭 保存changes 启动工程软件 新建工程.asm文件,添加到工程 新建文件 保存为汇编格式 添加到工程 编写程序,编译程序,load程序 在新建的ASM文件中输入以下程序,查看运行后(1030H).(1040H).*AR3,AR4的值 记得助记符前面至少要有一个空格 编译 没有问题,load .out文件 打开

Uvision5不能进行软件仿真

Uvision5不能进行软件仿真不能进行软件仿真,报错: error 65: access violation at 0x40021000 : no 'read' permission(软件仿真出错) *** error 65: access violation at 0x40021004 : no 'read' permission 出错原因:uvision5的问题,在debug中的dll和paramentor要改为DARMSTM.DLL和-pSTM32F103VC.

linux 服务器 采用命令和软件及常见问题

用什么命令查看redhat linux的版本? 使用uname -a或者less /proc/version都行. linux 服务器 采用命令和软件及常见问题,布布扣,bubuko.com

在Keil中做stm32的软件仿真,查看输出PWM波形时,在逻辑分析仪中规定IO口signal,出现"unknow signal"

文章源地址:http://blog.sina.com.cn/s/blog_dc9244010102vtn1.html 最近在学习STM32的PWM波输出,由于手中没有示波器,于是按照野火的教程使用软件仿真,使用MDK5自带的逻辑分析仪观察波形,前边一路顺利,在打开逻辑分析仪往里添加signal时,问题出现了——Unknown Signal!信号无法添加进去.在百度文库看到一篇关于MDK460相关问题的解决方案,于是我抱着试一试的态度,试了一试,结果挺好的,于是想到了和大家分享一下. 1.错误提示

stm32无法进入软件仿真

今天在进行软件仿真时,发现无法在逻辑仿真器中输入要观察的IO口,原因是Debug选项下的配置问题. 默认的配置是: Dialog DLL: DCM.DLL Parameter: -pCM3 改成以下配置即可进入逻辑仿真: Dialog DLL: DARMSTM.DLL Parameter: -pSTM32F103VC 注:进行逻辑仿真时,输入PORTB.5表示对GPIOB的第5引脚进行仿真,并且要注意选中仿真类型,是Analog(模拟),数字(Bit)还是状态(States).

uVision V5.11.1.0软件仿真进不了main函数,提示*** error 65: access violation at 0x40023800 : no 'read' permission

在百度找到一篇文章   http://www.keil.com/support/docs/814.htm 博客这篇文章           http://blog.sina.com.cn/s/blog_46d528490101qadk.html uVision V5.11.1.0软件仿真进不了main函数,提示*** error 65: access violation at 0x40023800 : no 'read' permission