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-
解决方法:
使用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)
相关问答
-
02012-12-24 14:46:50
-
02020-03-16 10:52:39
-
2013-08-24 22:21:18
-
02018-12-04 18:05:35
-
2015-06-11 16:00:38
-
562019-11-22 10:08:00
-
2016-03-25 02:21:12
-
2015-07-13 19:47:47
-
2013-11-28 22:19:21
-
2017-09-12 12:04:27
-
2015-01-27 13:42:24
-
2015-03-14 10:55:11
-
2015-09-09 11:58:12
-
2017-04-22 22:34:42
-
2020-03-26 16:28:13
-
2010-01-25 14:03:23
-
2018-07-11 14:37:00
-
2012-12-04 11:50:50
-
2015-08-10 11:21:54
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认