Keil相关

keil MDK也是可以借助h-jtag进行单步调试,写出来与大家一起分享一下:

keil MDK编译器使用V4.01版本,下载地址:

http://www.embedinfo.com/down-list.asp?id=714 (需要注册一下)

h-jtag使用V1.0版本(请注意,一定要用V1.0或者以上版本才可以与mdk兼容),下载地址

http://www.hjtag.com/download/H-JTAG%20V1.0%20Preview.zip

分别安装MDK与h-jtag

两个软件都安装完成后,首先,需要运行H-JTAG 安装目录下的TOOLCONF.EXE 程序,对KEIL 安装目录下的TOOLS.INI 配置文件进行更新。如下图所示。点击Config 按钮,对TOOLS.INI 进行配置,然后退出。注意在点击Config之前,要退出keil编译器。

接下来,就可以在 KEIL 下对项目进行配置。首先,重新运行KEIL,并在KEIL 中打开一个项目,然
后点击Project -> Options for Target…菜单,接下来,会弹出下图所示的Options 配置窗口。

在上图所示的Options 配置窗口中,选择Debug 设置,点击标签下的如图所示下拉按键,就可以看到H-JTAG ARM 调试驱动。如下图所示:

选中使用h-jtag硬件仿真,点击 OK 按钮,回到KEIL 的主窗口,KEIL 的设置就完成了。

然后编译程序,生成hex的目标文件,利用h-jtag的flash下载工具将目标文件下载到硬件。

下载完毕后,使用Crtl+F5进入单步调试界面。

围观 458

本文整理总结了大部分KEIL编译错误以及错误的释义,以帮助工程师更好地解决问题。

错误代码及错误信息 错误释义 

error 1: Out of memory 内存溢出  

error 2: Identifier expected 缺标识符  

error 3: Unknown identifier 未定义的标识符  

error 4: Duplicate identifier 重复定义的标识符  

error 5: Syntax error 语法错误  

error 6: Error in real constant 实型常量错误  

error 7: Error in integer constant 整型常量错误  

error 8: String constant exceeds line 字符串常量超过一行  

error 10: Unexpected end of file 文件非正常结束  

error 11: Line too long 行太长  

error 12: Type identifier expected 未定义的类型标识符  

error 13: Too many open files 打开文件太多  

error 14: Invalid file name 无效的文件名  

error 15: File not found 文件未找到  

error 16: Disk full 磁盘满  

error 17: Invalid compiler directive 无效的编译命令  

error 18: Too many files 文件太多  

error 19: Undefined type in pointer def 指针定义中未定义类型  

error 20: Variable identifier expected 缺变量标识符  

error 21: Error in type 类型错误  

error 22: Structure too large 结构类型太长  

error 23: Set base type out of range 集合基类型越界  

error 24: File components may not be files or objectsfile分量不能是文件或象  

error 25: Invalid string length 无效的字符串长度 

更多详情请点击下载附件!

点击下载

围观 528

从接触单片机开始,我们就知道有一个叫KEIL的软件。

在开发单片机时,使用的是C语言或者汇编语言,我们知道,这两种语言都不能直接灌到单片机里面,执不执行暂且不说,光是代码的体积,就足以撑破整个单片机。所以,我们需要一个软件,把C语言或者汇编语言编译生成单片机可执行的二进制代码,而且它的体积也非常的小,足够存放在单片机的存储器里面。

KEIL公司(现在是ARM公司的一个公司)的软件恰好可以提供这样的功能,并且它还有很多优点,比如工程易于管理,自动加载启动代码,集编辑、编译、仿真一体,调试功能强大等等。因此,不管是初学单片机的爱好者,还是经验丰富的工程师,都非常喜欢使用这些软件。 但是,即使熟练使用了KEIL软件,有些概念我们还是不容易理清,常常混淆:KEIL、uVision、RealView、MDK、KEIL C51,它们到底有什么区别,又有什么联系?下面我们就做一个详细的分析。

KEIL是公司的名称,有时候也指KEIL公司的所有软件开发工具。

uVision是KEIL公司开发的一个集成开发环境(IDE),和Eclipse类似。它包括工程管理,源代码编辑,编译设uVision置,下载调试和模拟仿真等功能,uVision有uVision2、uVision3和uVision4三个版本,目前最新的版本是uVision4。它提供一个环境,让开发者易于操作,并不提供能具体的编译和下载功能,需要软件开发者添加。uVisionu通用于KEIL的开发工具中,例如MDK,PK51,PK166,DK251等。

