8.Realview MDK中调试脚本的详细解析
试图搞懂MDK程序下载到flash(三)--MDK配置选项Linker、Target、Debug的理解分析
试图搞懂MDK程序下载到flash(三)--MDK配置选项Linker、Target、Debug的理解分析在写这一节时,我还是想再重复一下自己写这文章的目的,我的目的就是为了实现将MDK 编写的裸机程序可不可以脱机运行,也就是不用调试的方法,因为调试的话程序默认是在SRAM中运行的,掉电丢失。
而要脱机运行,就得将程序编译后的文件下载到flash中,最好能是nand flash。
如果要下载到nand flash,那么就要编译生成一个bin文件,而不是用axf文件。
那么剩下的问题就是,怎么生成一个完整、正确的bin文件?所以我现在就需要看能否通过编写一个分散加载文件,解决bin文件的地址问题。
生成了bin文件,那么我就可以利用韦东山的方法,利用supervivi的v选项,配合DNW将程序下载到nand flash中并运行!现在咱们就分析一下MDK配置选项,首先解释一下MDK中三种linker之间的区别:1、采用Target对话框中的RAM和ROM地址。
采用此方式,需在Linker选项卡中勾选Use Memory Layout from Target Dialog选项(选中这一项实际上是默认在Target中对Flash和RAM的地址配置,编译链接时会产生一个默认的脚本文件),并且在Target中设置好RAM、ROM地址,图2所示。
MDK会根据Target选项中设定的RAM和ROM地址自动加载生成一个加载文件。
最后链接器会根据此文件中的信息对目标文件进行链接,生成axf镜像文件。
至于ROM和RAM是片内还是片外、容量(Size)多大,就需要根据芯片和开发板来决定了。
2、直接通过Linker选项卡中的R/O Base和R/W Base来设定链接信息。
链接器最后可根据此处指定的地址信息进行链接,链接的文件应该是顺序存放了,最多RO和RW分开。
此时需要注意的是应将Use Memory Layout from Target Diaglog前的勾去掉,且保证Scatter File一栏中未包含分散加载文件,并且要在Misc controls中设定镜像文件的入口点,如:--first 2440init.o(Init) 对于这个括号内的填写依据,我暂时还不懂。
RealView MDK使用教程
下午8时7分
19/27
设置调试和下载程序
步骤六:设置调试和下载程序
Debug标签下,选择“Use”单选项以调试实际的硬件, 在下拉列表中选择“Stellaris ICDI”选项。在Run to main ()这个选项前打勾。Байду номын сангаас
下午8时7分
20/27
设置调试和下载程序
切换到Utilities标签,在下拉列表中选择“Stellaris ICDI” 选项。接着单击Settings,进行JTAG时钟和复位方式等设置。
下午8时7分
产品
Cortex-M3在RealView开发套件3.0(RVDS)中 得到支持。在RealView-ICE 1.5可以用于连接 调试硬件和调试环境. 大名鼎鼎的KEIL在其最新的Realview MDK开 发工具中,支持了Cortrex-M3,其配套的仿 真器是ULINK和ULINK2. 支持Cortex-M3的GNU工具链,基于GNU 4.0 版本.
简称RealView MDK 或RVMDK;
源自德国Keil公司,现被ARM公司收购,是目
前ARM公司最新的一款针对各种嵌入式处理
器的软件开发工具.
下午8时7分
4/27
1. RealView MDK 简介
RealView MDK开发工具包包括:
μVision集成开发环境(IDE); 调试器; 仿真器; ARM RealView 编译工具;
下午8时7分
15/27
工程配置
在您的工程选项里,选择C/C++标签。这里您首先需要 告诉工程使用ARM编译器,定义“rvmdk PART_LM3S9B96”, 这个定义被用来正确编译Keil的特殊部分。
使用RealView MDK进行SW调试和实时跟踪调试
使用RealView MDK进行SW调试和实时跟踪STM32有两个调试端口,即JTAG和SW。
Keil 的ULINK2 USB-JATG接口适配器支持这两种调试接口。
本文描述了如何配置和使用SW接口来获取各种调试信息。
一、目标调试阶段的配置1.调试器的选择选择μVision->Debug ->Options for Target –>Debug,并选择ULINK Cortex Debugger调试器。
2.调试目标初始化文件按照路径\Keil\ARM\Startup\ST,将文件STM32DBG.ini拷贝到工程文件夹中。
选择μVision->Debug -> Options for Target –>Debug,同时在Initialization File选项中选择该文件。
3.Cortex-M 目标设备调试驱动配置选择Options for Target – Debug – Settings,设置SWJ,端口选择SW。
4.Trace功能的配置Trace功能包括:Core Clock, Trace Port 以及定义TraceEvents 等。
二、实时跟踪1.μVision的状态栏信息在μVision的状态栏中显示了实时跟踪的状态信息。
2.实时跟踪窗口调试时选择Peripherals – Trace。
1)Trace Records窗口该窗口显示了所有被捕获的跟踪记录,每一个跟踪记录都包含了详细的信息。
可以选择Peripherals - Trace – Records来查看。
2)Exception Trace 窗口该窗口显示了异常和中断的统计信息,这些信息是基于Trace Records中所捕获的跟踪记录的。
可以选择Peripherals - Trace - Exceptions来查看。
3)Event Counters窗口这个窗口显示了特殊事件计数器的值,计数值是基于Trace Records中所捕获的跟踪记录的。
RealView+MDK+Jlink+Mini2440测试程序移植(成功)2
移植基于ADS的Mini 2440代码到Keil MDK4.11环境(SDRAM调试,支持中断)Syd168@ QQ:174997990 2010年10月29日环境说明:⏹操作系统:XP SP3⏹Jlink驱动:4.08⏹Keil:MDK for ARM 4.11 Pro⏹终端连接:Xshell3.0⏹下载工具:DNW(Mini2440光盘提供)⏹开发板:Mini2440 (Mini 2440 /2M Nor Flash/64 SDRAM/256 NAND Flash)⏹S3C2440测试程序:2440test-20100609(Mini2440光盘提供)一、移植原因(略读)很多人在学习ARM的时候,都会学习ADS下跑裸奔程序。
ADS是ARM公司2001年推出的一款开发及调试的工具。
至今,仍然是很多ARM开发者的首选工具。
现如今,ARM公司已经不再支持或更新ADS了,取而代之的是DS-5、RVDS和MDK等几款软件。
和最新的这些工具相比较,ADS就显得有些小巫见大巫了。
而且,随着操作系统的不断升级,ADS的使用越来越麻烦,ADS在windows7下会莫名其妙地崩溃,连错误信息都没有,在XP下会时常蹦出个“无法打开…ses文件”,这让很多用户都很头疼(其实解决的办法很简单,只需要重新在AXD中配置一下调试工具,然后关闭再次启动调试即可)。
由于ADS本身的缺点,要实现联机调试,有时候很麻烦的。
尤其是下载到SDRAM中调试,笔者一直没有成功。
一气之下,才转入MDK。
其实,RealView MDK也是Keil公司的产品,它是在Keil被ARM公司()收购后开发的关于arm的新的开发环境,个人感觉它比ads1.2要好使的多。
RealView MDK有很多突出特点:1.启动代码生成向导,自动引导启动代码和系统硬件结合紧密,必须用汇编语言编写,因而成为许多工程师难以跨越多门槛。
RealView MDK的μVision4工具可以自动生成完善的启动代码,并提供图形化的窗口,可以很方便地进行修改启动配置参数(看门狗、内存配置、CPU速度配置等等)。
Realview MDK中链接脚本的详细解析
例 2 一个加载区域,多个非连续的执行区域。
LR_1 0x010000 { ER_RO +0 { * (+RO) } ER_RW 0x040000 ; 定义可读写数据段 ER_RW 的起始地址为 0x040000. { * (+RW) } ER_ZI +0; 清零数据段 ER_ZI 紧接 ER_RW 段的尾地址存放,即为 0x040000 + ER_RW 的容量。 { * (+ZI) } } ; 所有清零数据都连续地放在这个区域。 ; 所有的可读写的程序都连续地放在这个区域。 ; 所有的只读代码段都连续地放在这个区域。 ;执行区域 ER_RO 的起始地址紧接载于区域 LR_1 的起始地址,即为 0x010000. ; 定义载入区域 LR_1 的起始地址为 0x010000。
例 3 二个加载区域,多个非连续的执行区域。
-1-
LR_1 0x010000 { ER_RO +0 { * (+RO) } } LR_2 0x040000 { ER_RW +0 { * (+RW) } ER_ZI +0 { * (+ZI) } }
; 载入区域 LR_1 的起始地址为 0x010000。 ; ER_RO 段的起始地址为 0x010000.
Realview MDK中链接脚本详细解析
Eembest 徐良平 使用 Realview MDK 时不可避免的要涉及到链接脚本文件, 特别是编译链接那些大的工程文件时更 是如此。在链接脚本中可以指定代码的存储布局,可以将代码段、只读数据段、可读写的数据段分别存 放,甚至可以精确地指定代码放置的位置,这一点是很关键的,譬如说启动代码就必须放在可知型文件 的开始位置。由于链接脚本重要性,开发者必须掌握其编写的方法。 Realview MDK 链接程序使用了两种方式控制程序的链接,即链接控制命令选项和链接脚本文件。 当使用链接控制命令选项时, 链接器定义了 Image$$RW$$Base、 Image$$RW$$Limit、 Image$$RO$$Base、 Image$$RO$$Limit、Image$$ZI$$Base 和 Image$$ZI$$Limit 等 6 个段地址描述符。这 6 个描述符可以直 接在程序中引用。而在使用链接脚本文件后,这 6 个描述符号没有了,取而代之的是链接脚本文件中的 段描述符,格式为:Image$$段名$$Base 和 Image$$段名$$Limit。下面将结合 3 个具体的例子说明链接 脚本文件的使用。 例 1 一个加载区域,多个连续的执行区域。
用RealView_MDK调试mini2440(有图有方法有验证)
用RealView MDK与JTAG调试mini2440的方法实验平台:TQ2440开发板RealView MDK JTAG实验目的:让开发板上的LED闪烁实验步骤:1、安装并且让RealView MDK 及H-JTAG 正常工作2、新建工程,并且器件选择S3C2440A3、确认出现的对话框中以添加最基本的启动代码。
4、新建main.c保存并添加到工程中5、点击工具栏上按钮进入配置界面,6、进入“Debug”选项卡,选中使用J-Link调试器,Initialization File使用MDK提供的的文件,位置为C:\Keil\ARM\Boards\Samsung\S3C2440\RTX_Blinky,本实验中为方便起见建议将其拷到工程目录下,并将此文件倒数第三行LOAD Obj\Blinky.axf INCREMENTAL // Download program。
中的Obj\Blinky.axf改为实际生成的映像名字下图配置Debug 选项要注意三点:e 中选RDI Interface Driver,我选jlink的时候不能进入调试,而且在Keil4 中没有RDI Interface Driver 这个选,所以keil4下我还没实现调试;2.Run to main()选项勾上,调试的时候就会直接跑到main()函数了,当然如果你要看启动代码的执行过程,也可以把这勾去掉;3.InitializationFile 中选择你刚才改过的Ext_RAM.ini 文件。
下图配置Utilities 选项,选RDI Interface Driver,然后点setting 会弹出对话框2,在第一个Browse 选择JLinkRDI.dll 文件,从图中可以看到我是从我MDK 的安装目录的bin 文件夹下选的,其实你安装好的MDK 文件夹下原来是没有这个文件的,要在你所安装的JLink 驱动软件的目录下找到copy 到MDK 的bin 文件夹下。
RealView MDK调试小技巧
RealView MDK调试小技巧RealView MDK具有强大的调试功能。
正确使用这些调试功能可以更快更准地发现软件中存在的问题,其中有些调试小技巧并不是很引人注意,在实际工作中如果能注意并使用这些小技巧将大大方便我们工作。
下面从Symbol窗口、逻辑分析仪和Watch窗口三个方面来介绍一下调试中的小技巧。
一、Symbol窗口Symbol窗口可以查看虚拟寄存器和外围特殊寄存器的名称、地址、类型。
当我们想要在内存窗口中查看外围寄存器的值时。
是不是需要去手册上查一下这个寄存器的地址呢。
答案是――可以,但有个更方便直接的方法,就是从Symbol窗口可以查到所有外围特殊寄存器的地址和类型。
在调试时打开Symbol窗口的方法:单击MDK菜单View然后点击,在工程工作区左边即可看到该窗口,如下图。
图一Symbol窗口在工程中的位置二、逻辑分析仪逻辑分析仪可以跟踪全局变量、虚拟寄存器和外围特殊寄存器的值。
1、我们可能需要将IO端口的数据寄存器某位的值在逻辑分析仪上显示出来。
一种方法是在逻辑分析仪的Setup对话框里通过Mask来屏蔽那些不需要显示的位。
还有一种更简单的方法,就是在寄存器名后面加上后缀“.位序”。
比如A口有16个引脚。
其对应的数据寄存器为PORTA(16位)。
现在需要跟踪引脚7的值。
则只需添加信号PORTA.7即可,系统会自动设置Mask值。
实际上,任何跟踪的信号,只要是整型数据都能使用上面提供的方法。
这对于位显示非常直观,简捷。
2、当我们需要在逻辑分析仪中显示Symbol窗口中列出的虚拟寄存器和外围特殊寄存器的值时,没必要在Setup对话框中写出该信号的名称。
只需将Symbol窗口的寄存器名直接拖到逻辑分析仪中即可。
三、Watch窗口Watch窗口可以查看程序中全局变量的值并实时更新。
也可查看外围特殊寄存器和虚拟寄存器的值。
我们可以在Watch窗口中按F2然后将变量名敲进去,回车就可看到该变量的值,但更方便的方法是可以直接将选中的该变量或寄存器名直接拖到Watch窗口中。
1.Realview MDK常见问题及解决方法
Realview MDK常见问题及解决方法解决方法:使用RVCT的fromelf.exe工具进行转换。
也就是说首先将源文件编译链接成*.axf的文件,然后使用fromelf.exe工具将*.axf格式的文件转换成*.bin格式的文件。
假设工程文件的名字为Axf_To_Bin,下面将具体说明这个操作步骤:1.打开Axf_To_Bin文件中的Axf_To_Bin.uv2工程文件;2.打开Options for Target‘Axf_To_Bin’对话框,选择User标签页;3.构选Run User Programs After Build/Rebuild框中的Run#1多选框,在后边的文本框中输入C:\Keil\ARM\BIN31\fromelf.exe--bin-o./output/Axf_To_Bin.bin./output/Axf_To_Bin.axf命令行;4.重新编译文件,在./output/文件夹下生成了Axf_To_Bin.bin文件。
在上面的步骤中,有几点值得注意的是:1.C:\Keil\ARM\BIN31\表示RV MDK的安装目录;2.fromelf.exe命令的具体语法格式如下:命令的格式为:fromelf[options]input_file命令选项如下:--help显示帮助信息--vsn显示版本信息--output file输出文件(默认的输出为文本格式)--nodebug在生成的映象中不包含调试信息--nolinkview在生成的映象中不包含段的信息二进制输出格式:--bin生成Plain Binary格式的文件--m32生成Motorola32位十六进制格式的文件--i32生成Intel32位十六进制格式的文件--vhx面向字节的位十六进制格式的文件t--base addr设置m32,i32格式文件的基地址--text显示文本信息文本信息的标志-v打印详细信息-a打印数据地址(针对带调试信息的映象)-d打印数据段的内容-e打印表达式表print exception tables-f打印消除虚函数的信息-g打印调试表print debug tables-r打印重定位信息-s打印字符表-t打印字符串表-y打印动态段的内容-z打印代码和数据大小的信息解决方法:用户可以自定义flash烧写算法,并把它们集成到Realview MDK中。
(1)_Realview MDK
STM32 基本套件
MCBSTM32 和 ULINK-ME
MDK vs ADS
MDK vs ADS (1)
特性 ARM 产品 RealView MDK-ARM ADS
概要
编译工具 开发环境 调试器 模拟器 代码生成 C/C++ 编译器 宏汇编器 链接器 输出格式 基于ARM核的 处理器支持 基于ARM核支持 ARM指令 Thumb指令 Thumb2指令 RealView C/C++编译器 RealView宏汇编器 RealView链接器 ELF/DWARF, HEX √ √ √ √ √ ARM C/C++编译器 ARM宏汇编器 ARM链接器 ELF/DWARF, HEX X √ √ √ X RealView µVision IDE µVision调试器 µVision模拟器 ADS CodeWarrior AXD ARMulate
模板
New Additions for STM32
New features have been added to support STM32.
RealView MDK
支持所有已经发布的 STM32 芯片 设备数据库支持,Flash和一定程度的仿真 使用ULINK2 进行Serial Wire Debug 和 Serial Wire Viewer
RealView MDK中国版背景
英蓓特公司背景
深圳市英蓓特信息技术有限公司成立于2000年,是一家为全球嵌入式
系统开发人员提供软硬件开发工具、嵌入式系统完整解决方案及技术 信息服务的高科技企业。
国内最早从事ARM工具研究、开发和服务的公司。
企业背景
(完整word版)keil软件调试单片机程序
先说一个概念:调试,在企业程序设计里(我把企业商务类型的软件开发叫企业程序设计,把单片机与驱动程序这样接触底层汇编与硬件相关的程序设计叫底层程序设计),调试一般都用来跟踪变量的赋值过程,以及查看内存堆栈的内容,查看这些内容的目的在于观察变量的赋值过程与赋值情况从而达到调试的目的。
由于企业程序的宿主就是开发它的计算机本身,因此企业程序设计比起底层程序设计,特别是单片机的程序设计调试来的更直观,调试也更方便。
单片机的程序设计调试分为两种,一种是使用软件模拟调试,意思就是用开发单片机程序的计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的,但是软件调试存在一些问题,如计算机本身是多任务系统,划分执行时间片是由操作系统本身完成的,无法得到控制,这样就无法时时的模拟单片机的执行时序,也就是说,不可能像真正的单片机运行环境那样执行的指令在同样一个时间能完成(往往要完成的比单片机慢)。
为了解决软件调试的问题,第二种是硬件调试,硬件调试其实也需要计算机软件的配合,大致过程是这样的:计算机软件把编译好的程序通过串行口、并行口或者USB口传输到硬件调试设备中(这个设备叫仿真器),仿真器仿真全部的单片机资源(所有的单片机接口,并且有真实的引脚输出),仿真器可以接入实际的电路中,然后与单片机一样执行。
同时,仿真器也会返回单片机内部内存与时序等情况给计算机的辅助软件,这样就可以在软件里看到真实的执行情况。
不仅如此,还可以通过计算机断的软件实现单步、全速、运行到光标的常规调试手段。
图1:仿真器总结一下两者的不同与相同:相同点:1:都可以检测单片机执行时序下的片内资源情况(如R0-R7 、PC计数器等)2:可以实现断点、全速、单步、运行到光标等常规调试手段。
不同:1:软件调试无法实现直接连接硬件电路的调试,只能通过软件窗口虚拟硬件端口的电平输出情况而仿真器可以实现与单片机一样的功能的硬件连接,从某种意义上说这个时候仿真器就是一个单片机。
RealView MDK配合Ulink的Real-Time trace(实时追踪)功能介绍
RealView MDK配合Ulink的Real-Time trace(实时追踪)功能介绍RealView MDK集成开发环境配合Ulink仿真器调试集成CoreSight调试技术的Cortex-M系列处理器时可为客户提供先进的实时调试、追踪功能。
数据和事件追踪(Data and Event Trace)所有的Cortex-M3 和Cortex-M4处理器都提供数据和事件追踪的硬件支持(ITM (Instrumentation Trace Macrocell) and DWT (Data Watchpoint and Trace) units),MDK配合Ulink可以对这些数据进行捕获,并且MDK提供了一系列的方法可以对这些数据进行分析。
▪Trace Window - 该窗口显示了所有被捕获的跟踪记录,每一个跟踪记录都包含了详细的信息。
▪Debug (printf) Viewer–显示由Instrumentation Trace Macrocell (ITM)打印出的调试信息。
▪Exceptions window–显示程序执行中的中断和异常的相关信息。
▪Event Counters -这个窗口显示了特殊事件计数器的值,计数值是基于Trace Records中所捕获的跟踪记录的。
▪Logic Analyzer–以曲线方式显示某一变量在程序执行中的变化。
▪RTX Event Viewer–显示RTX任务的切换信息。
各种数据和事件追踪窗口指令追踪(Instruction Trace)带有ETM 单元的的处理器都可以提供指令追踪功能(ETM 是一个可选组件,有些CM3芯片中没有配)。
配合ULINKpro仿真器可以将追踪的指令信息直接传到PC机。
MDK可以对这些数据进行各种分析。
代码覆盖率分析(Code Coverage)代码覆盖率追踪程序执行过程中的每一条指令,可以记录下你程序执行的每一个细节,这对你后期对程序进行优化时有必要的。
8.Realview MDK中调试脚本的详细解析
Realview MDK中调试脚本的详细解析和其他集成开发环境一样,Realview MDK中也使用了调试脚本。
调试脚本除了可以初始化软硬件的调试环境以外,还可以初始化Flash的烧写环境,甚至可以提供信号函数模拟片上外围设备。
所以在使用Realview MDK调试和烧写的过程中,到处都有调试脚本的身影。
下面将分三个方面详细地研究调试脚本的编写和使用。
在介绍调试脚本之前,先必须了解Realview MDK预定义的一些常用命令和函数的用法。
1.常用预定义命令的说明及注意事项:2.调试脚本在硬件仿真中的应用Realview MDK编译链接好的程序在硬件上运行之前,要求硬件具有合适的环境(例如,时钟的配置、存储控制的配置等),一般这些工作是由启动代码完成的。
在Realview MDK中,通过调试脚本使用MDK 预先定义好的寄存器读写命名设置硬件环境。
这一工作在硬件调试之前是必须进行的。
下面是一个初始化硬件环境的调试脚本函数:FUNC void Setup(void){_WWORD(0xfffffd44,0x00008000);//配置看门狗模式寄存器;_WWORD(0xfffffd60,0x00320100);//配置电压效验模式寄存器;_WWORD(0xfffffc20,0x00000601);//配置主晶振寄存器;_WWORD(0xfffffc2c,0x00191C05);//配置锁相环寄存器;_WWORD(0xfffffc30,0x00000007);//配置主时钟寄存器;_WWORD(0xfffffd08,0xa5000001);//配置复位控制模式寄存器;pc=0x200000;//设置PC的值。
}3.调试脚本在软件仿真调试中的应用使用Realview MDK软件模拟器调试程序时,除了像硬件调试那样配置相关的寄存器以外,有时还必须使用信号函数模拟外设信号的输入/输出,甚至完全模拟一个外围设备。
Realview MDK中链接脚本详细解析
使用 Realview MDK 时不可避免的要涉及到链接脚本文件,特别是编译链接那些大的工程文件时更是如此。在
链接脚本中可以指定代码的存储布局,可以将代码段、只读数据段、可读写的数据段分别存放,甚至可以精确地指
定代码放置的位置,这一点是很关键的,譬如说启动代码就必须放在可知型文件的开始位置。由于链接脚本重要性,
开发者必须掌握其编写的方法。
Realview MDK 链接程序使用了两种方式控制程序的链接,即链接控制命令选项和链接脚本文件。当使用链接控
制命令选项时,链接器定义了 Image$$RW$$Base、Image$$RW$$Limit、Image$$RO$$Base、Image$$RO$$Limit、
Image$$ZI$$Base 和 Image$$ZI$$Limit 等 6 个段地址描述符。这 6 个描述符可以直接在程序中引用。而在使用链接
{
* (+ZI) ; 所有清零段 ZI 的数据都连续的放在这里。
}
}
上面三个例子中,载入区域和执行区域的名字是可以任意命名的,对这些段地址的引用可以使用如
Image$$ LR_1$$Base 、Image$$ LR_1$$Limit、Image$$ ER_RW $$Base 和 Image$$ ER_RW $$Limit 等。
{
* (+RW)
; 所有的可读写的程序都连续地放在这个区域。
}
ER_ZI +0
; 清零数据段 ER_ZI 紧接 ER_RW 段的尾地址存放。
©2008 MXCHIP Corporation. All rights reserved. 021-52655026/025
欢迎阅读《MDK的编译过程及文件类型全解》文档
欢迎阅读《MDK的编译过程及文件类型全解》文档本章参考资料:MDK的帮助手册《ARM Development T ools》,点击MDK界面的“help->uVision Help”菜单可打开该文件。
关于ELF文件格式,参考配套资料里的《ELF文件格式》文件。
在本章中讲解了非常多的文件类型,学习时请跟着教程的节奏,打开实际工程中的文件来了解。
相信您已经非常熟练地使用MDK创建应用程序了,平时使用MDK编写源代码,然后编译生成机器码,再把机器码下载到STM32芯片上运行,但是这个编译、下载的过程MDK究竟做了什么工作?它编译后生成的各种文件又有什么作用?本章节将对这些过程进行讲解,了解编译及下载过程有助于理解芯片的工作原理,这些知识对制作IAP(bootloader)以及读写控制器内部FLASH的应用时非常重要。
编译过程¶编译过程简介¶首先我们简单了解下MDK的编译过程,它与其它编译器的工作过程是类似的,该过程见图 1-1。
图 1-1 MDK编译过程编译过程生成的不同文件将在后面的小节详细说明,此处先抓住主要流程来理解。
1.编译,MDK软件使用的编译器是armcc和armasm,它们根据每个c/c++和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息;2.链接,链接器armlink把各个.o文件及库文件链接成一个映像文件“.axf”或“.elf”;3.格式转换,一般来说Windows或Linux系统使用链接器直接生成可执行映像文件elf后,内核根据该文件的信息加载后,就可以运行程序了,但在单片机平台上,需要把该文件的内容加载到芯片上,所以还需要对链接器生成的elf映像文件利用格式转换器fromelf转换成“.bin”或“.hex”文件,交给下载器下载到芯片的FLASH或ROM 中。
MDK基本软件调试方法
MDK基本软件调试方法编译没有问题是必须的!
下面是需要设置的一些项目:
1.首先编译通过后进入工程设置
2.选择debug选项卡选择如图所示确定
3.之后一定要重新编译下
4.接下来就是进入调试模式了选择如图所示图标
进入调试模式如图:
5.选择下图所示图标开始运行程序
6.观察其中颜色变化
被使用过的代码前面都是绿色的··没使用的就是灰色,
还有中断函数不是绿色的,这个需要自己判断了。
这个主要是为写代码能力比较差的同学写的。
希望适用!
还有打断点,知道C语言的都了解这个作用我就不多说了;如图:。
RealView MDK 下ARM 程序在RAM 中调试的方法
下ARM 程序在RAM 中调试的方法软件环境:ReavView MDK3.04硬件平台:ZLG 公司出品的LPC2104开发板使用条件:目标代码 < RAM 空间(此应用中为16KB)编译工具为RealView ,见下图设置方法:(以LPC2104开发板为例,并认为你已经掌握了Keil uV3的基本使用方法)1.建立工程,选择正确的芯片2.设定代码区和数据区,见下图其中IROM1和IRAM1的设置都不再是缺省值。
IROM1的设置是为了让代码定位到RAM里。
IRAM1的设置是为了避免数据与代码冲突。
3.在线调试设置,见下图注意:要选中实际使用的硬件仿真器(如ULINK)其下的Load application at start 一定不要选中设置好INI文件[1]RAM.ini 文件内容如下:FUNC void Setup (void) {PC = 0x40000000;}Setup(); // Setup for DownloadLOAD DebugInRam\interrupt.axf INCREMENTAL // Downloadg, main其中DebugInRam\interrupt.axf为你要下载的目标文件(注意替换)4.修改startup.s选项选中startup.s,点右键,选择“options for file’startup.s’”再选择“asm”页,如下图在define 中填入“RAM_MODE”和“REMAP”5.设置完成试试吧!其它使用缺省选项(或你的个性化设置),正确设置好仿真器(如ULINK),编译,不用烧写到flash中(即不要点击),而是直接点击进入DEBUG状态,你应该看见类似下图的画面,PC为0x4000xxxx说明程序在RAM中运行。
参考文献1.MCU123《关于ARM怎样在RAM中运行》2. 周立功等《ARM微控制器基础与实战》北京航空航天大学出版社2003本文作者:杨广京中科院自动化所。
2_基于MDK的软件开发调试
Breakpoint对话框
Debug -> Breakpoint
• Execution Break(E):当表达式是代码地址时,断点被定义。 • Access Break(A):当所指定的内存访问发生时,此断点有效。 • Conditional Break(C):当表达式不能转化为内存地址时,一个类型的断点被定义。
• 反汇编窗口可以将源程序和汇编程序一起显示,也可以只显示汇编程序。 • 通过Debug -> View Trace Records可以查看前面指令的ug -> Logic Analyzer Window
• µVision3逻辑分析仪可以将指定的变量或VTREGs值的变化以图形方式表示出来。
PC、IDE开发环境、仿真器、评估板、串口线、网线 在线仿真、Trace、LED、Printf … …
IDE开发环境
宿主机
仿真器
评估板
ULINK是Keil公司提供的USB-JTAG接口仿 真器,目前最新的版本是2.0。它支持诸多芯 片厂商的8051、ARM7、ARM9、Cortex-M3、 Infineon C16x、Infineon XC16x、 InfineonXC8xx、STMicroelectronics PSD 等多个系列的处理器。
callstack窗口显示或隐藏存储器窗口显示或隐藏代码覆盖窗口显示或隐藏性能分析窗口显示或隐藏逻辑分析仪窗口显示或隐藏符号窗口显示或隐藏callstack显示或隐藏trace显示窗口显示或隐藏串行窗口显示或隐藏sfr寄存器显示或隐藏工具箱运行时更新调试窗口显示或隐藏源文件中的头文件project菜单创建一个新工程创建一个新工作区导入一个工程打开一个工程关闭当前工程维护工程组件配置环境及管理书从设备库中选择cpu改变目标组文件的工具选项清除编译生成的文件编译已修改的文件重新编译所有的源文件批处理编译编译当前文件停止编译打开最近使用的工程文件project菜单维护工程组件配置工具环境及管理书
ARM Realview MDK集成开发环境(行业信息)
通常情况下,ARM程序都需要初始化代码来配置所对应的 目标硬件。
S3C2410A.s就是系统自带的启动代码。这段代码是CPU复位 后首先要执行的代码
图5启动代码文件配置向导 学习课件
图6 加入启动代码后的工程16
4. Realview MDK的使用
4.3 建立一个新的源文件
学习课件
图4 选择处理器
14
4. Realview MDK的使用
在设备数据库里选择一款CPU后,可以在Project Workspace – Books里打开相应设备的用户数据手册。
双击打开相应的手册, 可以进行相应的修改
图4 相应的设备数据手册
学习课件
15
4. Realview MDK的使用
创建一个新工程需要:选择工具集,创建 工程并选择处理器,配置对应的启动代码, 配置硬件选项,创建源文件及文件组,最 后编译链接生成HEX文件。
工欲善其事,必先利其器,所以必须熟练 掌握环境的使用。
学习课件
31
参考文献
学习课件
32
谢谢!
学习课件
33
学习课件
26
4. Realview MDK的使用
4.6 工程的编译链接
编译链接:
编译结果:
学习课件
27
4. Realview MDK的使用
4.7 工程的调试
点击Debug中的“Start/stop debug session“,进入调试状态
debug选项:
debug调试工具
学习课件
① 按照4.5小节中的“工具配置”的要求选择正确的flash算 法
② 连接好ULINK2仿真器 ③ 点击工具栏中的“load”按钮,如下图所示,实现镜像文
keil调试经验
KEIL调试高级技巧在调试状态,Debug 菜单项中的命令可以使用了,有关编译的工具栏按钮消失了,出现了一个用于运行和调试的工具栏,Debug 菜单上的大部份命令都有相应的快捷按钮。
从左到右依次是复位、运行、暂停、单步跟踪、单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮命令;然后按一下图示第二个“运行”按钮。
连接上相关的实验资源,本实验用一条8PIN的数据排线把实验仪的CPU部份的P1口(JP44)连接到八路指示灯部份的JP32。
这时你会看到实验仪的八个红色LED,轮流点亮,表示运行成功,也可以查看相关的变量和参数,非常方便。
⒈单步跟踪运行使用菜单Debug->Step 或上图第四个单步运行按钮或使用快捷键 F11 可以单步跟踪执行程序,在这里我们按下 F11 键,即可执行该箭头所指程序行,每按一次 F11,可以看到源程序窗口的左边黄色调试箭头指向下一行,如果程序中有Delay延时子程序,则会进入延时程序中运行。
⒉单步运行如果Delay 程序有错误,可以通过单步跟踪执行来查找错误,但是如果 Delay 程序已正确,每次进行程序调试都要反复执行这些程序行,会使得调试效率很低,为此,可以在调试时使用 F10 来替代 F11(也可使用菜单 Step Over 或相应的命令按钮),在 main 函数中执行到 Delay时将该行作为一条语句快速执行完毕。
为了更好的进行对比,我们重新进入仿真环境,将反汇编窗口关闭,不断按F10 键,可以看到在源程序窗口中的左边黄色调试箭头不会进入到延时子程序。
⒊全速运行点击工具栏上的“运行”按钮或按F5 键启动全速运行,全速执行程序,此时用户板上的 P1 口所接 LED 以流水灯状态显示。
⒋暂停点击工具栏上的按钮,此时用户板上的P1 口所接 LED 停止以流水灯状态显示,只有一个 LED 灯点亮(取决于暂停前的 P1 的值)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Realview MDK中调试脚本的详细解析
和其他集成开发环境一样,Realview MDK中也使用了调试脚本。
调试脚本除了可以初始化软硬件的调试环境以外,还可以初始化Flash的烧写环境,甚至可以提供信号函数模拟片上外围设备。
所以在使用Realview MDK调试和烧写的过程中,到处都有调试脚本的身影。
下面将分三个方面详细地研究调试脚本的编写和使用。
在介绍调试脚本之前,先必须了解Realview MDK预定义的一些常用命令和函数的用法。
1.常用预定义命令的说明及注意事项:
2.调试脚本在硬件仿真中的应用
Realview MDK编译链接好的程序在硬件上运行之前,要求硬件具有合适的环境(例如,时钟的配置、存储控制的配置等),一般这些工作是由启动代码完成的。
在Realview MDK中,通过调试脚本使用MDK 预先定义好的寄存器读写命名设置硬件环境。
这一工作在硬件调试之前是必须进行的。
下面是一个初始化硬件环境的调试脚本函数:
FUNC void Setup(void)
{
_WWORD(0xfffffd44,0x00008000);//配置看门狗模式寄存器;
_WWORD(0xfffffd60,0x00320100);//配置电压效验模式寄存器;
_WWORD(0xfffffc20,0x00000601);//配置主晶振寄存器;
_WWORD(0xfffffc2c,0x00191C05);//配置锁相环寄存器;
_WWORD(0xfffffc30,0x00000007);//配置主时钟寄存器;
_WWORD(0xfffffd08,0xa5000001);//配置复位控制模式寄存器;
pc=0x200000;//设置PC的值。
}
3.调试脚本在软件仿真调试中的应用
使用Realview MDK软件模拟器调试程序时,除了像硬件调试那样配置相关的寄存器以外,有时还必须使用信号函数模拟外设信号的输入/输出,甚至完全模拟一个外围设备。
下面的程序将模拟一个外围设备向ADC接口输入方波信号:
signal void ADC4_Square(void){
float volts;//峰值的电压;
float frequency;//输出的始终频率,单位HZ;
float offset;//偏移电压;
float duration;//持续的时间,单位S;
volts= 1.6;
offset=0.5;
frequency=2400;
duration=1000;
while(duration>0.0){
AD4=volts+offset;
swatch(0.5/frequency);
AD4=offset;
swatch(0.5/frequency);
duration-= 1.0/frequency;
}
}
4.调试脚本在Flash下载中的应用:
使用Realview MDK进行Flash下载时,目标板的硬件环境也需要配置,其配置方法和硬件调试的情况是一样的,在此不再赘述。