C makro ( Bray terminal megy, kosz...en voltam a bena)
Fuzesi Arnold
arno at externet.hu
Tue Dec 20 07:01:26 CET 2005
AVR-nel asszem ez nem jatszik, mert a flash-bol baratsagtalan atvarazsolni
az adatot a ram-ba (regbe...) nehezkes...
151 if( cmd_tmp==ToCmd2(PP)){
\ ??main_4:
\ 000000C0 9100.... LDS R16, `?<Constant "PP">`
\ 000000C4 9110.... LDS R17, (`?<Constant "PP">` + 1)
\ 000000C8 17A0 CP R26, R16
\ 000000CA 07B1 CPC R27, R17
\ 000000CC F499 BRNE ??main_5
Ha flash lenne nem intezne el egy LDS-el...
Lehet hogy varazsolni kene a __flash tipusmodositoval kicsit...de majd
holnap...vagymi, kesobb. :)
Arnold
----- Original Message -----
From: "Andras Tantos" <andras at tantosonline.com>
To: <elektro at tesla.hu>; <Retro at lists.tmp.hu>
Sent: Tuesday, December 20, 2005 5:46 AM
Subject: Re: C makro ( Bray terminal megy, kosz...en voltam a bena)
Hali!
Azert, mert a fordito le fog rakni (az .rdata) adatszekcioba egy harom-elemu
karakter-tombot (ez lesz a string-ed). Ha eleg szerencsetlen, meg arra se
jon ra, hogy az indexeles
konstans, igy az egesz ToCmd kifelyezes ertek forditasi idoben
kieertekelheto. Ha erre rajon,
akkor van eselyed arra, hogy (leven magara a string konstansra) nem lesz
hivatkozas a kodban,
a linker ki fogja rugni. Ez esetben valoban nem lesz kod-meret novekedes.
A masodik verzion viszont szinte biztos nem lat at a fordito (tehat, hogy a
'vegyuk a cimet egy konstans tomb elso elemenek, a pointert cast-oljuk at
mas tipusura, majd vegyuk az altala mutatott cim erteket' muveletsor
valojaban egy konstans szamot general) es valodi hivatkozast general a
string-re. Ez esetben - leven a fentieket futasi idoben fogja megcsinaltatni
a koddal - mind a kodmeret, mind az adatmeret nagyobb lesz, mint kivanatos.
Ki is probaltam (VC++ 8.0). Az elso makro a kovetkezo kodot csinalta:
#include <stdio.h>
#define ToCmd(value) (((int)((#value)[0])) | ((int)((#value)[1]) << 8))
void main() {
printf("%x\n",ToCmd(ZZ));
}
Main:
00401010 push 5A5Ah
00401015 push offset string "%x\n" (41DB5Ch)
0040101A call printf (40102Bh)
0040101F add esp,8
00401022 xor eax,eax
00401024 ret
Az adatszegmensben nincs benne a string.
A masodik makrobol ez lett:
#include <stdio.h>
#define ToCmd(value) (*(int *)(#value))
void main() {
printf("%x\n",ToCmd(ZZ));
}
00401010 mov eax,dword ptr [string "ZZ" (41DB60h)]
00401015 push eax
00401016 push offset string "%x\n" (41DB5Ch)
0040101B call printf (40102Bh)
00401020 add esp,8
00401023 xor eax,eax
00401025 ret
Lathatoan hosszabb, es az is szepen lattszik, hogy hivatkozik a string-re,
igy az adat-memoriat foglal is.
Udv,
Tantos Andras
----- Original Message -----
From: "Fuzesi Arnold" <arno at externet.hu>
To: <elektro at tesla.hu>; <Retro at lists.tmp.hu>
Sent: Monday, December 19, 2005 4:57 PM
Subject: Re: C makro ( Bray terminal megy, kosz...en voltam a bena)
> Nagy vagy, köszi!!!!!!!
>
> Miért foglal több memóriát?
> Ezt nem értem hirtelen.
>
> Arnold
> ----- Original Message -----
> From: "Andras Tantos" <andras at tantosonline.com>
> To: <elektro at tesla.hu>; <Retro at lists.tmp.hu>
> Sent: Tuesday, December 20, 2005 1:13 AM
> Subject: Re: C makro ( Bray terminal megy, kosz...en voltam a bena)
>
>
> Nem igen, a string zero-lezarasa miatt, de valami ilyesmi mukodik, csak
> tobb
> memoriat foglal (hacsak a fordito nem nagyon ugyes):
>
> #define ToCmd(value) (((int)((#value)[0])) | ((int)((#value)[1]) << 8))
>
> vagy ez (ez csak big-endien gepen fog mukodni):
>
> #define ToCmd(value) (*(int *)(#value))
>
> Haszalatuk:
>
> ToCmd(ZZ);
>
> Udv,
> Tantos Andras
>
> ----- Original Message -----
> From: "Fuzesi Arnold" <arno at externet.hu>
> To: <elektro at tesla.hu>; <Retro at lists.tmp.hu>
> Sent: Monday, December 19, 2005 3:25 PM
> Subject: C makro ( Bray terminal megy, kosz...en voltam a bena)
>
>
>> #define ToCMD(value1,value2) (value1|value2<<8)
>>
>> Hasznalata
>> ToCMD('Z','Z');
>>
>> Ehelyett ilyet szeretnek
>> ToCMD("ZZ");
>>
>> Vagy meginkabb ilyet:
>> ToCMD(ZZ);
>>
>> Lehet ilyet?
>> Nyilvan faradok...de elkezdeni sem tudom.. :(
>>
>> Kösz,
>> Arnold
>>
>> -----------------------------------
>> Szponzorunk: http://tonerbolt.hu/
>>
>
> -----------------------------------
> Szponzorunk: http://tonerbolt.hu/
>
> -----------------------------------
> Szponzorunk: http://tonerbolt.hu/
>
_______________________________________________
Retro levelezőlista
Lista címe: Retro at lists.tmp.hu
Beállítások: http://lists.tmp.hu/cgi-bin/mailman/listinfo/retro
More information about the Elektro
mailing list