RealView是一系列开发工具集合的称呼,简称RV,包括有RVD(RealView Debugger),RVI(RealView ICE),RVT(RealView Trace),RVDS(RealView Development Suite),RV MDK(RealView Microcontroller Development Kit)这些产品。就像米尔科技的硬件开发板板,总共有三种,即开发板、单板机和核心板,所以他们把自己的产品分成开发板(MYD)系列,单板机(MYS)系列和核心板(MYC)系列,各系列产品之间是有相似共同点的,是有联系的。

MDK(Microcontroller Development Kit),即KEIL MDK、RealView MDK或者KEIL For ARM,ARM公司现在统一使用MDK-ARM的称呼,MDK的设备数据库中有很多厂商的芯片,是专为微控制器开发的工具,为满足基于MCU进行嵌入式软件开发的工程师需求而设计,支持ARM7,ARM9,Cortex-M3/M1,Cortex-R0/R4等ARM微控制器内核。

KEIL C51,亦即PK51,KEIL公司开发的基于uVision IDE,支持绝大部分51内核的微控制器开发工具。

KEIL C166,亦即PK166,KEIL公司开发的基于uVision IDE,支持绝大部分XC16x,C16x和ST10系列的微控制器开发工具。

KEIL C251,亦即DK251,是KEIL公司开发的基于uVision IDE,支持绝大部分基于251核的微控制器的开发工具。

总结来说,KEIL公司目前有四款独立的嵌入式软件开发工具,即MDK、KEIL C51、KEIL C166、KEIL C251,它们都是KEIL公司品牌下的产品,都基于uVision集成开发环境,其中MDK是RealView系列中的一员。

围观 291

在单片机系统中,串口(UART,通用异步收发接口)是一个非常重要的组成部分。通常使用单片机串口通过 RS232/RS485 电平转换芯片与上位机连接, 以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的 连接等。RS232/RS485 串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大 的场合,串口通信仍然是很好的选择,有着广阔的使用前景。
 
在单片机编程中,串口占了很重要的地位。传统方式串口程序的调试,往往是利用专用的单片机硬件仿真器。在编写好程序后,利用仿真器来设置断点,观察变量和程序的流程,逐步对程序进行调试,修正错误。使用硬件仿真器的确是很有效的方法,但是也有一些缺点: 

很多仿真器不能做到完全硬件仿真,因而会造成仿真时正常,而实际运行时出现错误的情况;也有仿真不能通过,但是实际运行正常的情况。 

对于一些较新的芯片或者是表面贴装的芯片,要么没有合适的仿真器或仿真头;要么就是硬件仿真器非常昂贵,且不容易买到。 

有时由于设备内部结构空间的限制,仿真头不方便接入。 

有的仿真器属于简单的在线仿真型,仿真时有很多限制。例如速度不高, 实时性或稳定性不好,对断点有限制等,造成仿真起来不太方便。 

1.调试前的准备工作 

下面介绍一种利用的功能来实现 51 单片机用户程序的方法。使用这种方 法,无需任何硬件仿真器,甚至都不需要用户电路板。所需的只是: 

①硬件。1 台普通计算机(需要带有 2 个标准串口)和1根串口线(两头都是母头,连线关系如图1所示)。

②串口软件可以是自己编写的专用调试或上下位机通信软件,也可以是通用的串口软件(如串口助手、串口调试等),主要用来收发数据。


 
2.基本调试命令介绍 

这个串口调试方法主要是利用了 Keil 强大的软件仿真功能。在新版本(高于 6.0)的 Keil 软件中,增强了软件的仿真能力,可以利用软件仿真更多的单片机功能。在这些功能中,其中有一个很重要的功能就是利用计算机的串口来模拟单片机的串口(这不同于很多软件在仿真时使用的激励文件方式,可以直接与其他串口进行通信,更加方便、灵活)。首先要介绍仿真时需要使用的两 个命令:ASSIGN和MODE。
 
2.1 ASSIGN命令 

将单片机的串口绑定到计算机的串口。基本使用方式为:

ASSIGN channeloutreg 

