codevision - problem s pointery

Miroslav Sinko sinkomiro@rocketmail.com
Středa Červenec 5 01:47:24 CEST 2006


--- GT5 <gt5@seznam.cz> wrote:
> unsigned int adresa16;
> unsigned char *horni8 , *dolni8;
> adresa = 0x01FA;  // napriklad
> dolni8 = &adresa;
> hodni8 = &adresa + 1; //nasledujici byte o pozici vedle.

Nie je pre smernikovu aritmetiku v tomto pripade rozhodujuci prvy
operand za '=', teda &adresa? To by +1 znamenalo +2 byty, akoze plus
1*sizeof(unsigned int). 

spravne by bolo:
horni8 = (unsigned char*)&adresa + 1;

> nyni by promenne
> // *dolni8 a *horni8 mely obsahovat 0x01 a 0xFA.
> // jenze neobsahuji :(

dolni8 by ale fungovat mal... pripadne explicitne napisat 
dolni8 = (unsigned char*)&adresa;
 
> jiny postup : // opet nefunkcni
> unsigned int adresa16;
> unsigned char horni8 , dolni8;
> adresa = 0x01FA;  // napriklad
> dolni8 = (unsigned char)(0x00FF & adresa);
> horni8 = (unsigned char)(adresa >> 8);  //defacto vydelime 256

hmm... toto by malo fungovat...
pre dolny by malo stacit aj:
dolni8 = (unsigned char)adresa;
 
> Prosil bych o radu "jak" udelat funkce, ktere by vracely horni a
> dolni 
> byte z (unsigned int).
> Nejhorsi je na tom to ze syntaxe je spravna a treba v DOS TurboC v 
> pohode funguje, HitechC pro PIC to taky pobral

3 doplnujuce otazky:

- nepotrebuje ten kompilator pri zapise unsigned int konstant uviest
'u'? teda napr. 0x00FFu alebo 0x01FAu

- je v zmienenom prekladaci int skutocne 16-bitovy? netreba pouzit
short?

- nema prekladac v dodanych headroch preddefinovane makra LOBYTE() a
HIBYTE()? vacsinou to kompilatory maju, potom by ste napisali:
dolni8 = LOBYTE(adresa);
horni8 = HIBYTE(adresa);

skuste napr. tieto makra
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))

kde BYTE a WORD su unsigned byte, resp. unsigned short


miro



__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 



Další informace o konferenci Hw-list