Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Umgang mit den LONGSs Kategorie: Programmierung C (von jo - 15.11.2010 12:51)
Als Antwort auf Re: Umgang mit den LONGSs von ulrich korth - 15.11.2010 12:27

> > > Hallo Peter, als einer der ersten, die auf LONGs gehofft haben, möchte ich mich erst mal für deren
> > > Implementierung bedanken. Ich habe am Wochenende das alte Projekt von float auf long umgestellt
> > > und nun läuft es alles in der erfoderlichen Performance. Super, danke.
> > >
> > > Darf ich dich zum Handling der  longs noch um ein paar Kommentare bitten
> > > -> Ausgabe auf LCD über Str_Printf( str, "%0l9d", longwert);
> > > dann Ausgabe über str am Display?
> > >
> > > EEPROM,
> > >
> > >     unsigned long l;
> > >     float f;
> > >     word wh, wl;
> > >
> > >     /*  geht nicht
> > >     l = 1234567890;
> > >     f = (float)l;
> > >     l = 0l;
> > >     l = (unsigned long)f;
> > >     */
> > >
> > >     l = 0xFEDCBA98;
> > >     wh = l >> 16;
> > >     wl = l & 0xffff;
> > >
> > >     l = 0;
> > >
> > >     l = (wh << 16ul) + wl;   // geht nicht
> > >     l = (wh << 16ul);        // geht auch nicht
> > >
> > >     l = wh * 65536ul + wl;    // aber das geht
> > >
> > >     l = l & 0x0fffffff;       // auch OK
> > >    
> > >
> > > --> Workaround über zwei words...
> > >
> > > Danke und Grüße
> > >
> > > Jo    
> > >  
> > >
> Hallo Jo,
> schau mal auf den gänderten Programmteil
> Gruss Ulrich
>
>     unsigned long l;
>      float f;
>      word wh, wl;
>
>      l = 1234567890;             //wo ist das Problem??kein Problem nur der Code zum Test
> //     f = (float)l;             solche cast Operatoren gibt es (noch?) nicht in Compact-C
>      l = 0l;
> //     l = (unsigned long)f;     "
>
>      l = 0xFEDCBA98;
>      wh = l >> 16;
>      wl = l & 0xffff;
>
>      l = 0;
>
>      l = (wh << 16ul) + wl;   // geht nicht         das ist schon OK, denn (wh << 16) ist 0
                                                              --> Ich hätte erwartet, dass l = FEDC wird !
>      l = (wh << 16ul);        // geht auch nicht    "
>
>      l = wh * 65536ul + wl;    // aber das geht
>
>      l = l & 0x0fffffff;       // auch OK


    Antwort schreiben


Antworten:

Re: Umgang mit den LONGSs (von ulrich korth - 15.11.2010 15:45)