Gå til innhold

C nybegynner hjelp


Anbefalte innlegg

Videoannonse
Annonse

Multi process med getchar() og delt variabel hvor den evige while løkken kjører så lenge denne variabelen er true?

 

Hvis dette er noe fysiske greier så kan du alltids ha en sjekk inne i while løkken som sjekker om en knapp er trykket eller ikke, og bryte ut av løkken hvis den er.

Endret av kjeita
Lenke til kommentar

Det kommer an på kontekst. Hvis du har en enkel CPU uten OS, så er det vanskelig. Da er CPU 100% opptatt i løkken, og kan ikke sjekke noe annet. Dvs løkken din må sjekke for dette 'noe'.

 

Har man et OS så kjører man flere tråder, slik at en annen tråd kan håndtere en avbruddsmekanisme. Da trenger løkken din bare sjekke en variabel som settes av den andre tråden.
Lenke til kommentar

Stemmer det at hvis jeg skal ha en subroutine eller funksjon så må jeg først lage selve subroutine/funksjonen, deretter lage en header og inkludere referanse til headeren i main filen og subroutinen/funksjonen, også lage objekt fil av både main og funksjonen også compile?

Lenke til kommentar

Jeg antar du bruker C, ikke C++. (en C fil har fileextension .c, en C++ fil har filextension .cpp)

Du trenger ikke lage noen header fil (men det er vanlig å ha noen). 

Du trenger en deklarasjon av funksjonen. Se eksempel her: http://www.tutorialspoint.com/cprogramming/c_functions.htm

/* function declaration */
int max(int num1, int num2);

Dette forteller kompilatoren hva max betyr når den kommer dit.

 

Det er også mulig å sløyfe deklarasjonen, kompilatoren kan akseptere det hvis funksjonen kommer før (over) stedet funksjonen brukes. Men slikt er dårlig praksis.

  • Liker 1
Lenke til kommentar
  • 2 uker senere...

Er det teoretisk mulig å lese verdier fra første kolonne i en fil med fire kolonner og skrive det inn i en annen fil, (dvs. ignorere de tre andre).

 

Har noen en side å anbefale hvor det forklares enkelt/bra om bruken av pekere i C?

Endret av OVOXO
Lenke til kommentar

Jeg forsøkte ved hjelp av scanf i for-løkke, hvor jeg hadde fire kolonner. Jeg lagret verdiene i 4 forskjellig array og printet den jeg skulle bruke i samme løkka, og da samsvarte verdiene. Når jeg printet den igjen i en ny for-løkke hadde alle verdiene endret seg til samme verdi som var den siste verdien som ble printet fra de opprinnelige verdiene, og når den skulle skrive inn verdiene i en ny fil, så skrev den enten inn 0 eller et veldig høyt tall (ingen relasjon til verdiene fra filen den leste av). Noen som vet hva det kan komme av?

Endret av OVOXO
Lenke til kommentar

Hele koden kjøres i samme 

for(...)

{

fscanf(readFile, "%f   %f   %f   %f   %f", &CurrentPos,&TargetPos, &Err, &Outp, &Motor)

printf("CurrentPos") 

}

(Dette gir de riktige verdiene)

 

for(...) //Lengde er samme som forrige

{

printf("CurrentPos") 

}

(Dette kjøres rett etter og gir kun den siste verdien)

Lenke til kommentar

Problemet må være i noe av koden som du ikke viser.

I første for loop så printer du hver verdi med en gang den leses. Men du lagrer tydeligvis ikke disse verdiene hver for seg, alle lagres på samme plass? Så kanskje det er noe med index verdien (i) som er feil.

Lenke til kommentar

for loopen går fra for(i=0;P<Iteration_Size+1;i++)

for Iteration_Size er størrelse på en while løkke, størrelsen printes i funksjonen også for å dobbeltsjekke at lengden er riktig. Verdien som printes er også for i'te leddet, jeg har også forsøkt å printe i leddet underveis. Den andre for-løkken kjøres rett etter den første, så det skjer ingenting mellom den første og siste. 

Lenke til kommentar
  • 1 måned senere...

Hei!

 

Jeg prøver å bestemme at en while-løkke skal kjøre hver 0.1 sekund. 

Jeg prøvde først å hente tids forskjellen med 

 

double seconds;

int main()
{
double seconds;
clock_t start_t, end_t, total_t;
time_t now, later;
time(&now);
usleep(100000);
 
time(&later);
 
seconds=difftime( later, now);
 
printf("total tid %lf\n",seconds);
 
}
 
Når jeg setter usleep på 10^6 viser den 1, men hvis den settes på 10^5 gir den 0.
Deretter prøvde jeg med denne løsningen;
 
 
int main()
{
double seconds;
clock_t start_t, end_t;
start_t = clock();
usleep(1000000);
 
end_t= clock();
 
seconds = (double)(end_t - start_t)/CLOCKS_PER_SEC ;
 
printf("total tid %lf\n",seconds);
 
}
 
Dette ga 0.000027, og verdienen varierer veldig. Er det noen som har en god løsning på dette?
 
Lenke til kommentar

Det du får med time() er faktisk tid, men du har bare 1 sekund oppløsning. Som du erfarer.

Med clock() får du ikke faktisk tid - "Returns the approximate processor time used by the process". 

Du finner diskusjoner rundt dette på stackoverflow. 

 

Hvis man skal få noe til å skje med nøyaktig tidsintervaller så bør man ha et real-time OS. I det minste må du ha en timer som kaller funksjonen din, istedet for å gjøre det fra en løkke med sleep.

Lenke til kommentar

Tenkte opprinnelig å forsøke meg på denne løsningen http://stackoverflow.com/questions/12777254/time-delay-in-c-usleep

 

 

 


8down voteaccepted

Instead of sleeping for 20000 useconds, sleep for the time left till you want to run again, based on the call to clock_gettime

I.e:

usleep( lasttime+20000-now ); // But make sure you don't sleep when the result is negative 

 

Men siden jeg programerer på OSX, så har jeg ikke clock_Gettime, og forsøker derfor å finne en alternativ.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...