zxj123

zxj123

0个粉丝

92

问答

0

专栏

0

资料

zxj123  发布于  2012-12-24 14:38:14
采纳率 0%
92个问答
3157

RealviewMDK常见问题及解决方法

 
   问题一::怎样用RealviiewMDK生成bin文件?

解决方法:

   使用RVCT的fromelf.exe工具进行转换。也就是说首先将源文件编译链接成*.axf的文件,然后使用fromelf.exe工具将*.axf格式的文件转换成*.bin格式的文件。

   假设工程文件的名字为Axf_To_Bin,下面将具体说明这个操作步骤:

1.  打开Axf_To_Bin文件中的Axf_To_Bin.uv2工程文件;

2.  打开OptionsforTarget‘Axf_To_Bin’对话框,选择User标签页;

3.  构选RunUserProgramsAfterBuild/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\表示RVMDK的安装目录;

2.  fromelf.exe命令的具体语法格式如下:

命令的格式为:fromelf[options]input_file

命令选项如下:

    --help    显示帮助信息

    --vsn    显示版本信息

    --output  file    输出文件(默认的输出为文本格式)

    --nodebug    在生成的映象中不包含调试信息

    --nolinkview    在生成的映象中不包含段的信息

二进制输出格式:

    --bin    生成PlainBinary格式的文件

    --m32    生成Motorola32位十六进制格式的文件

    --i32    生成Intel32位十六进制格式的文件

    --vhx    面向字节的位十六进制格式的文件t

    --baseaddr    设置m32,i32格式文件的基地址

    --text    显示文本信息

    文本信息的标志

    -v    打印详细信息

    -a    打印数据地址(针对带调试信息的映象)

    -d    打印数据段的内容

    -e    打印表达式表printexceptiontables

    -f    打印消除虚函数的信息

    -g    打印调试表printdebugtables

    -r    打印重定位信息

    -s    打印字符表

    -t    打印字符串表

    -y    打印动态段的内容

    -z    打印代码和数据大小的信息

    问题二::怎样在RealviiewMDK中添加自己的FLASH编程算法?

    -1-解决方法:

    用户可以自定义flash烧写算法,并把它们集成到Realview  MDK中。这些在RVMDK的用户手册中有详细的介绍。具体的方法如下:

定义一个新的Flash编程算法可以通过如下步骤配置一个新的Flash编程算法:

1.在..\ARM\Flash下新建一个空的子文件夹.

2.将已存在的某个Flash算法(如..\ARM\Flash\LPC_IAP_256)的内容拷贝到这个新文件中,并将此算

    法作为新算法的模板.

3.重命名工程文件LPC_IAP_256.UV2以表示新的Flash ROM设备名,如29F400.UV2并用μVisionIDE将

    其打开.

4.在对话框Project -OptionsforTarget -Output中将所有的输出文件名(如 LPC_IAP_256)替

    换为新的设备名.

5.编辑FlashPrg.C文件并为EraseChip,EraseBlock及ProgramBlock定义函数代码.在函数Init和

    UnInit中编写算法所需的initializations和de-initialization代码.

6.在文件FlashDev.C中的structFlashDevice中定义设备参数.

7.编译新的Flash编程算法.扩展名为*.FLX的输出文件包含新的编程算法.使用Configure Flash

    Download中的Add按钮可将此编程算法文件添加到目标应用中的μVision工程中.

测试一个新的Flash编程算法

    在文件夹..\ARM\Flash\LPC_IAP_256\Test下包含一个工程,它可以测试一个新的Flash编程算法.

