If a user write a program array-test.c
Code:
unsigned char array1[2]={0x77,0x88};
unsigned char array2[3]={0x11,0x22,0x33};
assemble it
nds32le-elf-gcc -S array-test.c
.file 1 "array-test.c"
.abi_2
.section .mdebug.abi_nds32
.previous
.section .note.nds32, "", @progbits
.string "'-mlib=mculib' '-static' '-S'"
.previous
.globl array1
.data
.align 2 .type array1, @object
.size array1, 2
array1:
.byte 119
.byte -120
.globl array2
.align 2 .type array2, @object
.size array2, 3
array2:
.byte 17
.byte 34
.byte 51
.ident "GCC: (2013-09-24) 4.4.4"
Note the ".align 2" represents it is aligned on 4-byte address.
This situation only happens in BSP v3.2.0, BSP v4.0.0 is aligned on 1-byte address.
The objdump of array-test.o is
$ nds32le-elf-gcc -c array-test.c
hylai@APC187 /cygdrive/d/Andestech/AndeSight201MCU/mcu/workspace2/array-test/src
$ nds32le-elf-objdump.exe -s array-test.o
array-test.o: file format elf32-nds32
Contents of section .data:
0000
77880000 11223300 w...."3.
Contents of section .note.nds32:
0000 272d6d6c 69623d6d 63756c69 62272027 '-mlib=mculib' '
0010 2d737461 74696327 20272d63 2700 -static' '-c'.
Contents of section .comment:
0000 00474343 3a202832 3031332d 30392d32 .GCC: (2013-09-2
0010 34292034 2e342e34 00 4) 4.4.4.
------------------
To avoid this waste of space, we can change the align of this array.
Syntax:
Code:
__attribute__((aligned(1))) unsigned char array1[2]={0x77,0x88};
__attribute__((aligned(1))) unsigned char array2[3]={0x11,0x22,0x33};
The assembly code:
Code:
.file 1 "array-test2.c"
.abi_2
.section .mdebug.abi_nds32
.previous
.section .note.nds32, "", @progbits
.string "'-mlib=mculib' '-static' '-S'"
.previous
.globl array1
.data
.type array1, @object
.size array1, 2
array1:
.byte 119
.byte -120
.globl array2
.type array2, @object
.size array2, 3
array2:
.byte 17
.byte 34
.byte 51
.ident "GCC: (2013-09-24) 4.4.4"
This objdump:
$ nds32le-elf-gcc -c array-test2.c
hylai@APC187 /cygdrive/d/Andestech/AndeSight201MCU/mcu/workspace2/array-test/src
$ nds32le-elf-objdump.exe -s array-test2.o
array-test2.o: file format elf32-nds32
Contents of section .data:
0000
77881122 33 w.."3
Contents of section .note.nds32:
0000 272d6d6c 69623d6d 63756c69 62272027 '-mlib=mculib' '
0010 2d737461 74696327 20272d63 2700 -static' '-c'.
Contents of section .comment:
0000 00474343 3a202832 3031332d 30392d32 .GCC: (2013-09-2
0010 34292034 2e342e34 00 4) 4.4.4.
Note: Users must follow the alignment rule. ex. a integer is four bytes, and it is aligned in 4-byte boundary.