<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.2900.5512" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY text=#000000 bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Prikaz #define je vlastne jen textove makro, kdy se
nejaky text ve zdrojovem kodu nahradi jinym textem jeste pred zahajenim
samotneho prekladu.</FONT></DIV>
<DIV><FONT face=Arial size=2>Obecne lze pouzit temer kdykoli cokoliv, protoze
vzdy lze pouzit pretypovani. V uvedenem pripade asi velky rozdil neni, ale
slozitejsi je to tehdy, pokud prikazem #define rovnou definujete ukazatel na
vicebytovy objekt (napr.: uint16_t*). Pricteni jednicky k takovemu ukazateli
neznamena zvetseni adresy o "1", ale zvetseni ukazatele na dalsi objekt daneho
typu, tzn. v uvedenem pripade se zvetsi adresa o "2", obecneji o
"sizeof(uint16_t)". A to je potreba opravdu dusledne hlidat. Proto tady byl
doporucovan zapis "&XX[yy]", tam je to (mozna) jasnejsi. Ale priznavam, ja
osobne take pouzivam radeji scitani konstant (ukazatelu) nez zapis pomoci
indexu - "[yy]". Programatori "dospelych" programu mne urcite budou chtit take
rovnou ukamenovat, ale mam pocit, ze pro lidi, kteri pisi programy pro
mikrokontrolery a porad se prehrabuji v "adresach" je to takove logictejsi.
Aritmetika ukazatelu ma sice mnoho nastrah, ale z meho pohledu jsou i horsi
veci - to kdyz mikrokontroler neumi nacist 16-ti bitove cislo z liche adresy. A
tady zadne kontroly v kompilatoru nepomohou - zvlaste, kdyz clovek zpracovava
data nejakych komunikacnich protokolu, nejakou dobu to jede, pak "prijde" neco
jineho a je z toho pad programu.</FONT></DIV>
<DIV><FONT face=Arial size=2>Ja naopak mam problem - pokud to mam zapsat jako
index - musim si to nejdrive v hlave prevest. A mam dokonce pocit, ze ve
slozitejsich pripadech delam daleko vice chyb v pouziti indexu nez pri prostem
scitani ukazatelu. Na druhe strane me programy prekypuji (mnohdy nadbytecnymi)
pretypovanimi a rozhodne nesetrim zavorkami! Davam je casto i tam, kde byt
nemusi, ale nikdo se pak nemuze stezovat, ze nevi, co tim autor
sledoval. Ale pocitam se spice mezi "prilezitoste" programatory, prestoze
"C" pouzivam snad uz 25 let, tak prakticky vyhradne pro mikrokontrolery a neni
to dohromady vic nez 1/3 pracovni doby. A priznavam na rovinu - po nekolika
tydnech "pustu" casto znovu zvazuji prioritu nekterych operatoru. Tak radeji
"zavorkuji" ...</FONT></DIV>
<DIV><FONT face=Arial size=2>A jak zde obsas zahlednu prispevky na tema "C"
nekterych "nejmenovanych" clenu konference :-), tak mi pada celist a mam pocit,
ze bych se mel jit hrozne rychle stydet nekde do tmaveho kouta ...</FONT></DIV>
<DIV><FONT face=Arial size=2>Martin. <A
href="mailto:persich@transcon.cz">persich@transcon.cz</A></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV>----- Original Message ----- </DIV>
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV
style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B>
<A title=info@elektronikavyvoj.cz href="mailto:info@elektronikavyvoj.cz">Fanda
Kopriva</A> </DIV>
<DIV style="FONT: 10pt arial"><B>To:</B> <A title=hw-list@list.hw.cz
href="mailto:hw-list@list.hw.cz">hwkonference</A> </DIV>
<DIV style="FONT: 10pt arial"><B>Sent:</B> Wednesday, January 07, 2015 5:16
PM</DIV>
<DIV style="FONT: 10pt arial"><B>Subject:</B> Re: pointer v c</DIV>
<DIV><BR></DIV>Dik za odpovedi<BR>nebyl mi tam jasny rozdil mezi ukazatelem na
promnennou <BR>a ukazatelem na cislo (define) coz asi neni obsah promnenne
,ale cislo samo o sobe.<BR><BR>Predpokladam ,ze druhy zapis je obecnejsi
protoze muzu pouzit stejnou adresu pro ruzne<BR>typy dat?<BR><BR>#define
DATA_EEPROM_START_ADDR ((unsigned char
*)0x08080000)<BR><BR>pepromuk = (unsigned char*)(DATA_EEPROM_START_ADDR +
epromadr);<BR><BR> Fanda<BR>
<DIV class=moz-forward-container><BR><BR>-------- Původní zpráva --------
<TABLE class=moz-email-headers-table cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TH vAlign=baseline noWrap align=right>Předmět: </TH>
<TD>pointer v c</TD></TR>
<TR>
<TH vAlign=baseline noWrap align=right>Datum: </TH>
<TD>Tue, 06 Jan 2015 15:07:03 +0100</TD></TR>
<TR>
<TH vAlign=baseline noWrap align=right>Od: </TH>
<TD>Fanda Kopriva <A class=moz-txt-link-rfc2396E
href="mailto:info@elektronikavyvoj.cz"><info@elektronikavyvoj.cz></A></TD></TR>
<TR>
<TH vAlign=baseline noWrap align=right>Komu: </TH>
<TD>hwkonference <A class=moz-txt-link-rfc2396E
href="mailto:hw-list@list.hw.cz"><hw-list@list.hw.cz></A></TD></TR></TBODY></TABLE><BR><BR><PRE>Dobry den
jen bych poprosil o ujasneni.
#define DATA_EEPROM_START_ADDR 0x08080000 //4Kb 16 X 256 BYTE
#define LEDErezim 0x080803E0 //L 0 led neblika 1 led blika
void Reasetchar (unsigned long epromadr)
{
unsigned char *pepromuk;
unsigned char cis1;
pepromuk = DATA_EEPROM_START_ADDR + epromadr;
cis1 = *pepromuk++;
...........
...........
pepromuk = LEDErezim;
if (*ppp>0) cis1 |=1;
}
dela to co ma ,ale prekladac hlasi pro radky
pepromuk = DATA_EEPROM_START_ADDR + epromadr;
a
pepromuk = LEDErezim;
upozorneni
Implicit conversion of int to ptr .
Jak by to melo byt spravne.
Dekuju Fanda
</PRE><BR></DIV><BR>
<P>
<HR>
<P></P>_______________________________________________<BR>HW-list mailing
list - sponsored by
www.HW.cz<BR>Hw-list@list.hw.cz<BR>http://list.hw.cz/mailman/listinfo/hw-list<BR></BLOCKQUOTE></BODY></HTML>