Page 2 of 5

Re: IAR Вопрос про макрос

PostPosted: 08 Jan 2012, 19:54
by DimkaM
fk0 wrote:С макросом нет проблемы (или в чём она???)
Незнаю где указать в макросе, что нужно возвращать.

Re: IAR Вопрос про макрос

PostPosted: 08 Jan 2012, 20:16
by deathsoft
DimkaM wrote:Незнаю где указать в макросе, что нужно возвращать.

макрос возвращает все через параметры по указатель
Code: Select all
#define M(ret, val) \
do { *(ret) = (val); } while (0)

В gcc есть спец макросы с возвращаемым значением (но к z80 это отношения не имеет).

Re: IAR Вопрос про макрос

PostPosted: 08 Jan 2012, 20:19
by deathsoft
DimkaM wrote:Экономия вышла ~1.5кб.

Экономии выйти никакой не может, т.к. переменная выделяется в самом верхнем фрейме стеке и потом никуда не копируется, передается указатель на нее через регистр. Если вышла экономия 1.5к значит чтото было накожено через жопу. Я вон иаром компилил спокойно MD5 и AES под z80 и они работали (без всяких статических данных, контекст передавался по указателю, компилил обычные сишные сорцы скачанные из инета, без каких либо переделок под z80).

Re: IAR Вопрос про макрос

PostPosted: 08 Jan 2012, 20:21
by deathsoft
fk0 wrote:Типичный пример возвращаемой по значению структуры -- div_t

Это по сути эмуляция типа int64 если компилятор его не поддерживает (в данном случае частное и остаток).

Re: IAR Вопрос про макрос

PostPosted: 08 Jan 2012, 20:58
by fk0
хуй. остаток и частное -- 16 бит (как и int). и ни разу не int32 оно. Смысл есть, особенно для z80, где деление медленное.

Re: IAR Вопрос про макрос

PostPosted: 08 Jan 2012, 21:02
by fk0
DimkaM wrote:Незнаю где указать в макросе, что нужно возвращать.


extern struct args;
int function(void) {
/* do something with struct args */
return result;
}
#define MACRO(a,b,c,d) (args.val1=a, args.val2=b, args.val3=c, args.val4=d, function(void))

Re: IAR Вопрос про макрос

PostPosted: 04 Dec 2012, 09:01
by DimkaM
как внушить ИАРу(з80) чтоп он это скушал?
Code: Select all
#define PROCINIT(...)  const struct process *procinit[] = {__VA_ARGS__, NULL}

В частности интересно как передать неопределённое количество параметров в макрос

Re: IAR Вопрос про макрос

PostPosted: 04 Dec 2012, 18:36
by deathsoft
никак это Ц99, а иар его не поддерживает в иаре Ц89. Используй препроцессор от msvc или от gcc, препроцессор не компилятор его можно использовать от чего угодно.

Re: IAR Вопрос про макрос

PostPosted: 05 Dec 2012, 07:49
by DimkaM
ого, я и не в курсе про препроцессоры.спасиб
deathsoft wrote:препроцессор от msvc

как называется екзешник? Или может родной иаровский бывает?

Re: IAR Вопрос про макрос

PostPosted: 05 Dec 2012, 16:49
by deathsoft
DimkaM wrote:как называется екзешник?

cl /E