其中: channel 代表计算机的串口,可以是 COM1、COM2、COM3 或 COM4; 而 inreg 和 outreg 代表单片机的串口。对于只有一个串口的普通单片机,即 SIN 和 SOUT;对于有两个或者多个串口的单片机,即 SnIN 和 SnOUT(n=0, 1,…即单片机的串口号)。 

例如:ASSIGN COM1SOUT 

将计算机的串口1绑定到单片机的串口(针对只有一个串口的单片机)。

 ASSIGN COM2S0OUT 

将计算机的串口 2 绑定到单片机的串口 0(针对有多个串口的单片机,注意串口号的位置)。 

需要注意的是,参数的括号是不能省略的,而outreg则是没有括号的。 

2.2 MODE命令 

设置被绑定计算机串口的参数。基本使用方式为: 

MODE COMx baudrate, parity, databits, stopbits 

其中: COMx(x = 1,2,…)代表计算机的串口号;baudrate 代表串口 的波特率;parity 代表校验方式;databits 代表数据位长度;stopbits 代表 停止位长度。 

例如:MODE COM1 9600, n, 8, 1 

设置串口1。波特率为9600,无校验位,8位数据,1位停止位。 

MODE COM2 19200, 1, 8, 1 

设置串口2。波特率为19200,奇校验,8位数据,1位停止位。 

使用以上两个命令,就能够将计算机的串口模拟成单片机的串口了。在进 行软件仿真时,所有发送到被绑定的计算机串口上的数据都会转发到 Keil 模拟 的单片机串口上,用户程序可以通过中断处理程序或查询方式接收到这些数 据;同样,单片机程序中发送到单片机串口上的数据也会通过被绑定的计算机串口发送出来,可以被其他软件所接收。利用这个特点,就可以方便地仿真、 调试单片机的串口部分程序。要注意的是,这两个命令需要一起使用。
 
2.3 仿真步骤 

首先,用串口线将计算机的两个串口连接起来(或者是两台计算机上的两 个串口)。这两个串口一个用来模拟单片机串口,另一个给调试程序使用。这 个由用户自己分配,没有特殊要求。 

其次,编写好用户程序,并编译通过。
 
然后,设置工程文件(Project)的相关参数,如图 2 和图 3 所示。主要是 选择模式(Use Simulator)以及晶振参数。

为了不必每次进入仿真状态后,都需要输入串口参数设置命令,可以建立一个初始化文件。初始化文件是一个普通的文本文件,内容就是仿真时需要的命令,按照顺序一行输入一条。如图 3 所示,建立了一个 debug.ini 的初始化文件。这样,当每次进入仿真调试状态时,就会自动载入 debug.ini 的内容进行初始化。

为了正确仿真串口,在软件仿真调试时,在用户的 Keil 工程文件的属性中,还需要设置实际使用的晶振频率。这个参数非常重要,直接影响通信的波特率,可以按照实际使用的参数进行设置。要注意,这个参数的单位是MHz。 

设置好参数后,就可以进行仿真了。单击工具栏的图标  进入 Debug(仿 
真调试)状态,在 Output window 窗口中的 command 文本框(一般是在左下角)中输入上面介绍的命令。例如,将PC机的串口1设置为单片机的串口: 

mode com1 9600,0,8,1 

assign com1sout 

然后设置断点,一般是在关键地方或与串口相关联的地方设置。再单击图标运行(Run)用户程序,使用户程序运转起来(不然是接收不到串口数据的)。这时再使用软件或用户调试软件,发送通信命令或者数据包,看用户程序是否进入断点,以及相关的变量是否正确。还可以有意发送带有错误数据的数据包,以观察用户程序的异常处理部分是否正常。一旦发现程序中的错误, 可以马上停止仿真调试,立即修改代码,然后再次重复上面的步骤进行仿真。 因为不需要与用户目标板联机,也不用下载代码到用户板上,所以速度非常高。以上这些步骤和使用硬件仿真器的基本一样,只不过现在使用的是软件仿真。 

需要注意的是:仿真时单片机串口实际的波特率由 MODE 命令来指定,单片机程序中的 TMOD、SCON 等参数是不影响串口仿真状态的(也就是说这些参数不 影响仿真的波特率,即使它们是错误的)。但是中断的使能位(如 ES、EA 等) 还是起作用的,如果ES或EA被禁止,那么就不会进入串口中断。 