注意:新的Flash编程算法的生成需要RVCT的编译工具编译,例如可以用ADS,Realview MDK或者Realview DS编译.使用GNU工具链不可能生成自己的Flash编程算法,然而,可以使用已存在的Flash编程算法

    问题三::在Flash烧写算法库中有对应Flash芯片的烧写算法,:   Flash    Flash    , 但是烧写时出现超时错误..解决方法:

    这种情况一般是没有对总线等内部控制寄存器进行配置,客户可以些一个初始化文件, 例如下面是针对S3C2410芯片和AM29160DB的Flash芯片进行配置的初始化文件:

    FUNC void Init_Board(void)

    {

    _WWORD(0x53000000 ,0x00000000);

    _WWORD(0x4A000008 ,0xFFFFFFFF);

    _WWORD(0x4A00001C ,0x000007FF);

    _WWORD(0x4C000014 ,0x3);

    _WWORD(0x4C000004 ,0x0005c042);

    _WWORD(0x56000070 ,0x00280000);

    _WWORD(0x56000078 ,0x00000000);

    _WWORD(0x48000000 ,0x22111110);

    _WWORD(0x48000004 ,0x00000700);

    _WWORD(0x48000008 ,0x00000700);

    _WWORD(0x4800000C ,0x00000700);

    _WWORD(0x48000010 ,0x00000700);

    _WWORD(0x48000014 ,0x00000700);

    _WWORD(0x48000018 ,0x00000700);

    _WWORD(0x4800001c ,0x00018005);

    _WWORD(0x48000020 ,0x00000700);

    -2-    _WWORD(0x48000024 ,0x008e0459);

    _WWORD(0x48000028 ,0x000000B2);

    _WWORD(0x4800002c ,0x00000030);

    _WWORD(0x48000030 ,0x00000030);

    _WWORD(0x56000014 ,0x1);

    _WWORD(0x56000020 ,0xaaaa55aa);

    _WWORD(0x56000028 ,0xffff);

    _WWORD(0x56000024 ,0x0);

    }

    Init_Board();

一般来说,在烧写时,都应该有这样的一个初始化文件.

    问题四::RealviewMDK的Flash算法库中, 默认的情况下都是假定Flash芯片是被映射到地址0x00000000开始的一段地址空间, 但是, 当Flash被映射到其他的地址空间,,如0x80000000,,这是应该怎么处理呢?

解决方法:

    在图一中修改Flash存储芯片的映射地址. 图一中的Flash存储芯片为AM29F160DB,存储容量为2M. 在公司的S3C2410开发板或者实验箱被映射到0x00000000处, 但是在LPC2138的开发板中被映射到地址0x80000000处, 所以要按图一的红色方框所示修改映射的起始地址.


    图一 修改Flash存储芯片的映射地址

    问题五::在RealviiewMDK中如何烧写biin文件?

解决方法:

    因为Realview MDK可以直接下载*.axf或者*.hex格式的文件,但是不能直接下载*.bin格式的文件,所以,只能先将*.bin格式的文件转换成*.hex格式的文件,例如BIN2HEX工具可以转换(最大的转换容量

    -3-为64K,如果超过这个容量,必须手动添加线型扩展地址或者找到更好的转换工具突破这个64K的限制).在转换的时候,一定要保证地址正确,否则将导致烧写不成功.通过这种方法, 可以将启动代码(例如VIVI),Linux内核以及文件系统(例如CRAMFS),分扇区烧写到Flash存储芯片上.

    问题六::关于LICENSE的一些注意事项

    Realview MDK有两种类型的license,即单机版的LICENSE和浮动license.目前,公司只销售单机版的license,而公司内部使用的是浮动license,它允许25台计算机注册,但是只能有5台计算机同时使用,只有当正在使用浮动license计算机将license归还给服务器后,其他等待license的计算机才可以获得license而使用.

    在注册申请license时, 使用RealviewMDK的计算机应该连接到英特网,并且在KEIL网站上填写注册信息的时候,邮箱一定不能填错,因为license将发送到这个邮箱中.如果使用RealviewMDK的计算机没有联入因特网,也可以通过别的联网计算机在KEIL网站上注册,但是,必须注意,在填写CID时,必须是使用RealviewMDK的那台计算机所生成的.

    当客户要升级Realview MDK时, 没有必要卸载Realview MDK,只须覆盖安装即可. 如果客户想卸载RealviewMDK(以便在另外一台计算机上安装使用),必须先卸载license.万一客户没有卸载license,或者是由于客户的计算机的系统崩溃或硬件故障,导致Realview MDK不能使用,这时,只能向公司(目前由廖武负责)申请后台处理.

    还有一点需要说明一下,当客户卸载license后,只能在24小时以后在申请新的license, 也就是说,如果客户卸载license后,在本机重新申请或在其他计算机上申请时,最少要间隔24小时.

    问题七将程序下载到片上RAM中调试出错

