作者:蓝色星宇

转自:http://www.cnblogs.com/glguan/archive/2011/05/04/2036138.html

来源:http://hi.baidu.com/hqy51222/blog/item/99085aee305eb43fadafd56c.html

1.分散加载文件(链接脚本文件)的格式

问题描述:
在链接的时候,要在不同的地址处添加链接文件,暨分散加载文件,这个分散加载文件有什么样的格式呢?
问题解答:
        程序正确编译生成目标文件以后, 就会链接成可执行的文件, 这个过程中要用到分散加载文件, 它决定可执行的代码在存储器中存放的位置, 这在复杂的程序(例如VIVI对Linux内核的引导)中是很重要的. 下面是一个简单的分散加载文件的例子:

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
;Run in Flash
LR_ROM1 0x00000000 {    ; load region
ER_ROM1 0x00000000 0x0200000 { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
}
RW_RAM1 0x30000000 0x4000000 { ; RW data
   .ANY (+RW +ZI)
}
   RW_IRAM1 0x40000000 0x00001000 {
   .ANY (+RW +ZI)
}
}
在上面的例程中, 代码从地址0x00000000处开始存放,并且将RESET程序段放在最开始处, 而可读写的数据从地址0x30000000处开始存放. 分散加载文件的段的名字(例如LR_ROM1, ER_ROM1等)可以是任意的名字.

2.如何用JLINK在内部RAM中仿真(S3C2410)

这个问题实际没多大意义,但是没解决````
仿真器是J-LINK,
目的是想在内部RAM中仿真代码;之前一直以为是MDK的问题,一直到碰到以下问题.
最近在仿真一个代码(在外部RAM)的时候,突然仿真不了了,之前一直是正常的.想到了对nandfalsh烧过SDRAM的测试代码(写入数据,读出来比较).
然后下载程序之后单步几步之后看了反汇编,发现机器代码都是错的,都是一些SDRAM测试程序中写入SDRAM的数据.
这个好解决,直接把falsh擦了就是了.
但是我要在内部RAM中仿真程序没想到怎么解决.
1.仿真器复位CPU(复位之后CPU复制nandfalsh中的代码到内部RAM---运行)
2.仿真器下载代码
3.仿真器复位CPU(复位之后CPU又复制nandfalsh中的数据到内部RAM,,,,这就导致下载的程序被修改了)
4.仿真不正常!!
PS,一个很怪异的问题,同样的代码,在ADS中是可以的(在ADS中下载的代码不会被修改),而在MDK中用J-TRACE方式可以,用J-LINK RDI方式就不行.

3.函数外部数组无法被正确初始化

在函数外部定义一个数组:
unsigned int array[10]={,,,,,,,指定初始化值};
调试运行(硬件仿真),发现数组并没有按照指定的初始化值初始化,
若像以下这样定义:
const unsigned int array[10]={,,,,,,,指定初始化值};
则可以被正确地初始化.
但是我若要定义一个变量的话,那就没办法用这种办法了.
unsigned int val=0x123;
定义为
const unsigned int val=0x123;显然是不可能的.
这在以前用其他编译器没有碰到过的(在ADS里也都是可以被正确初始化的),是编程方式不对吗?还是按照第一种方法指定初始值是不规范的?

4.如何生成bin文件

在RV MDK 中,下可生成*.hex 的可执行文件,但是如何生成*.bin 可执行文件?答案是可以使用RVCT 的fromelf.exe 工具进行转换。也就是说首先将源文件编译链接成*.axf 的文件,然后使用fromelf.exe 工具将*.axf 格式的文件转换成*.bin格式的文件。
构选Run User Programs After Build/Rebuild 并输入:
C:\Keil\ARM\BIN31\fromelf.exe --bin -o   <route>name.bin   <route>name.axf
编译工程即可生成name.bin文件。

5.Realview MDK中的调试脚本
<KRealview MDK中调试脚本的详细解析 Eembest 徐良平>
      和其他集成开发环境一样,Realview MDK中也使用了调试脚本。调试脚本除了可以初始化软硬件的调试环境以外,还可以初始化Flash的烧写环境,甚至可以提供信号函数模拟片上外围设备。所以在使用Realview MDK调试和烧写的过程中,到处都有调试脚本的身影。下面将分三个方面详细地研究调试脚本的编写和使用。在介绍调试脚本之前,先必须了解Realview MDK预定义的一些常用命令和函数的用法。
1. 常用预定义命令的说明及注意事项:
下表是一些常用的预定义命令和函数的语法格式及说明。
预定义的命令语法                                                描述
MAP 开始地址, 结束地址                       在内存中映射一段存储区域。
Go 开始地址,结束地址                            程序从开始地址运行,到结束地址停止。
DIR VTREG                                                 显示所有的CUP引脚寄存器。

预定义的函数                                                        描述
void rwatch (ulong address)                            信号函数被延时,直到函数参数地址被读取。
void wwatch (ulong address)                           信号函数被延时,直到函数参数地址被写入。
void swatch (float seconds)                              信号函数延时参数指定的时间,单位为S。
void twatch (ulong states)                                 信号函数延时参数指定的CUP周期。
uchar _RBYTE (address)                                   在参数指定的地址处读取1个字节的数据。
ulong _RWORD (address)                                  在参数指定的地址处读取1个整型的数据。
ulong _RDWORD (address)                               在参数指定的地址处读取1个长整型的数据。
uchar _WBYTE (address, uchar val)                向参数指定的地址处写入1个字节的数据。
void _WWORD (address, uint val)                    向参数指定的地址处写入1个整型的数据。
void _WDWORD (address, ulong val)              向参数指定的地址处写入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下载时,目标板的硬件环境也需要配置,其配置方法和硬件调试的情况是一样的,在此不再赘述。

