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