А что выдаст на
?Код:static char string[255] = "Hello World\n";
Вид для печати
можно еще попробовать
char string[] = "Hello World\n";
char *string = "Hello World\n";
и static если string неглобальная переменная
а в чем mojon twins компилят?
сокращение кода примерно на 300 байт. но строка так целиком в бинарнике и не появилась. в этом плане IAR получше будет...
---------- Post added at 22:14 ---------- Previous post was at 21:22 ----------
и ещё об оптимизации... строка
unsigned char string[]="Hello World\n";
SDCC превращает вот в это УГ!!!
а к слову сказатьКод:;main.c:7: unsigned char string[]="Hello World\n";
ld hl,#0x0003
add hl,sp
ld c,l
ld b,h
ld a,#0x48
ld (bc),a
ld e,c
ld d,b
inc de
ld a,#0x65
ld (de),a
ld e,c
ld d,b
inc de
inc de
ld a,#0x6C
ld (de),a
ld hl,#0x0003
add hl,bc
ex de,hl
ld a,#0x6C
ld (de),a
ld hl,#0x0004
add hl,bc
ex de,hl
ld a,#0x6F
ld (de),a
ld hl,#0x0005
add hl,bc
ex de,hl
ld a,#0x20
ld (de),a
ld hl,#0x0006
add hl,bc
ex de,hl
ld a,#0x57
ld (de),a
ld hl,#0x0007
add hl,bc
ex de,hl
ld a,#0x6F
ld (de),a
ld hl,#0x0008
add hl,bc
ex de,hl
ld a,#0x72
ld (de),a
ld hl,#0x0009
add hl,bc
ex de,hl
ld a,#0x6C
ld (de),a
ld hl,#0x000A
add hl,bc
ex de,hl
ld a,#0x64
ld (de),a
ld hl,#0x000B
add hl,bc
ex de,hl
ld a,#0x0A
ld (de),a
unsigned char * string ="Hello World"; делает как раз то что надо :-), только такая запись бывает не всегда уместна. сяс посмотрю что компилит IAR...
---------- Post added at 22:20 ---------- Previous post was at 22:14 ----------
IAR фиолетово как писать
usnigned char string[]="Hello World"; или
usnigned char * string="Hello World";
Строка красиво и главное целостно ложится в бинарник... и это радует!
и ещё об оптимизации... строка
unsigned char string[]="Hello World\n";
если string не глобальная а объявленна в функции, то значит она auto и должна быть в стеке
IAR я люблю и не выкину, а вот SDCC пожалуй утоплю... итак...
C:
ASM:Код:unsigned char string[]="Hello World\n";
string[0]='X';
IARка молодец?Код:806e 39 ADD HL,SP
806f 5D LD E,L
8070 54 LD D,H
8071 21F480 LD HL,80F4H
8074 010D00 LD BC,000DH
8077 EDB0 LDIR
8079 DD36F258 LD (IX-0EH),58H
---------- Post added at 00:58 ---------- Previous post was at 00:51 ----------
но есть 2 варианта создаваться:
1. скопировать строку откуда-то из памяти целиком
2. инициализировать её побайтово.
так вот по первому варианту работает IAR, а SDCC по второму.
MegaMyth, более того, SDCC для кода
static const char * const str = "Hello word!";
генерица в памяти указатель и код его инициализации :S