6.如何在MDK中使用J-LINK

目标硬件的初始化文件,一定要的,否则下载可能会不正常.

若发现下载速度比较慢,可以适当调节JTAG速度,前提是要稳定.

最后要注意这个分散加载文件,这个是能调试程序的前提.

RealView MDK使用相关推荐

  1. ADS与RealView MDK

    在 ARM + Linux 培训班学习,讲师一般首先讲解用 ADS 或 RealView MDK 去调试 ARM 开发板.原因在于: 1.掌握 ARM 体系结构.ARM 是一种计算机,掌握其体系结构也 ...

  2. RealView MDK在链接时提示空间不够的解决方案总结

    RealView MDK具有强大的编译.链接功能.嵌入式设备拥有的资源往往有限,如果一个程序编译.链接之后的可执行文件大小略大于存储大小时,则不能生成可执行文件进行调试或固化到Flash中.在这种情况 ...

  3. S3C2440 由ADS移植到 RealView MDK kile4

    RealView MDK在中国推出已经有一段时间了,而且作为未来发展的趋势必将取代ADS1.2,成为工程师广泛应用的开发平台. 但是,以前的S3C2440的项目都是由ADS开发,而且我在网上搜索并没有 ...

  4. RealView MDK集成开发环境的使用

    熟悉RealView MDK集成开发环境的使用 一.实验目的 1. 掌握RealView MDK集成开发环境的安装过程: 2. 掌握RealView MDK集成开发环境的使用方法: 3. 掌握创建工程 ...

  5. ARM指令寻址方式及RealView MDK开发环境ARM汇编程序实践

    内容简介 本文根据作者在CSDN发表的树莓派ARM汇编语言编程十讲(第3讲) (CSDN链接https://blog.csdn.net/yuanzywhu/article/details/104975 ...

  6. 【ARM嵌入式】实验报告一 熟悉RealView MDK集成开发环境的使用

    实验一 熟悉RealView MDK集成开发环境的使用 一.实验目的 1. 掌握RealView MDK集成开发环境的安装过程: 2. 掌握RealView MDK集成开发环境的使用方法: 3. 掌握 ...

  7. 熟悉RealView MDK集成开发环境(Keil uVision4)的使用

    实验一 熟悉RealView MDK集成开发环境的使用 一.实验目的 掌握RealView MDK集成开发环境的安装过程: 掌握RealView MDK集成开发环境的使用方法: 掌握创建工程和源程序文 ...

  8. RealView MDK 使用

    1.分散加载文件(链接脚本文件)的格式 问题描述: 在链接的时候,要在不同的地址处添加链接文件,暨分散加载文件,这个分散加载文件有什么样的格式呢? 问题解答:         程序正确编译生成目标文件 ...

  9. Realview MDK 链接脚本文件详细解析(一)–链接符号

    Realview MDK 链接脚本文件详细解析(一)–链接符号 Realview MDK 链接程序使用了两种方式控制程序的链接,即链接控制命令选项和链接脚本文件 链接脚本文件 链接脚本文件类型一般为: ...

最新文章

  1. 本地xshell损坏了着急拷贝服务器上的大文件怎么办?有办法lrzsz来帮忙
  2. python交互式绘图库_一个交互式可视化Python库——Bokeh
  3. 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用...
  4. JAVA 之反射(基础概念) 几个主要常用的重要的方法
  5. linux下代码写错了怎么更改_AWS全面上市开源Linux发行版,专为容器操作系统设计...
  6. 基本数据类型与字符串的转换
  7. oraclek导出表_oracle如何导出和导入数据库/表
  8. 算法原理与分析第二次作业
  9. 智能家居(1)行业发展分析
  10. CTFHub | HG泄露
  11. 等比缩放公式_图片等比例缩小算法
  12. 优必选在 CES 上发布了一个真·家庭服务机器人
  13. 2020年浙江理工大学新生赛 D DD_BOND看到的hcy
  14. 代码补全漫谈(1) - 从TabNine说起
  15. test120200612shu
  16. Python实训记录,对字符串进行格式化处理输出
  17. Java调用Cplex的基础简单教程
  18. 配置PPPOE拨号和固定IP上网-从零开始学RouterOS系列02
  19. 微信公众号菜单开发配置
  20. python英文题17-18

热门文章

  1. 负载均衡10年发展,应用交付成核心架构
  2. Linux虚拟机遇到的一些问题
  3. 车路协同云/边缘云服务平台概要【原创】
  4. 《智能路由器开发指南》核心笔记(全)
  5. text html叫什么意思,text是什么意思_text是什么意思
  6. 面试:GET 请求能上传图片吗,已解决
  7. 这 6 款在线 PDF 转换工具,得试试
  8. 2022到2023基于PHP+微信小程序毕业设计课题参考
  9. 微信小程序项目源码springboot在线考试系统小程序+后台管理系统|前后分离VUE.js
  10. php 图片印章_php版圆形印章生成器