MDK5.28(KEIL)使用经验总结(持续更新)

从一开始学习嵌入式开发,用的开发环境就是Keil,所以到现在也算是对它比较熟悉吧。本文是对它的一些使用经验总结:包括使用小技巧、常见错误解决等。本文内容基于MDK5.28(KEIL5.28版本)。

从安装开始

软件的安装先从32位的单片机开始,安装好之后我们再配置51的开发环境。

32位单片机开发环境的搭建

第一步:获取.exe文件,去官网下载自己喜欢的版本,然后管理员身份运行并安装在一个自己喜欢的路径下面即可。网上教程很多,这里不做过多的描述。
第二步:激活,激活教程网上也有很多,这里不讲。
第三步:手动导入.pack文件,因为KEIL5安装的时候不会自动把你想要开发的单片机的.pack安装,这和KEIL2和KEIL3有点不同,后两个安装的时候就会把51单片机的pack自动安装。不导入.pack文件的话,新建工程的时候你会神奇的发现找不到自己想要的单片机型号。导入自定义.pack文件之前需要先下载对应的pack文件,Keil官网提供各种厂商的单片机的.pack文件,以stm32为例:比如我要建立基于stm32f40x系列单片机的IDE,就先准备好下面的文件:
在这里插入图片描述
然后,打开桌面上的Keil快捷图标,点击下面的按钮,然后断网,并按下图箭头的指示选择本地pack文件并点击“打开”,最后等着右下角的进度条跑完即可。注意,如果选择本地导入的话一定要断网!

在这里插入图片描述
第四步:新建一个project并开心地敲代码。

搭建兼容C51的环境

如果只做到上一步是不能开发C51的,因为KEIL4及以上的版本就不再把51的开发库自动安装了。KEIL2和3是可以的,但是安装两个Keil软件总感觉太不爽,所以我们要手动配置一下,搭建一个还能开发C51的IDE。
第一步:下载一个安装包,名叫c51v960a.EXE,Keil官网也有,如果找不到或者嫌下载网速慢的话可以私聊笔者。然后双击点击安装,它会自动定位MDK的安装位置,直接点击Next就行了,安装好后再次打开Keil就可以建立基于C51单片机的project了。

如何优雅地调试

用KEIL仿真

当代码量不大的时候,是可以通过Keil直接来仿真的。步骤如下:
第一步:点击魔术棒,然后按下图所示配置:
在这里插入图片描述
第二步:选中Debug选项卡,按箭头修改相关配置如下:
在这里插入图片描述
注意,单片机的型号要和新建project的时候选择的单片机型号相一致。

然后点击:红色的“d”按钮,如下图:
在这里插入图片描述
选中调试窗口里的“Logic Analyzer”(逻辑分析仪),如下图:
在这里插入图片描述
会出现下面的样子:
在这里插入图片描述
先点击左边的“Setup”按钮,然后新建要分析的引脚,输入“PORTx.n”,x为ABCDEFG,n为0-15的数字,然后修改引脚属性为bit,最后点击close后,再点击全速运行代码,就会出现理想的波形了。 再点击红色的“d”就会退出软件仿真。

用Jlink/JTag调试

用这种方法调试的时候首先要修改调试方式,如下图:
在这里插入图片描述
然后点击上面的红色的“d”按钮,代码会先通过烧录器下载到单片机的flash里面,会进入类似上面仿真的界面:
在这里插入图片描述
从左到右分别是:复位、全速运行代码到断点处、灰色的×是用来退出全速运行状态的,后面4个是单步调试的按钮,对应的是:进入函数运行(如果主函数里面调用的子函数就会进入子函数,如果子函数还调用了别的子函数那还要进入第二级的子函数,以此类推)、跳过子函数(把子函数视为普通的语句)、跳出子函数(和第一个相反)、快速进入光标行。
上面提到了断点,断点的设置就是单击行号左侧的空白区。如下图:
在这里插入图片描述
再次点击红点就会取消设置的断点。

常见报错信息与解决办法

碰到了再写。。。

报错语句解决办法
xx.c(40): error: #268: declaration may not appear after executable statement in block错因:xx.c文件的第40行有一个变量声明语句,Keil里面不允许在代码块中间声明变量,只能在代码段的开头声明;解决办法:把该行语句放到代码段(例如函数体)的最开始的地方。
Error: L6218E: Undefined symbol main (referred from rtentry2.o).可能是main函数拼写错误
cannot open source input file “xxx.h”: No such file or directory没有包含头文件,可能是没有把“xxx.h”添加到project里面
Error: L6200E: Symbol aaaaa multiply defined (by porttimer.o and timer6.o).aaaaa重复定义,删掉一个就好了
stm32仿真的时候,跳转不到用户定义的main函数里面回到“用KEIL仿真”的第二步,设置仿真DLL参数值

未完待续。。。

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值