lk代码如何添加编译信息
㈠ java中double类型转换为String类型
基础类型转换为String类型可以有一下集中方法,
1.使用字符串拼接的方法,代码实例如下:
System.out.println((a+"") instanceof String);
这样就可以直接转为String类型
2. 使用String.valueOf方法,转为String类型
String.valueOf(a);
测试代码和结果如下
拓展知识
java中的类型转换有如下几条规则:
boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错;
基本数据类型中数值类型的自动类型提升;
㈡ 如何解决CubeSuit+ 编译E3206错误 的问题
问题是由于程序代码大于共用flash引起的,需要把部分代码放到Bank(bank0或者其他)中。
解决办法:
(1)创建一个lk.dr文件,然后编入:merge segment1 :=BANK0
;merge segment2 :=BANK1
(2)把lk.dr添加到工程中;
(3)把要放在bank中的C文件,在C代码文件的头顶加入
#pragma section @@CNST segment1
然后编译,观察map文件再做调整。
以上方法由QQ群:瑞萨(NEC)应用交流 173700459 古董大神提供。
问题是我这样操作了,编译后查看map发现有以下疑问:
78K/0 Series Linker V4.01 Date:22 Jan 2015 Page: 3
@@R_INIS @ROM 00085H 00000H
@@CNST 00085H 00000H CSEG UNITP
@@CNST @cstart 00085H 00000H
@@CNST MCU_Init 00085H 00000H
* gap * 00085H 0000AH
* gap (Not Free Area) * 0008FH 00101H
@@LCODE 00190H 000AFH CSEG
@@LCODE @cstart 00190H 00076H
@@LCODE @imul 00206H 00014H
@@LCODE @hdwinit 0021AH 00001H
@@LCODE exit 0021BH 00024H
@@CODE 0023FH 07C34H CSEG
@@CODE main 0023FH 04F42H
@@CODE MCU_Init 05181H 000E8H
@@CODE ZGDSP2Comm
05269H 0080EH
@@CODE ZGDSPComm
05A77H 0079DH
@@CODE ZGInComm 06214H 0062CH
@@CODE ZGOutComm
06840H 006BBH
@@CODE ZGPMVPro 06EFBH 00BEAH
@@CODE ZGSamp 07AE5H 0038EH
* gap * 07E73H 0018DH
MEMORY=BANK0
BASE ADDRESS=08000H SIZE=04000H
OUTPUT INPUT INPUT BASE SIZE
SEGMENT SEGMENT MODULE ADDRESS
segment1 08000H 0183AH CSEG UNITP
segment1 main 08000H 00330H
segment1 ZGDSP2Comm
08330H 00446H
segment1 ZGDSPComm
08776H 00812H
segment1 ZGInComm 08F88H 00108H
segment1 ZGOutComm
09090H 00000H
segment1 ZGPMVPro 09090H 00190H
segment1 ZGSamp 09220H 0061AH
* gap * 0983AH 027C6H
@@CODE都是在共用Flash
而@@CNST是指 代码中定义的常量在bank0中
㈢ 如何查看程序被哪个版本编译器编译的linux-gcc
那是不可能的,除非你加入了调试信息,也就是编译的时候加入了-g参数,然后用gdb调试就可以显示。最大程度上查看一个elf文件信息。
{
readelf -Wa a.out | head
readelf -wi a.out
readelf -p .comment a.out
objmp -s --section .comment audioplayer
}
如下:
[root@localhost rootfs]# readelf -Wa bin/gzip
复制代码
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0xa080
Start of program headers: 52 (bytes into file)
Start of section headers: 1975444 (bytes into file)
Flags: 0x5000002, has entry point, Version5 EABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 6
Size of section headers: 40 (bytes)
Number of section headers: 25
Section header string table index: 24
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .note.ABI-tag NOTE 000080f4 0000f4 000020 00 A 0 0 4
[ 2] .init PROGBITS 00008114 000114 00000c 00 AX 0 0 4
[ 3] .text PROGBITS 00008120 000120 17fcfc 00 AX 0 0 16
[ 4] __libc_freeres_fn PROGBITS 00187e1c 17fe1c 000f20 00 AX 0 0 4
[ 5] __libc_thread_fre PROGBITS 00188d3c 180d3c 0000e4 00 AX 0 0 4
[ 6] .fini PROGBITS 00188e20 180e20 000008 00 AX 0 0 4
[ 7] .rodata PROGBITS 00188e28 180e28 058147 00 A 0 0 8
[ 8] __libc_subfreeres PROGBITS 001e0f70 1d8f70 00005c 00 A 0 0 4
[ 9] __libc_atexit PROGBITS 001e0fcc 1d8fcc 000004 00 A 0 0 4
[10] __libc_thread_sub PROGBITS 001e0fd0 1d8fd0 000008 00 A 0 0 4
[11] .ARM.extab PROGBITS 001e0fd8 1d8fd8 001b04 00 A 0 0 4
[12] .ARM.exidx ARM_EXIDX 001e2adc 1daadc 006ea8 00 AL 3 0 4
[13] .tdata PROGBITS 001f1984 1e1984 000018 00 WAT 0 0 4
[14] .tbss NOBITS 001f199c 1e199c 000034 00 WAT 0 0 4
[15] .init_array INIT_ARRAY 001f199c 1e199c 000004 00 WA 0 0 4
[16] .fini_array FINI_ARRAY 001f19a0 1e19a0 000008 00 WA 0 0 4
[17] .jcr PROGBITS 001f19a8 1e19a8 000004 00 WA 0 0 4
[18] .data.rel.ro PROGBITS 001f19ac 1e19ac 00002c 00 WA 0 0 4
[19] .got PROGBITS 001f19d8 1e19d8 00007c 04 WA 0 0 4
[20] .data PROGBITS 001f1a58 1e1a58 0008f7 00 WA 0 0 8
[21] .bss NOBITS 001f2350 1e234f 004828 00 WA 0 0 8
[22] __libc_freeres_pt NOBITS 001f6b78 1e234f 00003c 00 WA 0 0 4
[23] .ARM.attributes ARM_ATTRIBUTES 00000000 1e234f 00002b 00 0 0 1
[24] .shstrtab STRTAB 00000000 1e237a 000118 00 0 0 1
Section to Segment mapping:
Segment Sections...
00 .ARM.exidx
01 .note.ABI-tag .init .text __libc_freeres_fn __libc_thread_freeres_fn .fini .rodata __libc_subfreeres __libc_atexit __libc_thread_subfreeres .ARM.extab .ARM.exidx
02 .tdata .init_array .fini_array .jcr .data.rel.ro .got .data .bss __libc_freeres_ptrs
03 .note.ABI-tag
04 .tdata .tbss
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "5TE"
Tag_CPU_arch: v5TE
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align8_needed: Yes
Tag_ABI_align8_preserved: Yes, except leaf SP
Tag_ABI_enum_size: int
Tag_unknown_44: 1 (0x1)
复制代码
How to retrieve the GCC version used to compile a given ELF executable? http://stackoverflow.com/questions/2387040/how-to-retrieve-the-gcc-version-used-to-compile-a-given-elf-executable
QUES: I'd like to retrieve the GCC version used to compile a given executable. I tried readelf but didn't get the information. Any thoughts?
ANS: To complete what others have said: it's not stored in the object (or exe) file, unless you compile with debugging information! (option -g). If you compile with debug info, you can get it back with readelf:
复制代码
[root@localhost test]# gcc a.c
[root@localhost test]# readelf -wi a.out
[root@localhost test]# gcc a.c -g
[root@localhost test]# readelf -wi a.out
The section .debug_info contains:
Compilation Unit @ offset 0x0:
Length: 135
Version: 2
Abbrev Offset: 0
Pointer Size: 8
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
DW_AT_stmt_list : 0
DW_AT_high_pc : 0x400453
DW_AT_low_pc : 0x400448
DW_AT_procer : GNU C 4.1.2 20080704 (Red Hat 4.1.2-55)
DW_AT_language : 1 (ANSI C)
DW_AT_name : a.c
DW_AT_comp_dir : /work/farsight/test
<1><61>: Abbrev Number: 2 (DW_TAG_subprogram)
DW_AT_external : 1
DW_AT_name : main
DW_AT_decl_file : 1
DW_AT_decl_line : 4
DW_AT_prototyped : 1
DW_AT_type : <83>
DW_AT_low_pc : 0x400448
DW_AT_high_pc : 0x400453
DW_AT_frame_base : 0 (location list)
<1><83>: Abbrev Number: 3 (DW_TAG_base_type)
DW_AT_name : int
DW_AT_byte_size : 4
DW_AT_encoding : 5 (signed)
复制代码
ANS2:
㈣ java编译程序的时候总是提示找不到符号
public static void main(String[] args) throws Exception {
System.out.println("请输入你的姓名:");
Scanner in = new Scanner(System.in);
String lk = in.next();
System.out.println("请输入你的年龄:");
int kj = in.nextInt();
System.out.println("姓名:" + lk);
System.out.println("年龄:" + kj);
}