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

Programs, sources, embedded, demomaking, whatsoever related to subj :)

Postby DimkaM » 08 Jan 2012, 19:54

fk0 wrote:С макросом нет проблемы (или в чём она???)
Незнаю где указать в макросе, что нужно возвращать.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1010
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby deathsoft » 08 Jan 2012, 20:16

DimkaM wrote:Незнаю где указать в макросе, что нужно возвращать.

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

В gcc есть спец макросы с возвращаемым значением (но к z80 это отношения не имеет).
User avatar
deathsoft
 
Posts: 4666
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 08 Jan 2012, 20:19

DimkaM wrote:Экономия вышла ~1.5кб.

Экономии выйти никакой не может, т.к. переменная выделяется в самом верхнем фрейме стеке и потом никуда не копируется, передается указатель на нее через регистр. Если вышла экономия 1.5к значит чтото было накожено через жопу. Я вон иаром компилил спокойно MD5 и AES под z80 и они работали (без всяких статических данных, контекст передавался по указателю, компилил обычные сишные сорцы скачанные из инета, без каких либо переделок под z80).
User avatar
deathsoft
 
Posts: 4666
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 08 Jan 2012, 20:21

fk0 wrote:Типичный пример возвращаемой по значению структуры -- div_t

Это по сути эмуляция типа int64 если компилятор его не поддерживает (в данном случае частное и остаток).
User avatar
deathsoft
 
Posts: 4666
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby fk0 » 08 Jan 2012, 20:58

хуй. остаток и частное -- 16 бит (как и int). и ни разу не int32 оно. Смысл есть, особенно для z80, где деление медленное.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1533
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 08 Jan 2012, 21:02

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))
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1533
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby DimkaM » 04 Dec 2012, 09:01

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

В частности интересно как передать неопределённое количество параметров в макрос
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1010
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby deathsoft » 04 Dec 2012, 18:36

никак это Ц99, а иар его не поддерживает в иаре Ц89. Используй препроцессор от msvc или от gcc, препроцессор не компилятор его можно использовать от чего угодно.
User avatar
deathsoft
 
Posts: 4666
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby DimkaM » 05 Dec 2012, 07:49

ого, я и не в курсе про препроцессоры.спасиб
deathsoft wrote:препроцессор от msvc

как называется екзешник? Или может родной иаровский бывает?
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1010
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby deathsoft » 05 Dec 2012, 16:49

DimkaM wrote:как называется екзешник?

cl /E
User avatar
deathsoft
 
Posts: 4666
Joined: 07 Apr 2007, 00:58
Group: Registered users

PreviousNext

Return to Coding

Who is online

Users browsing this forum: No registered users and 2 guests

cron