/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
32 Bit variabel ???
Fra : Lasse Madsen


Dato : 19-05-03 15:21

Hej !

jeg sidder og roder med en embedded ANSI C compiler til en 8bit AVR
mikroprocessor.

jeg har 4 char variabler (A,B,C,D)

disse repræsentere værdien fra en 32 Bit tæller

Så vidt jeg kan huske kan en unsigned long int holde på 32bit

men hvordan får jeg flyttet A,B,C,D ind i en variabel ?

(A er MSB og D er LSB)

jeg tror det er noget med at shifte bittene op men jeg kan ikke få det til
at fungere.


jeg havde udtænkt noget med at tage A variablen og dividere den
1.000.000.000 ... osv.. og på den måde tilsidst ligge alle variablerne
sammen... (en MEGET langsom procedure som i sikkert kan regne ud)

tid (i processoren) er lidt kritisk så alle gode ideer modtages med kyshånd
!!!

M.v.h.
Lasse Madsen



 
 
Bertel Lund Hansen (19-05-2003)
Kommentar
Fra : Bertel Lund Hansen


Dato : 19-05-03 15:58

Lasse Madsen skrev:

>jeg har 4 char variabler (A,B,C,D)

>disse repræsentere værdien fra en 32 Bit tæller
>Så vidt jeg kan huske kan en unsigned long int holde på 32bit
>men hvordan får jeg flyttet A,B,C,D ind i en variabel ?

   value=(((A*256)+B)*256+C)*256+D

>jeg tror det er noget med at shifte bittene op men jeg kan ikke få det til
>at fungere.

En god compiler optimerer selv om der vitterligt skal ganges
eller shiftes.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Ivan Johansen (19-05-2003)
Kommentar
Fra : Ivan Johansen


Dato : 19-05-03 18:51

Lasse Madsen wrote:
> jeg har 4 char variabler (A,B,C,D)
>
> disse repræsentere værdien fra en 32 Bit tæller
>
> Så vidt jeg kan huske kan en unsigned long int holde på 32bit
>
> men hvordan får jeg flyttet A,B,C,D ind i en variabel ?
>
> (A er MSB og D er LSB)

Prøv med:
((unsigned long)A << 24) | ((unsigned long)B << 16)) | (C << 8) | D;


Ivan Johansen


Peder Skyt, Z=nospam (19-05-2003)
Kommentar
Fra : Peder Skyt, Z=nospam


Dato : 19-05-03 19:05

On Mon, 19 May 2003 16:20:57 +0200, "Lasse Madsen" <lm@h-tech.dk>
wrote:

>jeg har 4 char variabler (A,B,C,D)
>disse repræsentere værdien fra en 32 Bit tæller
>(A er MSB og D er LSB)

Kan gøres på mange måder.
At dine A/B/C/D ikke er "unsigned char" komplicerer situationen.

F.eks.
unsigned long UL = (unsigned long )(unsigned char)A << 24
| (unsigned long )(unsigned char)B << 16
| (unsigned short )(unsigned char)C << 8
| (unsigned char)D
;

/Peder Skyt

Rasmus Christian Kaa~ (20-05-2003)
Kommentar
Fra : Rasmus Christian Kaa~


Dato : 20-05-03 11:13


"Lasse Madsen" <lm@h-tech.dk> wrote in message
news:3ec8e844$0$76131$edfadb0f@dread11.news.tele.dk...
> Hej !
>
> jeg sidder og roder med en embedded ANSI C compiler til en 8bit AVR
> mikroprocessor.
>
> jeg har 4 char variabler (A,B,C,D)
>
> disse repræsentere værdien fra en 32 Bit tæller
>
> Så vidt jeg kan huske kan en unsigned long int holde på 32bit
>
> men hvordan får jeg flyttet A,B,C,D ind i en variabel ?
>
> (A er MSB og D er LSB)
>
> jeg tror det er noget med at shifte bittene op men jeg kan ikke få det til
> at fungere.

int val = (D&0xff);
val |= (C&0xff)<<8;
val |= (B&0xff)<<16;
val |= (A&0xff)<<24;

men, hvordan vil du proppe en 32bit variabel ind i en 8bits maskine?



Jakob Nielsen (20-05-2003)
Kommentar
Fra : Jakob Nielsen


Dato : 20-05-03 11:31

> men, hvordan vil du proppe en 32bit variabel ind i en 8bits maskine?

Jeg har også kodet c til 8 bit avr 90s8515 controller og den compiler jeg
anvendte understøttede de større variabler i software. På samme måde er der
intet til hindre for at bruge eksempelvis "double" på en 32 bit maskine.

Det tager dog længere tid for chippen at arbejde med datatyper som er for
store til at blive behandlet ad een gang.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste