13. april 2006 - 11:45
Der er
9 kommentarer og
1 løsning
At opdatere et helt array
Hej eksperter
Jeg sidder midt i et projekt, hvor vi programmer i C for første gang, og det går ret godt. Dog Arrays er noget jeg har problemer med.
Jeg skal på nemmeste og hurtigste måde opdatere en buffer(Array) hvor i der er 32 tegn. Jeg ved man kan initialisere disse arrays således:
disp_buf[32] = {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20};
(ps. vi arbejder med HEX værdier)
Jeg ved også hvordan man opdatere en enkelt plads:
disp_buf[0] = 0x6E;
Dette virker fint når jeg skal have en enkelt værdi erstattet, men jeg skal udskifte samtlige værdier heletiden. Kan jeg klare det, uden at skrive 32 linier hvor i jeg smider en værdi ind af gangen, men at jeg smider alle ind på en gang.
for,do,while lykker ikke godkendt, da det skal gå hurtigt.
Nogen af jeg der har en ide?
13. april 2006 - 11:54
#5
Sorry, det er:
memset(disp_buf,0x6e,32);
Hvis du vil sætte 0x6e på alle pladser i arrayet.
13. april 2006 - 12:00
#7
Hvis du har værdierne i en buffer, kan du bruge memcpy. Ellers brug en for-løkke.
Jeg ved ikke om for-løkken eller memcpy er hurtigst; men memcpy bruger også en løkke ét eller andet sted - den er dog muligvis optimeret til at flytte 32 bit eller 64 bit af gangen (afhængig af processorarkitektur). Til gengæld sparer du overheadet til et funktionskald hvis du bruger for-løkken.
13. april 2006 - 12:09
#9
Nu ved jeg ikke hvad det er til; men den besparelse du opnår ved at lave 32 enkelte assignments, fremfor en løkke, er så marginal, at jeg er ret overbevist om at det ikke kan betale sig for dig.
Hvad skal det præcist bruges til ?
13. april 2006 - 12:17
#10
Jeg er ved at bygge en cykel computer, som har nogle timings sekvenser der godt kan ramme hinanden. For at undgå evt timings fejl, skal de kommandoer den skal udføre vare så lidt tid som over hovedet muligt. Derved kan jeg opsamle data med mindre fejl margin.