因为这种方法是利用计算机的串口来仿真单片机的串口,而仿真是通过 Keil 软件来转换串口上的数据,不是直接转发数据的,所以在实际仿真时,处理速度会比实际单片机运行时稍微低一点。比方说仿真状态时 1s 只能发送/接收 10 个数据帧,但在单片机硬件上运行时可能 1s 就可以接收/发送 50 个数据 帧。这与使用的计算机的速度有关,但对仿真来说,是没有任何影响的。 

对于多串口的单片机,从理论上来说,可以一次绑定多个串口,只要计算机有足够多的串口。基本上,使用这种方法需要占用计算机的串口数量是单片 机绑定串口的 2 倍。一个串口被 Keil 占用,用来模拟单片机的串口;另外一个 串口被计算机占用,用来给单片机的串口收发数据。 

3.小结 

这里介绍的方法对 C51 和汇编语言都是适合的。它最大的好处就是简单、 方便,容易使用,不需要使用任何电路,也没有特殊的要求;甚至可以在硬件电路制作好之前就将串口部分的程序编写、调试完毕。笔者使用这种方法已经很长时间了,事实证明这种方法确实非常有效。其实对于 51 单片机,Keil 的 仿真功能实在是太强大了,只要充分掌握其特点,能够熟练利用它,就可以解决工作中的大部分问题。很多工作都可以使用软件仿真来完成,根本无需任何 硬件仿真器;只有一些新的外部器件的时序、接口的调试才有可能需要用到硬件仿真器。目前介绍 Keil 软件仿真这方面的参考书籍很少,有些讲的还是老版本的用法,不过没有关系,Keil 的帮助文件写得很详细、很清楚,只要认真看明白就会使用了。使用熟练后,就会发现Keil的功能相当强。 

对于串口编程,51 单片机有 Keil 这个功能强大的开发软件,给我们带来了极大的便利;而在其他单片机软件的开发中,目前还没有这么强大的开发工 具和方便的调试手段。这里有个变通的办法,就是可以先在 Keil 中编写并调试 好串口程序,然后将程序移植到其他单片机平台中。至于如何能够减小程序移植的工作量,使得程序具有更好的通用性,以最小的代价就可以平滑地移植到 其他单片机平台上,也是一个非常值得探讨的问题。
 
4.再上一层楼 

说了那么多,咱们现在的电脑大多只有一个串口,最起码机箱后面只有一个串口的接口,而现在大多笔记本没有串口,即使使用 USB 转的串口,那也只 有一个。 

那就不能用这种方法仿真了呗? 

非也,还是有解决方法的,看看下边怎么处理。

这是什么软件?呵呵,可以虚拟串口的软件,先到 NT5 文件夹下执行那个 vsbsetup 的文件,看到一个黑窗口闪过,然后再回来运行 vspdconfig,就可以运行起来了,运行的界面看看后面图片。


怎么样?什么?英文的?别怕,就点一个按钮而已。 看到右侧那个叫“Add pair”的按钮了?点击它。

呵呵,电脑好像响了一声,好像有时查U盘的声音,有硬件变化一样。 当然,看看左侧,出来了 COM3 和 COM4 了,对呀,虚拟出了两个串口,并 且已经配对了。

到设备管理器里看看,多出来两个串口,确实已经配对。 怎么用?Keil用一个,串口调试助手用一个呗!

文章来源:百度文库

围观 490

先说一个概念:调试,在企业程序设计里(我把企业商务类型的软件开发叫企业程序设计,把单片机与驱动程序这样接触底层汇编与硬件相关的程序设计叫底层程序设计),调试一般都用来跟踪变量的赋值过程,以及查看内存堆栈的内容,查看这些内容的目的在于观察变量的赋值过程与赋值情况从而达到调试的目的。由于企业程序的宿主就是开发它的计算机本身,因此企业程序设计比起底层程序设计,特别是单片机的程序设计调试来的更直观,调试也更方便。

单片机的程序设计调试分为两种,一种是使用软件模拟调试,意思就是用开发单片机程序的计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的,但是软件调试存在一些问题,如计算机本身是多任务系统,划分执行时间片是由操作系统本身完成的,无法得到控制,这样就无法时时的模拟单片机的执行时序,也就是说 ,不可能像真正的单片机运行环境那样执行的指令在同样一个时间能完成(往往要完成的比单片机慢)。为了解决软件调试的问题,第二种是硬件调试,硬件调试其实也需要计算机软件的配合,大致过程是这样的:计算机软件把编译好的程序通过串行口、并行口或者USB口传输到硬件调试设备中(这个设备叫仿真器),仿真器仿真全部的单片机资源(所有的单片机接口,并且有真实的引脚输出),仿真器可以接入实际的电路中,然后与单片机一样执行。同时,仿真器也会返回单片机内部内存与时序等情况给计算机的辅助软件,这样 就可以在软件里看到真实的执行情况。不仅如此,还可以通过计算机断的软件实现单步、全速、运行到光标的常规调试手段。


图1:仿真器

总结一下两者的不同与相同:

相同点:

1:都可以检测单片机执行时序下的片内资源情况(如R0-R7 、PC计数器等)

2:可以实现断点、全速、单步、运行到光标等常规调试手段。

不同:

1:软件调试无法实现直接连接硬件电路的调试,只能通过软件窗口虚拟硬件端口的电平输出情况而仿真器可以实现与单片机一样的功能的硬件连接,从某种意义上说这个时候仿真器就是一个单片机。

2:软件调试执行单片机指令的时间无法与真实的单片机执行时间画上等号,也就是说如果一个程序在单片机中要执行300us,可能在计算机中执行的时间可能会比这个长很多,而且无法预料。仿真器则是完全与单片机相同。

3:软件调试只能是一种初步的,小型工程的调试,比如一个只有几百上千行的代码的程序,软件调试能很好的完成,如果是一个协调系统,可能还需要借助几个单片机仿真器和相关的仪器才能解决。

4:软件仿真不需要额外花钱,而硬件需要,一个仿真器一般都上千元,同时可以仿真许多种单片机的工作。

最后,调试一般都是在发生错误与意外的情况下使用的,如果程序能正常执行调试很多时候是用不上的,所以最高效率的程序开发还是程序员自己做好规范,而不是指望调试来解决问题。

下面将具体介绍如何使用Keil uVision 来软件调试单片机程序。

首先:打开一个已经编译通过的单片机项目(如何新建与编译单片机程序项目这里省略)

选择Debug下面的Start/Stop Debug Session,这个选项可以打开调试也可以关闭调试

接下来看到的窗口就是调试窗口了:

下面具体说说相关子窗口的功能:

1:左侧的ProjectWorkspace

Regs是片内内存的相关情况值,Sys是系统一些累加器、计数器等。Regs很简单就不多说。具体介绍一下Sys

a 累加器ACC,往往在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)。

b 寄存器B ,主要用于乘法和除法操作

sp

sp_max

dptr 数据指针DPTR

PC $

states 执行指令的数量

sec 执行指令的时间累计(单位 秒)

psw 程序状态标志寄存器PSW,八位寄存器,用来存放运算结果的一些特征,如有无进位、借位等。

p 奇偶标志P。反映累加器ACC内容的奇偶性,如果ACC中的运算结果有偶数个1(如11001100B,其中有4个1),则P为0,否则,P=1。

f1

ov 溢出标志位OV。MCS-51反映带符号数的运算结果是否有溢出,有溢出时,此位为1,否则为0。

rs

f0

ac 辅助进位标志AC。又称半进位标志,它反映了两个八位数运算低四位是否有半进位,即低四位相加(或减)有否进位(或借位),如有则AC为1状态,否则为0。

cy 进位标志CY(PSW7)。它表示了运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0

由于PSW存放程序执行中的状态,故又叫程序状态字?运算器中还有一个按位(bit)进行逻辑运算的逻辑处理机(又称布尔处理机)

根据指令执行的不同上述值会有相应的变化,也正是为了监测这些在单片机中看不到的值而达到调试的目的。

虽然软件调试无法实现硬件调试那样的信号输出,但是可以通过软件窗口的模拟监测输出信号的高低电平以及单片机相关端口的变化。

上图所示,Port0,Port1,Port2,Port3就对应于单片机的四个P0,P1,P2,P3 口,共32个针脚。

这是全部打开后的效果。

有了输出,就应该有输入的设置:

这个按钮可以打开输入预设窗口,输入值窗口如下:

