RVDS和MDK嵌入式开发工具调试脚本编写

简介: 最早使用的ARM开发工具是MDK 3.1,当时是为TI在DM335开发板上移植.Net Micro Framework,由于该开发板没有ISP工具,所以要调试内存版本的TinyCLR程序,必须要预先初始化SDRAM,否则无法把程序Download到内存中去。

最早使用的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】菜单中出现,以后调用便非常方便。

相关文章
|
6月前
LabVIEW代码是在哪个版本编写的
LabVIEW代码是在哪个版本编写的
36 0
|
6月前
|
存储 IDE 编译器
C++从入门到精通:1.3.1了解IDE与C++程序的编写、编译和运行
C++从入门到精通:1.3.1了解IDE与C++程序的编写、编译和运行
|
6月前
|
缓存 编译器 程序员
嵌入式开发环境Vscode开发STM32单片机程序
嵌入式开发环境Vscode开发STM32单片机程序
162 0
|
IDE NoSQL 编译器
Vscode搭建开发调试STM32/RISC-V环境IDE(最全面)
Vscode搭建开发调试STM32/RISC-V环境IDE(最全面)
|
NoSQL Ubuntu Linux
arm嵌入式gdb移植和搭建远程gdb调试运行环境
arm嵌入式gdb移植和搭建远程gdb调试运行环境
774 0
arm嵌入式gdb移植和搭建远程gdb调试运行环境
|
IDE 开发工具 C++
MDK5软件入门之——基础工程创建及下载和调试
MDK5软件入门之——基础工程创建及下载和调试
424 0
MDK5软件入门之——基础工程创建及下载和调试
Keil uVision5软件的操作与编写基础(入门)
一、如何新建一个空白文档 1.打开Keil uVision5,将会出现工作界面。如图所示: 2.点击【project】选项,再去点击【New uVision project...】选项。如图所示: 打开之后,会弹出一个界面。这时我们点击【新建文件夹】,我们先将新建的文件夹重命名为001. 打开001这个文件夹,并且将文件名命名为002。如图所示: 此时会弹出一个新界面Select Device for Target 'Target 1',这时候我们选择下图中的Atmel,然后再去找到AT89C51。 3.点击工作界面左上角的白色小纸(New),如图所示: 4. 然后保存这个文档,点击左上角的
1281 0
Keil uVision5软件的操作与编写基础(入门)
|
Shell
ARM裸板开发——简单编写实现“shell”功能
ARM裸板开发——简单编写实现“shell”功能
202 0
|
IDE Java 网络安全
本地 IDE 开发代码方式|学习笔记
快速学习本地 IDE 开发代码方式
本地 IDE 开发代码方式|学习笔记
|
Go 开发工具 Android开发
【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)(二)
【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)(二)
201 0
【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)(二)