C kerdes
Andras Tantos
andras at tantosonline.com
Thu Mar 22 19:20:20 CET 2007
Hali!
Sajnos azt kell mondjam a forditonak van igaza, nem neked. A fugveny
(ee_checksum) egy uint-et ad vissza, ami gondolom 16-, vagy 32-bites. Magat
a visszateresi erteket is ezen a tipuson szamolod. Azaz a visszateresi ertek
8-bites szamok 16-, vagy 32-bites osszege lesz. Ezt hasonlitod egy
(feltehetoen) 8-bitre csonkolt ellenorzo osszeggel az 'if'-ben. Persze, hogy
a ket dolog nem lesz egyenlo. Ha viszont rakenyszerited a forditot az uint
uchar-ra csonkolasara, akkor mar egyezni fog a dolog, hiszen eldobtad a
felso biteket.
Az osszehasonlitas itt most ugy fog mukodni, hogy mindket oldalt a fordito
eloszor 'unsigned int'-re konvertalja, es ott vegzi az osszehasonlitast.
Csak mert a bal oldal 'uchar' a fordito nem fogja a masik oldalt
automatikusan csonkolni.
Tehat a megoldas vagy az, hogy az ee_checksum visszateresi erteket uchar-ra
valtoztatod, vagy, amit csinaltal is, az explicit konverzio az
osszehasonlitasban.
Udv,
Tantos Andras
----- Original Message -----
From: "Fuzesi Arnold" <arnold.fuzesi.lista at gmail.com>
To: <elektro at tesla.hu>
Sent: Wednesday, March 21, 2007 2:12 PM
Subject: C kerdes
> full optimalizacio, eredmenye:
>
> #define EE_CHECKSUM(srcstruct) ee_checksum( ((uchar __eeprom*)
> &srcstruct),
> sizeof(srcstruct)-1)
>
> /******************************************************************************/
> uint ee_checksum(uchar __eeprom* data, uint length)
> {
> uint checksum = 0;
> do{
> checksum+=(*data++);
> }
> while(--length);
> return checksum;
> }
> /******************************************************************************/
>
>
> typedef struct{
> blabla
> uchar ee_checksum
> } FW;
>
> volatile __eeprom FW ee_fw;
>
> ez nem mukodik:
>
> if(ee_fw.checksum!=EE_CHECKSUM(ee_fw)){
> blabla
> }
>
>
> ez mukodik:
> if(ee_fw.checksum!=(uchar)EE_CHECKSUM(ee_fw)){
> blabla
> }
>
>
> Ezt most hirtelen nem ertem....vki erti?
> Most vagy az ee_fw.checksum-ot kellene castolnia magatol uint-re, vagy az
> ee_checksumot castolni uchar-ra..
>
> A.
>
> -----------------------------------------
> elektro[-flame|-etc]
>
>
>
More information about the Elektro
mailing list