选择不同的Int Source 会有不同的 Selected Interrupt的变化,通过选择与赋值达到模拟输入的目的。

接下来是串口的设置:


这是设置串口的窗口

监测窗口数据还有一个窗口:

点击:

将会出现,这个窗口可以监测从串口输出的ASCII代码。

关于串口的问题,以后我会有专门的文章介绍,这里就这样大致介绍一下。

最下面还有一个定时器的设置:

3个定时器与一个看门狗,设置定时器的数量与工程选择的单片机种类有关系,如果是8051就只有2个定时器,如果是选择8052 就有3个定时器了。

定时器的设置很简单:

参考的数很多,这里暂时省略了,以后以专门的篇幅介绍。

下面再介绍一下一些常用的调试按钮:

就是Reset ,相当于单片机最简系统的复位按钮,按下后,所有的系统状态将变成初始状态

这是全速运行,相当于单片机的通电执行。

这个就是停止全速运行的按钮。

step into 逐语句;进入并单步执行;单步执行

step over 逐过程

step out 跳出

执行到断点处

可以在代码所在窗口的最左边右击按钮插入一个断点,如下图所示:

有了这个功能,你就可以控制监控要执行到某位置时系统的状态。

最后在介绍一下一个很实用的功能:

这个是Disassembly Windows,按下后可以把C51 Disassembly 为相应的汇编语言,如果你有 相应的汇编知识的话就可以对比C51 与汇编的对比了。由于汇编的效率高很多,这也可以作为查看C51执行效率的一个方法。

上图中就可以看出,C51 代码是如何被解释为汇编的。

其实调试还有很多的功能,我这里只是介绍了一小部分,希望能起到抛砖引玉的作用,更多的细节需要你自己去发掘与学习。

文章来源:博客园

围观 296

1.1 RealView MDK简介

RealView MDK是ARM公司最先推出的基于微控制器的专业嵌入式开发工具。它采用了ARM的最新技术工具RVCT,集成了享誉全球的μVision IDE,因此特别易于使用,同时具备非常高的性能。与ARM之前的工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20%。

1.2 J-LINK仿真器介绍

全功能版J-LINK配合IAR EWARM,ADS,KEIL,WINARM,Real View等集成开发环境支持所有ARM7/ARM9/Cortex内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。最显著的特点:速度快,FLASH断点不限制数量,支持IAR、KEIL、ADS等环境。

* USB 2.0接口;

* 支持任何ARM7/ARM9 核,Cortex M3 supported;

* 下载速度达到600k byte/s;

* DCC速度到达800k byte/s;

* 与IAR Workbench可无缝集成;

* 通过USB供电,无需外接电源;

* JTAG最大时钟达到12M;

* 自动内核识别;

* 自动速度识别;

* 支持自适应时钟;

* 所有JTAG信号能被监控,目标板电压能被侦测;

* 支持JTAG链上多个设备的调试;

* 完全即插即用;

* 20Pin标准JTAG连接器;

* 宽目标板电压范围:1.2V-3.3V (可选适配期支持到5V);

* 多核调试;

* 包括软件:J-Mem,可查询可修改内存;

* 包括J-Link Server (可通过TCP/IP连接到J-Link);

* 可选配J-Flash,支持独立的Flash编程;

* 选配RDI插件使J-Link适合任何RDI兼容的调试器如ADS、Relview和Keil等;

* 选配RDI Flash BP,可以实现在RDI下,在Flash中设置无限断点;

* 选配RDI Flash DLL,可以实现在RDI下的对Flash的独立编程;

* 选配GDB server,可以实现在GDB环境下的调试。

点击下载

围观 331

首先要说明,没有哪款开发工具是万能的,也没有哪款工具在所有方面都具有绝对优势。对于Keil MDK-ARM和IAR两款工具择,可以根据自己的习惯来选择,而不应该在使用其中的一款时贬低另外一款,或者总是赞美自己的选择。

好了,下面开始讲Keil MDK-ARM和IAR的区别。

一、概述

Keil MDK-ARM(旧称RealView MDK)开发工具源自德国Keil公司,被全球上百万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。

KEIL MDK集成了业内最领先的技术,包括uVision3、uVision4、uVision5集成开发环境与 ARM编译器。支持ARM7、ARM9、Cortex-M0、Cortex-M0+、Cortex-M3、Cortex-M4、Cortex-R4内核核处理器。