解决方法:

    这种现象可能是由2中原因引起的: 第一, 没有调试初始化文件或设置不正确,具体的格式参考问题三.第二, 分散加载文件(链接脚本文件)的地址配置的不正确(即与开发板上的RAM地址映射不匹配).分散加载文件的格式请参考问题八.

    问题八分散加载文件(链接脚本文件)的格式(    )

    程序正确编译生成目标文件以后,就会链接成可执行的文件,这个过程中要用到分散加载文件,它决定可执行的代码在存储器中存放的位置,这在复杂的程序(例如VIVI对Linux内核的引导)中是很重要的. 下面是一个简单的分散加载文件的例子:

    ;*************************************************************

    ;*** Scatter-LoadingDescription File generated byuVision ***

    ;*************************************************************

    ;Run in Flash

    LR_ROM1 0x00000000    {   ;loadregion

    ER_ROM1 0x00000000 0x0200000  { ; load address = execution address

    *.o (RESET, +First)

    *(InRoot$$Sections)

    .ANY (+RO)

    }

    RW_RAM1 0x30000000 0x4000000  { ; RW data

    .ANY (+RW +ZI)

    -4-    }

    RW_IRAM1 0x40000000 0x00001000 {

    .ANY (+RW +ZI)

    }

    }

   在上面的例程中, 代码从地址0x00000000处开始存放,并且将RESET程序段放在最开始处,而可读写的数据从地址0x30000000处开始存放. 分散加载文件的段的名字(例如LR_ROM1,ER_ROM1等)可以是任意的名字.

    问题九::ADS1.2与RealviewMDK编译工具选项格式的比较

   RVCT3.0采用了POSIX格式的编译连接选项,所有的多字符选项前必须使用双下划线。例如:ADS的编译选项-cpu,在RealveiwMDK中需要改写成--cpu,否则用户在RealveiwMDK中直接使用ADS的makefile时,工具会产生一个如下警告:

    Warning: L3910W:Old syntax, please use ‘--xxx’

    问题十::ADS编译出来的程序是否可以在RealviewMDK下调试?

    ADS下编译出来的程序是可以在RealviewMDK调试的, 如果是*.axf文件,可以直接在RealviewMDK下调试. 如果是*.bin文件,要将它转换成*.hex文件后才能够调试. 用arm-linux-工具编译出来的程序也可以在RealviewMDK下调试,同样要先将他转换成*.hex文件后就可以了.

    问题十一:ADS编译出来的库是否可以在RealviewMDK下使用?

    虽然ADS和RealviewMDK都是用的ARM公司RVCT编译工具,但是它们使用的版本不一样,例如ADS1.2用的是RVCT2.0的编译工具,而最新版的RealviewMDK用的是RVCT3.1的编译工具,同时由于RVCT3.1对RVCT2.0部分兼容,特别是涉及到C++代码的编译时,问题更是突出. 综上所述,ADS下编译出的C库是可以在RealviewMDK下使用的,但是C++库不可以在RealviewMDK下使用.

    问题十二:RealviiewMDK软件调试时,,总会出现地址(例如0x30200010)没有写或执行的权限.解决方法:

    在内存中映射这段地址区域.例如:

    map   0x30200000, 0x30200100 READ WRITEexec

   如果下载后,程序定位的不正确,可以使用如下的命令指定:

    pc=0x30000000


    -5-
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区