Avatar billede evilfish Nybegynder
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?
Avatar billede evilfish Nybegynder
13. april 2006 - 11:47 #1
Nogen af jer* Undskyld stave fejl :)
Avatar billede driis Nybegynder
13. april 2006 - 11:51 #2
memcpy(disp_buf,32,0x6e);
Avatar billede evilfish Nybegynder
13. april 2006 - 11:52 #3
Hvad vil den kommando gøre?
Avatar billede evilfish Nybegynder
13. april 2006 - 11:53 #4
Skal også lige gøre opmærksom på, at værdierne i Array formegentlig er forskellige fra gang til gang.
Avatar billede driis Nybegynder
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.
Avatar billede evilfish Nybegynder
13. april 2006 - 11:57 #6
Det er ikke det jeg leder efter. Jeg skulle gerne kunne smide en masse forskellige værdier ind på en gang. Jeg ved altid hvad værdierne er.
Avatar billede driis Nybegynder
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.
Avatar billede evilfish Nybegynder
13. april 2006 - 12:03 #8
Det lyder som om der ikke er en hurtigere måde at gøre det på. Er jeg ikke så glad for at høre. Så må jeg tilbage til at skrive 32 linier koder hver gang. Sparer jeg mere tid på end at bruge lykker.
Avatar billede driis Nybegynder
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 ?
Avatar billede evilfish Nybegynder
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.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester