problem z C

Jan 27, 2005 5 Replies

Witam,



W prgramie w C Keil na 51 umieszczam zamiennie ponizej przedstawione linie


1) wskaznik=&Limits[0].SensorsOnOff;
*wskaznik=6;


2) Limits[0].SensorsOnOff=6;


Obie te instrukcje 1 i 2 daj± inny efekt, a chyba powinny dac taki sam.



zmienna "wskaznik" zadeklarowana jest nastêpuj±co: int xdata *wskaznik;



deklaracja struktury wygl±da nastêpuj±co:



struct Granice{ unsigned int UA; unsigned int DA; unsigned int UB; unsigned int DB; unsigned int UC; unsigned int DC; unsigned int UD; unsigned int DD; unsigned char DwuStanZad; unsigned char SensorsOnOff; unsigned char rezerwa; }Limits[8] _at_ 0x0060;


Co jest nie tak?



Pozdrawiam



KS


Cos mi tu nie pasuje. Czemu wskaznik typu int, skoro SensorsOnOff jest typu char? Czy dostep do UA ...DD jest OK?

peters

skoro wskazujesz na elementy struktury to zadeklaruj wskaźnik do struktury:

struct Granice *wskaznik; wskaznik = &Limits[0]; wskaznk->SensorsOnOff=6;

Nie wiem jak w Keil C, ale np. w CodeVisionAVR efekt jednakowy.

swiniaczek

U¿ytkownik "KS" snipped-for-privacy@interia.pl napisa³ w wiadomo¶ci news:cta2ah$jl6$ snipped-for-privacy@news.dialog.net.pl...

wskaznik jest int * czyli na 2 lub 4 bajtowa wartosc Zapisujac pod taki wskaznik zapisujesz 2 lub 4 kolejne bajty. W ktory trafi ta 6-tka zalezy od endianu.

W ogole jakim cudem kompilator przepuscil cos takiego. Co to za cudo? Assembler o skladni C?

Krzysiek Rudnik

każdy przepuści. to nie C++, żeby typy musiały się zgadzać. co najwyżej te bardziej kulturalne wyrzucą ostrzeżenie.

w.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required