Page 14 of 15
Re: IAR вопросик
Posted:
21 May 2013, 17:37
by DimkaM
Почему иар(з80) генерит такое:
- Code: Select all
#define MTYPER ((volatile unsigned int*)(WIZ_BASE_ADDR+0x0030))
LD HL,16432
LD C,(HL)
INC HL
LD B,(HL)
PUSH BC
LD HL,?0042
PUSH HL
CALL printf
POP AF
POP AF
; 133. printf("MTYPER %d\n", *MTYPER);
а не ld bc,(16432) ?
Что то я не так делаю, или иар тупой, или на то есть некие причины
Re: IAR вопросик
Posted:
21 May 2013, 17:45
by DimkaM
....часть вторая:
- Code: Select all
#define GAR ((volatile unsigned char*)(WIZ_BASE_ADDR+0x0010))
LD BC,(16402)
LD B,0
PUSH BC
LD BC,(16403)
LD B,0
PUSH BC
LD BC,(16400)
LD B,0
PUSH BC
LD BC,(16401)
LD B,0
PUSH BC
LD HL,strip
PUSH HL
CALL printf
POP AF
POP AF
POP AF
POP AF
POP AF
; 56. printf(strip,GAR[1],GAR[0],GAR[3],GAR[2]);
чё за херня
там он типа не умеет bc загрузить из памяти, а тут типа смог
эти два куска взяты из одного исходника, соответственно опцыи\галочки\параметры - они же
Re: IAR вопросик
Posted:
24 May 2013, 10:59
by fk0
IAR таки тупой (отрабатывает операцию "звёздочка" в лоб). попробуй написать extern int MYTYPER и через линкер назначить ему адрес в 16432...
Re: IAR вопросик
Posted:
24 May 2013, 14:53
by DimkaM
я вот думаю выделить область памяти с адреса WIZ_BASE_ADDR, и туда накидать переменных MTYPER,GAR etc
тока вот насколько это грамотно хз.
Re: IAR вопросик
Posted:
24 May 2013, 19:07
by fk0
А чего ты в целом хочешь сделать? В WIZ_BASE_ADDR, похоже, проще структуру положить. Если, конечно, это не физические регистры wiznet'а. Тогда структуру не стоит, а нужно руками писать код передающий по байтику в нужной ендианности (т.е. те же инты нельзя так просто записывать, строго вручную и по байту).
Re: IAR вопросик
Posted:
24 May 2013, 19:21
by DimkaM
Ага, физические реги визнета.
Тока они переделаны в литтлэндиан, инверсией А0. Я читаю/пишу их как обычные инты
Re: IAR вопросик
Posted:
07 Jun 2013, 17:22
by DimkaM
fk0 wrote:...и через линкер назначить ему адрес в 16432...
как?
Re: IAR вопросик
Posted:
07 Jun 2013, 23:35
by fk0
Через абсолютную метку ассемблера, через скрипт линкера (не знаком с IAR, но допускаю, такая возможность должна быть, обычно есть в том или ином виде).
Re: IAR вопросик
Posted:
08 Jun 2013, 19:57
by deathsoft
В линкер скрипте есть опция назначить символу с определенным именем определенное значение.
- Code: Select all
-D?BANK_SWITCH_PORT_X_L08=7FFD
Re: IAR вопросик
Posted:
09 Jun 2013, 08:06
by DimkaM
теперь всё красивенько(и через .xcl и через .asm)
- Code: Select all
LD HL,(WIZ_REG_MTYPER)
PUSH HL
LD HL,?0053
PUSH HL
CALL printf
POP AF
POP AF
; 170. printf("MTYPER %d\n", *MTYPER);