KeilMDK-ARM集成开发环境.ppt
Embedded System Development,嵌入式系统与应用,第4章 Keil MDK-ARM集成开发环境,3.1 Keil MDK-ARM简介3.2 Keil MDK-ARM安装3.3 Keil MDK-ARM集成开发环境3.4 新建Thumb汇编程序项目3.5 Thumb汇编程序编译与调试,3.1 Keil MDK-ARM简介,Keil MDK-ARM(Microcontroller Development Kit)开发工具源自德国Keil(),被全球超过10万的嵌入式开发工程师使用。支持 1200 多种基于 ARM Cortex-M 系列、ARM7、ARM9 和 Cortex-R4 处理器的设备。它包含众多示例、项目模板和中间件库,具有广泛的 TCP/IP 软件堆栈、Flash 文件系统、USB 主机和设备堆栈、CAN 访问以及舒适的图形用户界面解决方案。易于使用的 IDE 和带有高级分析功能的全功能调试器可帮助开发人员快速启动项目,并集中精力实现其应用程序的差异功能。MDK-ARM四种版本:MDK-Lite、基础版、标准版和专业版。都提供C/C+开发环境,专业版包括丰富的中间件库。,Keil MDK-ARM简介,PC、IDE开发环境、仿真器、开发板,宿主机,仿真器,开发板,IDE开发环境,逻辑分析仪,示波器,Keil MDK-ARM,Keil MDK-ARM简介,支持 Cortex-M、Cortex-R4、ARM7 和 ARM9 设备行业领先的 ARM、C/C+编译工具链采用Vision4 IDE、调试器和模拟环境Keil RTX 占用空间小的实时操作系统(具有源代码)TCP/IP 网络套件提供多个协议和各种应用程序USB 设备和 USB 主机堆栈配备标准驱动程序类ULINKpro 支持对正在运行的应用程序进行即时分析并记录执行的每条 Cortex-M 指令,Keil MDK-ARM简介,有关程序执行的完整代码覆盖率信息执行性能分析器和性能分析器支持程序优化大量示例项目可帮您快速熟悉 MDK-ARM 强大的内置功能符合CMSIS,Cortex微控制器软件接口标准在ARM公司的网站()注册、下载最新的Keil MDK-ARM开发工具软件,MDK-Lite版:受限制的32K编译、链接、部分模块功能。,Keil MDK-ARM简介,MDK-Lite版:mdk_514.exe,约280M,下载后直接安装。,第三章 Keil MDK-ARM集成开发环境,3.1 Keil MDK-ARM简介3.2 Keil MDK-ARM安装3.3 Keil MDK-ARM集成开发环境3.4 新建Thumb汇编程序项目3.5 Thumb汇编程序编译与调试,3.2 Keil MDK-ARM安装,Keil MDK-ARM安装,软件安装后,会自动打开Pack Installer包安装向导,选择相应芯片的驱动包进行在线安装、或下载包离线安装。包含了软件包、例子、接口驱动、板子驱动等。,Keil MDK-ARM安装,在线安装pack或example:先从右侧Device栏筛选某芯片型号,左边Packs(或Example)栏就会出现相应的pack(或example),再点击install等待即可。,离线安装包:在Summary栏可跳转到对应页面下载安装包DFP文件。下载后的DFP文件,可直接安装到开发环境内。,Keil MDK-ARM安装,下载后的DFP文件,可直接安装到开发环境内。,Keil MDK-ARM安装,本课程后续学习,根据你的开发板选择下载安装包:CMSIS(Cortex Microcontroller Software Interface Standard):芯片型号选择包如:STMicroelectronics STM32F1 Series Device Support,Drivers and Examples:在安装后目录下可找到帮助文件:uv4.chm,第3章 Keil MDK-ARM集成开发环境,3.1 Keil MDK-ARM简介3.2 Keil MDK-ARM安装3.3 Keil MDK-ARM集成开发环境3.4 新建Thumb汇编程序项目3.5 Thumb汇编程序编译与调试,3.3 Keil MDK-ARM集成开发环境,安装后在桌面快捷图标,或开始菜单启动即可。,Toolbars,WatchWindow,MemoryWindow,Logic Analyzer,EditorWorkspace,Menu Bar,ProjectWorkspace,OutputWindow,Toolbox,Page Tabs,PeripheralDialog,1、File 菜单,芯片数据库,Licenses注册管理,新建、保存源程序文件,2、Edit 菜单,Edit菜单-Configuration,编辑器设置菜单:,代码编辑器设置,颜色与字体设置,用户关键字,快捷键,代码模板,3、View 菜单,显示或隐藏状态栏,显示或隐藏文件工具条,显示或隐藏编译工具条,显示或隐藏调试工具条,显示或隐藏工程空间,显示或隐藏输出窗口,显示或隐藏浏览窗口,显示或隐藏反汇编窗口,显示或隐藏Watch&Call Stack 窗口,显示或隐藏存储器窗口,显示或隐藏代码覆盖窗口,显示或隐藏性能分析窗口,显示或隐藏逻辑分析仪窗口,显示或隐藏符号窗口,显示或隐藏Call Stack,显示或隐藏Trace显示窗口,显示或隐藏串行窗口,显示或隐藏SFR寄存器,显示或隐藏工具箱,运行时更新调试窗口,显示或隐藏源文件中的头文件,4、Project菜单,创建一个新项目,创建一个新工作区,导入一个项目,打开一个项目,关闭当前项目,维护工程组件、配置环境及管理书,从设备库中选择CPU,改变目标、组、文件的工具选项,清除编译生成的文件,编译已修改的文件,批处理编译,编译当前文件,停止编译,重新编译所有的源文件,打开最近使用的项目文件,5、Flash 菜单,擦除Flash,配置Flash工具,下载程序映象到Flash中,6、Debug 菜单,运行到下一个活动断点,单步运行进入一个函数,单步运行跳过一个函数,从当前函数跳出,运行到当前行光标处,启动或停止Vision3调试模式,停止运行,打开断点对话框,在当前行设置断点,Enable/disable当前行的断点,使程序中的所有断点无效,去除程序中的所有断点,显示下一条要执行的指令,DEBUG设置,使能Trace跟踪,查看Trace结果,记录代码执行次数或时间,打开逻辑分析仪对话框,打开存储器映射对话框,打开性能分析仪对话框,打开在线汇编对话框,编辑调试函数及调试初始化文件,其他菜单,7、Peripherals 外设菜单8、Tools 菜单9、SVCS 菜单10、Windows菜单11、Help 菜单,第3章 Keil MDK-ARM集成开发环境,3.1 Keil MDK-ARM简介3.2 Keil MDK-ARM安装3.3 Keil MDK-ARM集成开发环境3.4 新建Thumb汇编程序项目3.5 Thumb汇编程序编译与调试,3.4 新建Thumb汇编程序项目,第一步:打开Vision5集成开发环境,在Project菜单中新建项目,在弹出框中选择项目存放路径、填写项目名称,新建Thumb汇编程序项目,第二步:进入Select Device for Target 选项卡,选择CPU芯片型号,如ARMCM4:,新建Thumb汇编程序项目,第三步:弹出Manage Run-Time Environment选项卡,管理运行时环境,选择已安装的软件包(软件组件)。设置汇编程序时直接点击OK跳过即可完成项目设置。,第四步:Options for Target-1,第四步:Options for Target,目标板硬件和开发环境配置。Debug 设置调试器,选择Use Simulator使用模拟器。,Options for Target-2,其余选项卡默认即可Device 选择芯片型号Target 配置硬件Output 设置输出文件Listing 设置表单文件User 设置用户自定义程序C/C+设置C/C+编译器Asm 设置汇编器LInker 设置链接器Utilites设置Flash下载工具,第五步:编写简单的Thumb 汇编程序,File文件菜单,新建源程序文件,然后另存为TEST1.S;文件名:TEST1.S AREA|test1.s|,CODE,READONLY;声明只读代码段 DCD _Vectors DCD Reset_Handler EXPORT _Vectors EXPORT Reset_Handler_Vectors Reset_Handler PROC;PROC/ENDP函数起始START MOV R0,#15;R0=15 MOV R1,#8;R1=8 ADDS R0,R0,R1;R0=R0+R1 BSTART ENDP;此处函数起始标记可省 END,使用“;”进行注释,标号顶格写,实际代码段,声明文件结束,第六步 汇编程序源文件添加到项目中,第六步 汇编程序源文件添加到项目中,新建Thumb汇编程序项目,经过上述六步,即可进行程序的编译、调试、模拟运行等。,项目文件窗口,第四章 Keil MDK-ARM集成开发环境,4.1 Keil MDK-ARM简介4.2 Keil MDK-ARM安装4.3 Keil MDK-ARM集成开发环境4.4 新建Thumb汇编程序项目4.5 Thumb汇编程序编译与调试,4.5 Thumb汇编程序编译与调试,常用工具栏3个编译按钮第一个按钮:Translate 翻译当前源文件,检查语法错误,并不去链接库文件,也不生成可执行文件。第二个按钮:Build 编译文件,它包含语法检查,链接动态库文件,生成可执行文件。第三个按钮:Rebuild 重新编译整个工程,跟 Build 这个按钮实现的功能是一样的,耗时大。,Thumb汇编程序编译与调试,启动调试,进入调试状态,反汇编窗口,汇编程序窗口,寄存器窗口,调试状态下工具栏:,工程管理窗口,工程文件窗口,寄存器窗口,电子文档窗口,函数窗口,函数模板,源代码窗口,源代码彩色显示,文本的选择,源代码和汇编混合显示,调试窗口及对话框,Breakpoint 对话框,可在此对话框中定义程序执行停止的条件;Code Coverage 窗口统计了程序中被执行部分及未被执行部分的执行信息;Disassembly Window 可以反汇编方式来查看及测试程序;Logic Analyzer 窗口可以以图形的方式来显示变量及外设寄存器值的变化;Memory Window 对话框可查看及修改内存内容;Memory Map 指定程序代码及数据变量所用的内存空间;Output Window-Command 窗口可进行命令输入和信息输出;Execution Profiler 窗口被集成在编辑和反汇编窗口中,用于时间及调用信息统计;Performance Analyzer 窗口可以显示执行时间的统计信息;Serial Window 用串口通信,显示串口通信内容;Symbol Window 用于显示应用程序中的调试符号信息;Toolbox 提供一个可配置的按钮,此按钮可用于调试命令及调试函数的执行;Watch Window 可以查看及修改程序变量,并列出当前的函数调用关系。,Breakpoint对话框,Debug-Breakpoint,Execution Break(E):当表达式是代码地址时,断点被定义。Access Break(A):当所指定的内存访问发生时,此断点有效。Conditional Break(C):当表达式不能转化为内存地址时,一个类型的断点被定义。,代码统计对话框,View-Code Coverage Windows,代码统计对话框提供了程序中各个模块及函数的执行情况。在Current Module(当前模块)下拉列表框中列出了程序所有要模块,每个模块或函数的指令执行百分比,反汇编窗口,View-Disassembly Window,反汇编窗口可以将源程序和汇编程序一起显示,也可以只显示汇编程序。通过Debug-View Trace Records可以查看前面指令的执行记录。,逻辑分析仪,Debug-Logic Analyzer Window,Vision3逻辑分析仪可以将指定的变量或VTREGs值的变化以图形方式表示出来。,逻辑分析仪,信号配置,详细设置,使用限制,内存窗口,View-Memory Window,通过内存窗口可以查看存储器内容。内存窗口最多可将四个不同的存储域显示在不同的页中。窗口中的右键菜单可以选择输出格式。在Address域内,可以输入一个表达式,此表达式的值为所显示内容的地址。在某个单元的值上双击可打开一个编辑框,它允许键入一个新的存储值改变存储内容。使能View Periodic Window Update,可以在运行目标程序时更新此窗口中的值。,内存映射窗口,Debug-Memory Map,内存映射对话框可以用来设定那些地址空间用于存储数据、那些地址空间用于存储程序。被访问的地址空间没有被明确声明时就必须进行地址映射,如存储映射I/O空间。在目标程序运行期间,保证让程序不进行非法的存储区访问。,输出窗口,View-Output Window,输出窗口:编译信息输出、命令输出、文件查找结果输出。命令输出可以是“调试命令”、“变量及寄存器”、“调试函数”。,执行剖析器,Debug-Execution Profiling-Time/Calls,执行剖析器,它可以记录执行全部程序代码所需的时间。它具有两种显示方式:Call(显示执行次数)和Time(显示执行时间)。将鼠标放在指定的入口处即可显示有关执行时间及次数的详细信息。,性能分析仪,Debug-Performance Analyzer,性能分析仪用于记录和显示程序的执行时间。Vision ARM 仿真器记录整个程序代码的时间统计信息。,串行窗口,View-Serial Window,printf-int fputc(int ch,FILE*f);getchar-int fgetc(FILE*stream);,符号窗口,View-Symbol Window,显示定义在当前被载入的应用程序中的公有符号、局部符号及行号信息。CPU特殊功能寄存器SFR符号也显示在此窗口中。,工具箱,View-Toolbox,Toolbox中包含用户可配置的按钮。点击工具箱上的按钮可以执行相关的调试命令(debug command)或调试函数(debug function)。工具箱按钮可以在任何时间执行,甚至是运行测试程序时。,参考,实例:,Watch窗口,View-Watch&Call stack Window,Locals 页列出了当前函数中全部的局部变量。,Watch 页列出了用户指定的程序变量。,Call Stack 页显示了当前的函数调用嵌套关系。,MDK开发的四个步骤,Step 1:选择设备和指定硬件对象,Step 2:配置设备和创建应用程序代码,Vision 包含了工程管理器、编辑器和调试器,网上庞大地设备数据库&Vision 简单化地芯片选择与设置,MDK开发的四个步骤,通过 ULINK 进行Flash Download 和 Target Debugging,通过 Vision Debugger 和 Device Simulator调试,Step 3:用Vision设备仿真器分析代码,Step 4:Flash下载最后在目标硬件上测试,添加管理源文件,组织源码结构;添加源文件:从C:KeilARMExamplesMeasure拷贝源文件。建立软仿真工程:Simulator为设备仿真工程。,添加管理源文件,点击工具栏“”管理工程,添加源码。,注:为了说明操作,直接拷贝附带例程源码。,配置启动代码,图形化配置,图形化对话框,直观方便 免除手写几百行汇编代码 快速生成启动代码,Debug调试,点击工具栏“”下载程序到目标板进入调试状态,单步、查看各个窗口,单步、断点、全速运行:查看Debug状态下各个窗口:,Flash下载,Flash-Configure Flash Tools:,设备仿真实例,内容五,MDK的设备仿真,目标设备的所有组件都可仿真.代码可在整个设备上运行,完全的目标硬件仿真完整的目标高效指令集仿真中断仿真片内外围设备ADC,DAC,EBI,TimersUART,CAN,I2C.包含外部信号和 I/O包含外部信号和 I/O充足的仿真信息包含在设备数据库里Supports 250 ARM based MCUsIncluded in RealView MDK,Measure程序介绍,默认路径:C:KeilARMExamplesMeasure;uVision Simulator for LPC2129;该例程描述了如何使用uVision的信号函数功能来仿真LPC21XX一个模拟量的输入。,编译、链接、调试,打开Measure工程,编译、链接程序,点击Debug进入调试状态。,编译、链接,Debug,虚拟串口,打开虚拟串口2,全速运行程序查看结果;,Retarget库文件,/Serial.cint sendchar(int ch)if(ch=n)while(!(U1LSR,/Retarget.cint fputc(int ch,FILE*f)return(sendchar(ch);,RealView微控制器开发工具集带有一个预定义的retarget库文件,它是许多例程的一部分。retarget文件修改了底层的I/O 程序,并禁止了semi-hosting SWI 中断的使用。,查看程序代码,代码块彩色显示显示混合的源代码与反汇编代码改变显示模式并且使用context menu中的其他命令(在Disassembly窗口中点击右键),调用栈,View-Watch&Call stack Window,View-Call stack Unwinder,显示函数的嵌套情况双击此页中的某行,将会在工作区中显示调用所选择函数的源代码。,显示函数的嵌套情况显示函数参数的值或者地址双击此页中的某行,将会在工作区中显示调用所选择函数的源代码。,通过设置Trace功能,可以跟踪代码,跟踪代码,要求设置Enable/Disable Trace Recording可以查看到在到达断点前CPU所执行的指令在工程工作空间的Regs页面会显示执行所选择的指令在执行过程中相应的CPU寄存器内容。,双击一行代码,在代码的左面出现一个红点,表示断电设置成功,断点,使用工具栏的断点相关按钮:,调试状态下:Debug-Breakpoint,可以设置高级断点,在不具备trace功能的硬件环境下,不具备条件触发中断的能力条件触发中断只能在软件仿真的情况下实现,当对变量进行写操作且值恒等于3的产生断点,查看变量,View-Watch Window,可以随时查看变量、结构体以及数组的内容。在空白行双击鼠标左键或者按F2键即可添加变量,通过同样的方式也可以修改变量的值。在源文件编辑窗口选择需要添加的变量名,单击鼠标右键,在弹出的局部菜单中选择Add to Watch Window选项将其加入。,查看片上外设,Vision里提供了片上外设对话框:I/O端口,中断,定时器,A/D转换器,串口和一些芯片特有的外设。对话框会显示当前外设的状态,同时也可以直接在对话框中改变相应的输入值。,性能分析仪&代码覆盖统计,Debug-Performance Analyze,View-Code Coverage Windows,信号函数,信号函数可以在后台实现信号输入、脉冲输入等重复操作。信号函数可用于模拟和测试串行I/O、模拟I/O、端口通讯和其他一些重复发生的外部事件。,FUNC void MyStatus(void)printf(=n);printf(Analog-Input-0:%fn,ain0);printf(Analog-Input-1:%fn,ain1);printf(Analog-Input-2:%fn,ain2);printf(Analog-Input-3:%fn,ain3);printf(Port 0:%08Xn,port0);printf(=n);,/*MEASURE.INI:Measure Debug Init File*/Signal void analog0(float limit)float volts;printf(Analog0(%f)entered.n,limit);while(1)/*forever*/volts=0;while(volts=0.0)ain0=volts;swatch(0.01);/*wait 0.01 seconds*/volts-=0.1;/*decrease voltage*/,初始化文件,信号函数,Toolbox,View-Toolbox;,DEFINE BUTTON My Status Info,MyStatus()DEFINE BUTTON Analog0 0.3V,analog0(3)DEFINE BUTTON Stop Analog0,signal kill analog0,Toolbox中包含用户可配置的按钮。点击工具箱上的按钮可以执行相关的调试命令或调试函数。工具箱按钮可以在任何时间执行,甚至是运行测试程序时。,添加按钮语法:,删除按钮语法:,DEFINE BUTTON button_label,command“,Kill Button num,逻辑分析仪,Debug-Logic Analyzer Window,可以是变量或VTREGs值,综合,全速运行程序,串口输入“d”,在终端显示ADC采样值;点击Toolbox的“Analog0 0.3”按钮,输出外部信号;查看各个调试窗口状态。,调试命令/函数、分散加载文件,内容六,调试命令,Vision3支持大量命令,可以通过 Output Window Command Line 键入命令在命令入口处,语法生成器会显示命令,选项和参数。仅需键入命令名单词的首字符。,调试命令-断点命令,调试命令-普通命令,调试命令-存储器命令,调试命令-程序命令,调试函数,Vision3 中有一个内建的函数编辑器,通过Debug-Function Editor来打开。打开函数编辑器时需要输入一个文件名或者打开一个由Options for Target Debug Initialization File指定的文件。该编辑器的用法与Vision3编辑器相同,允许用户输入和编译调试函数。,调试函数,Vision3提高了一些可被调用的预定义调试函数,它们不能被重定义或者被删除。预定义函数用来帮助开发者定义用户和信号函数。,更多函数,文件映像域,装载域描述运行前输出段和域在ROM/RAM里的分布状态;运行域描述了运行时输出段和域在ROM/RAM里的分布状态。,CODE,DATA,ZI section,STACK,运行时的数据搬移,RW段搬移&ZI段清零,#Copy RW dataInitialize:ldr r0,=Image$RO$Limit ldr r1,=Image$RW$Base ldr r3,=Image$RW$Limit cmp r0,r1 beq F1F0:cmp r1,r3 LDRCC r2,r0,#4 strcc r2,r1,#4 bcc F0#Paste zero initialized dataF1:ldr r1,=Image$ZI$Limit ldr r3,=Image$ZI$Base mov r2,#0F2:cmp r3,r1 strcc r2,r3,#4 bcc F2,Scatterfile分散加载文件,分散加载(Scatlerloading),即工程里的.scf文件;在scatterfile中可以为每一个代码或数据区执行时指定不同的存储区域地址。,;RUN IN FLASHLR_ROM1 0 x00000000 0 x00200000 ER_ROM1 0 x00000000 0 x00200000*.o(RESET,+First)*(InRoot$Sections).ANY(+RO)RW_RAM1 0 x30000000 0 x04000000.ANY(+RW+ZI),;RUN IN RAMLR_ROM1 0 x30000000 0 x00010000 ER_ROM1 0 x30000000 0 x00010000*.o(RESET,+First)*(InRoot$Sections).ANY(+RO)RW_RAM1 0 x30010000 0 x00010000.ANY(+RW+ZI),*(InRoot$Sections)它是_main()的一部分,基于硬件的开发调试,内容七,环境工具的准备,硬件:EduKit-IV+Mini2410平台一套;仿真器:ARM RealView MDK套件一套;其他:电脑一台(安装Windows XP系统、MDK环境);拷贝出厂光盘DISK3_S3C241003-Codes01-MDKMini2410-IV文件夹到MDK安装路径:C:KeilARMBoardsEmbest;正确安装Mini2410核心板,BOOT跳线断开,连接好交叉串口线、电源线;以8.2_ADC_Test程序为例。,硬件原理,随着数字技术,特别是计算机技术的飞速发展与普及,在现代控制、通信及检测领域中,对信号的处理广泛采用了数字计算机技术。由于系统的实际处理对象往往都是一些模拟量(如温度、压力、位移、图像等),要使计算机或数字仪表能识别和处理这些信号,必须首先将这些模拟信号转换成数字信号,这就必须用到 A/D 转换器。,参考资料:基于S3C2410嵌入式MDK开发实验与实践.pdf0_EDUKIT-IV.pdf1_Mini2410-IV.pdf,连接仿真器查看设备信息,连接仿真器,给实验箱上电;菜单栏Project-Options for Target-Debug,Debug调试,点击工具栏“”下载程序到目标板进入调试状态,配置XP下超级终端,点击Windows XP-开始-所有程序-附件-通讯-超级终端,建立一个新的终端,并设置如下:波特率 115200、1 位停止位、无校验位、无硬件流控制。,超级终端串口的选择根据用户的 PC 串口硬件不同,请自行选择,如果 PC机只有一个串口,一般是 COM1,运行程序查看实验现象,菜单栏Debug-Run,全速运行程序并查看串口打印消息;调节实验平台位于Area10区域的ADC滑竿改变模拟量值,查看串口打印的采样值的变化。,断点、单步、查看各个调试窗口,在合适的位置设置断点观察程序运行;查看各个调试窗口;单步跟踪代码运行。,程序固化,内容八,Flash编程,Vision 3 集成了Flash编程工具,所有的相关配置将被保存在当前工程中。允许用户编写初始化文件进行总线配置、寄存器配置等初始化设置。支持用户自定义编写Flash算法。,Flash编程工具配置,菜单栏Flash-Configure Flash Tools;,初始化文件,Flash芯片,初始化文件,Flash初始化文件有两个典型的应用:配置存储器或寄存器,这些存储器或寄存器是用来配置访问Flash的总线设置;加载附加程序部分。,FUNC void Init_Board(void)_WWORD(0 x53000000,0 x00000000);_WWORD(0 x4A000008,0 xFFFFFFFF);_WWORD(0 x4A00001C,0 x000007FF);_WWORD(0 x4C000014,0 x3);_WWORD(0 x4C000004,0 x0005c042);_WWORD(0 x56000070,0 x00280000);_WWORD(0 x56000078,0 x00000000);Init_Board();,映象固化,编译Run in Flash工程;菜单栏Flash-Download开始下载映象到Flash。,.Init_Board();Erase Done.Programming Done.Verify OK.,Note:固化的文件为工程配置菜单中所设置的输出文件(axf或者hex格式),Flash编程算法,ULINK2适配器允许用户定义附加的Flash编程算法:C:KeilARMFlashARM工具链已经包含许多Flash编程算法,可以作为用户自己编写算法的模板。,定义自己的Flash算法,