|
| 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.
| |
|
|