Page 14 of 15

Re: IAR вопросик

PostPosted: 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 вопросик

PostPosted: 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 вопросик

PostPosted: 24 May 2013, 10:59
by fk0
IAR таки тупой (отрабатывает операцию "звёздочка" в лоб). попробуй написать extern int MYTYPER и через линкер назначить ему адрес в 16432...

Re: IAR вопросик

PostPosted: 24 May 2013, 14:53
by DimkaM
я вот думаю выделить область памяти с адреса WIZ_BASE_ADDR, и туда накидать переменных MTYPER,GAR etc

тока вот насколько это грамотно хз.

Re: IAR вопросик

PostPosted: 24 May 2013, 19:07
by fk0
А чего ты в целом хочешь сделать? В WIZ_BASE_ADDR, похоже, проще структуру положить. Если, конечно, это не физические регистры wiznet'а. Тогда структуру не стоит, а нужно руками писать код передающий по байтику в нужной ендианности (т.е. те же инты нельзя так просто записывать, строго вручную и по байту).

Re: IAR вопросик

PostPosted: 24 May 2013, 19:21
by DimkaM
Ага, физические реги визнета.
Тока они переделаны в литтлэндиан, инверсией А0. Я читаю/пишу их как обычные инты

Re: IAR вопросик

PostPosted: 07 Jun 2013, 17:22
by DimkaM
fk0 wrote:...и через линкер назначить ему адрес в 16432...
как?

Re: IAR вопросик

PostPosted: 07 Jun 2013, 23:35
by fk0
Через абсолютную метку ассемблера, через скрипт линкера (не знаком с IAR, но допускаю, такая возможность должна быть, обычно есть в том или ином виде).

Re: IAR вопросик

PostPosted: 08 Jun 2013, 19:57
by deathsoft
В линкер скрипте есть опция назначить символу с определенным именем определенное значение.
Code: Select all
-D?BANK_SWITCH_PORT_X_L08=7FFD

Re: IAR вопросик

PostPosted: 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);