最早使用的ARM开发工具是MDK 3.1,当时是为TI在DM335开发板上移植.Net Micro Framework,由于该开发板没有ISP工具,所以要调试内存版本的TinyCLR程序,必须要预先初始化SDRAM,否则无法把程序Download到内存中去。幸好MDK开发工具提供了一些脚本示例,所以相对比较容易的编写了一个初始化DM335 SDRAM的脚本,但是使用RVDS却没有这么幸运。
后期考虑到开发需要,我这边又配置了RVDS 4.0开发工具,由于一般用它调试ATMEL 的AT91的板子,该板子提供了ISP工具,所以调试时先打开该工具进行一遍SDRAM初始化,然后在用RVDS进行LoadImage调试,虽然有些麻烦,但也将就了。
最近在调试DM335上的wifi接口程序,奇怪的是用MDK编译运行后,出现异常,并且单步跟踪时,MDK工作老不正常。而同样的程序用RVDS编译后,下载到开发板运行,一切OK,所以我这边只好转移到RVDS平台上进行开发调试了。
但是,这就出现了开头提出的问题,没有ISP工具,如何进行SDRAM初始化?
我同事一直在用RVDS调试DM335,他的办法是编写了一个小的初始化SDRAM的程序,先用RVDS运行一遍,然后再加载实际要调试的程序。这不失为一种方法,但是我总觉得有些不方便,加上以前有写MDK脚本的经验,所以就希望在RVDS上编写一个类似的脚本。
如果你在搜索引擎搜索“MDK脚本”关键字时,你会搜出很多相关文章,但是你搜索“RVDS脚本”关键字时,却没有这么幸运,没有一篇文章相关介绍,所以最后没有办法,只好到官方网站,查看相关的技术文档了。
官网脚本相关文档的链接如下,想深入研究的朋友可以进入看一看。
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0175k/Cihcbhaa.html
好了,入正题。一般写调试脚本,无非就是声明变量和函数,再就是对寄存器进行读写,然后下载镜像文件,最后在设置一下PC指针,就可以进行调试了。所以下面就这几个方面,比较一下MDK和RVDS脚本的异同(以DM335的调试脚本为例)。
一、变量声明
1、 MDK
DEFINE LONG PSC;
DEFINE LONG SYSTEM;
PSC = 0x01C41000;
SYSTEM = 0x01C40000;
2、 RVDS
add long PSC = 0x01C41000
add long SYSTEM = 0x01C40000
二、函数声明
1、 MDK
FUNC void psc_change_state(void)
{
//…
}
调用:
Clock_Setup();
2、 RVDS
define /R void psc_change_state()
{
}
.
注意:后面要有一个“.”
调用:
macro Clock_Setup()
三、寄存器读写
1、 MDK
//0 Ignore request if the state is already set as is
if((_RDWORD(PSC+0x800+m_ID*4) & 0x1F) == m_State) return;
//1 Wait for PTSTAT.GOSTAT to clear
while(_RDWORD(PSC+0x128) & 0x1);
//2 Set MDCTLx.NEXT to new state
_WDWORD(PSC+0xA00+m_ID*4, _RDWORD(PSC+0xA00+m_ID*4) & 0xFFFFFFE0);
_WDWORD(PSC+0xA00+m_ID*4,_RDWORD(PSC+0xA00+m_ID*4) | m_State);
2、 RVDS
//0 Ignore request if the state is already set as is
if((*(long *)(PSC+0x800+m_ID*4) & 0x1F) == m_State) { return; }
//1 Wait for PTSTAT.GOSTAT to clear
while(*(long *)(PSC+0x128) & 0x1);
//2 Set MDCTLx.NEXT to new state
*(long *)(PSC+0xA00+m_ID*4) &= 0xFFFFFFE0;
*(long *)(PSC+0xA00+m_ID*4) |= m_State;
四、镜像调入
1、 MDK
exec("LOAD C://MicroFramework//BuildOutput//ARM//MDK3.1//le//RAM//debug//DM335//bin//TinyCLR.axf INCREMENTAL");
2、 RVDS
load/r 'C:/MF/client_v4_0_rtm/BuildOutput/ARM/RVDS4.0/le/RAM/debug/DM335/bin/tinyclr.axf'
五、设置PC指针
1、 MDK
PC = 0x80120000;
2、RVDS
@PC = 0x80120000;
六、脚本调用
1、 MDK(相关资料网上比较多,略)
2、 RVDS
方法一:直接在cmd窗口输入:Run>inc c:/mf/bat/dm335.inc
方法二:通过【Tools】->【Include Commands from file】菜单调入脚本文件,一旦运行过一次,该文件就会在【Tools】->【Recent Commands Scripts】菜单中出现,以后调用便非常方便。
运行后的截图如下:
分享到:
相关推荐
RVDS和MDK嵌入式开发工具调试脚本编写
将所有文件解压到RVDS的安装目录下(如:f:ARM),执行crack.bat license是rvds.dat,把别忘了替换网卡MAC 会有fail提示,正常。 只能执行一次,多了会出问题 By Hacx3rn 有时需要重启
感觉上,DS-5,MDK-ARM 和 RVDS 有非常相似的功能,它们都有一个编译器、调试器、分析工具和模拟模块。工具链之间功能的比较是比较花时间的,而且是相当无意义的,不过通过观察他们解决的市场问题去比较会相对简单得...
RealView MDK中生成带调试信息和不带调试信息的AXF文件.pdf RealView MDK中结构体存储方式.pdf Realview MDK中编译器对中断处理的过程详解.pdf Realview MDK中调试脚本的详细解析.pdf Realview MDK中链接脚本详细...
RealView MDK中生成带调试信息和不带调试信息的AXF文件.pdf RealView MDK中结构体存储方式.pdf Realview MDK中编译器对中断处理的过程详解.pdf Realview MDK中调试脚本的详细解析.pdf Realview MDK中链接脚本详细...
RVDS是arm最新的集成开发工具,已经取代了ADS成为最受欢迎的arm开发工具,本文是RVDS的使用方法和配置方法图文教程。
工程配置 rvds4.0 工程配置 裸机程序开发
这是arm开发套件2.2,很不错,大家都是有以下试试,鼎力推荐
相信诸多做ARM嵌入式开发的时候,都会遇到开发环境的选择问题,而当今开发环境众多,并且概念繁杂,到底如何区别,如何甄选,成了头疼的问题。所以,今天我们就来详细讨论一下这个问题,已提供给同行们一个参考的...
RVDS(RealView Development Suite)是ARM公司最新推出的面向SOC和大型复杂应用程序的高端开发工具,被业界称为最好的ARM开发工具。
OK6410_RVDS调试手册 ARM11使用RVDS调试程序
RVDS 官方编译器文档.ARM 平台嵌入式开发必备文档
基于MDK的S3C6410裸机开发工程模版,可以摆脱RVDS平台,使用MDK开发,给不喜欢RVDS的朋友
S3C6410串口测试程序,实现串口打印获取键盘输入字符并返回显示的功能,波特率为115200,开发工具是RVDS2.2
RVDS环境搭建
用于破解ARM ARVS2.2 开发环境.
三星6410裸机RVDS2.2测试程序 ,来自于飞凌OK6410 光盘,验证可用,关键是RVDS2.2 的安装了。
破解文档,里面有RVDS4.0的破解教程
5-1 RVDS 开发工具介绍...................................................................................................... 22 5-2 集成开发环境(IDE).....................................................