Keil MDK可以自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,ARM编译器的最新版本可将性能改善超过20%以上。
  
IAR Embedded Workbench是一套用于编译和调试嵌入式系统应用程序的开发工具,支持汇编、C和C++语言。它提供完整的集成开发环境,包括工程管理器、编辑器、编译链接工具和C-SPY调试器。IAR Systems以其高度优化的编译器而闻名。每个C/C++编译器不仅包含一般全局性的优化,也包含针对特定芯片的低级优化,以充分利用您所选芯片的所有特性,确保较小的代码尺寸。IAR Embedded Workbench能够支持由不同的芯片制造商生产,且种类繁多的8位、16位或32位芯片。

二、区别

1、MDK不支持层叠文件夹,在文件夹的下一级中必须为文件;IAR支持层叠,可以比较方便管理代码,理清层次。


2、MDK连接library,直接添加到文件夹即可;IAR则需要从工程中选项中设置。这应该不算什么问题,毕竟大多数IDE都是这么做的,但最让人很郁闷的是,IAR不能采用相对路径。比如../MUF/MUF.LIB在编译时,就会连接到别的目录,只能采用d:/MUF/MUF.lib绝对路径的形式。


3、 MDK支持dynamic_cast<>运算符,而IAR文档中明确表示不支持。如果在IAR中强行使用该运算符,则编译会报错:

Error[Pe020]: identifier "dynamic_cast" is undefined

4、MDK默认只创建工程,工作区是不会直接创建。如果想多个工程聚合,则首先需要创建一个multi的工作区,然后再添加相应的工程。 IAR,默认是创建工程和工作区,如果想多个工程并存,直接添加即可。 相比之下,MDK创建工程的文件比较少,而IARM创建工程生成的文件比较多。

5、MDK编译时,只有level的选择;IAM有debug和Release的快速选择

6、默认状态,MDK的工具栏功能比较多,有点繁杂;IAM的比较简洁,但相对,也比较单薄。

7、MDK的C++有std::这个命名空间;IAR下面的所有容器和算法,都不采用std命名空间

8、MDK的程序文件,最后必须要有一个新的空行,否则会有编译警告:

warning: #1-D: last line of file ends without a newline

一般来说,如果主要是采用C,并且也不会有太多的library需要连接,MDK和IAR都能胜任。不过这种情形就比较推荐IAR,因为其非常简洁,上手也快,代码层次也能清晰明了。
  
如果主要是采用C++,并且用到很多特性,或是需要有多个工程进行协作,那么注定只能选择MDK,只不过这样就一定要每个文件最后加上新的空行了。

文章来源:米尔科技

围观 383

调试,在企业程序设计里(我把企业商务类型的软件开发叫企业程序设计,把单片机与驱动程序这样接触底层汇编与硬件相关的程序设计叫底层程序设计),调试一般都用来跟踪变量的赋值过程,以及查看内存堆栈的内容,查看这些内容的目的在于观察变量的赋值过程与赋值情况从而达到调试的目的。由于企业程序的宿主就是开发它的计算机本身,因此企业程序设计比起底层程序设计,特别是单片机的程序设计调试来的更直观,调试也更方便。

单片机的程序设计调试分为两种,一种是使用软件模拟调试,意思就是用开发单片机程序的计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的,但是软件调试存在一些问题,如计算机本身是多任务系统,划分执行时间片是由操作系统本身完成的,无法得到控制,这样就无法时时的模拟单片机的执行时序,也就是说 ,不可能像真正的单片机运行环境那样执行的指令在同样一个时间能完成(往往要完成的比单片机慢)。为了解决软件调试的问题,第二种是硬件调试,硬件调试其实也需要计算机软件的配合,大致过程是这样的:计算机软件把编译好的程序通过串行口、并行口或者USB口传输到硬件调试设备中(这个设备叫仿真器),仿真器仿真全部的单片机资源(所有的单片机接口,并且有真实的引脚输出),仿真器可以接入实际的电路中,然后与单片机一样执行。同时,仿真器也会返回单片机内部内存与时序等情况给计算机的辅助软件,这样 就可以在软件里看到真实的执行情况。不仅如此,还可以通过计算机断的软件实现单步、全速、运行到光标的常规调试手段。

点击下载

围观 331

页面

订阅 RSS - Keil相关