Mäta tiden i C

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Mäta tiden i C

Inlägg av fatpo83 »

Hur kan man veta hur lång en kodsnutt tar att exekvera? Jag försökte räkna instruktionerna i assembler filen som genereras men jag tappade bort mig :)

Kompilator: HI TECH PICC
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

det blir nog väldigt svårt att räkna ut hur lång tid c-koden tar att exekvera eftersom kompilatorn optimerar koden och håller på... så man måste nog nästan titta på assemblerkoden tror jag :/

/Johan
henkebenke
Inlägg: 515
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Ett annat sätt är att mäta det genom att använda en ut-pin. Det kräver ju dock ett hyfsat snabbt oscilloskop.
Euphaz
Inlägg: 49
Blev medlem: 18 juni 2004, 23:21:07

Inlägg av Euphaz »

Man kan ansluta RTC (realtimecountern) så den ökar på varje, varannan etc klockcykel. Resetta den vid start, när programmet är slut, hämta svaret i RTC. Den kopplingen kan man ju även använda i själva programmet om det går på tid.

MPLAB simulerar RTC bra. Fast RTC skippar alltid två cyclar efter en reset(även i chipet).
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Om man inte kan köra assembler-koden i HI TECH PICC så Kör den i MPLAB och titta på stopwatch.
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Det är så att jag försöker göra några "enkla" RTOS funktioner. Och då vill jag ha en funktion "TIMEOUT" som återkommer till varje process efter TIMEOUT.

Vet nån om det redan finns färdiga RTOS funktioner för mikrokontroller? På microchip.com har de ju lagt upp några enkla rutiner till hur man kan realisera, men jag tänkte något kraftfullare....
Euphaz
Inlägg: 49
Blev medlem: 18 juni 2004, 23:21:07

Inlägg av Euphaz »

Du menar något som klallar och går, även om ditt program stannat? Då skulle du antingen kunna använda RTC (timer1) med interrupt on overflow, interuptrutinen skulle då kunna kolla/fiksa processen, eller du kan använda vakthunden, den resetter hela processorn om du (ditt program) inte ger den en signal (reset) inom 'timeout' kan man säga.
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Nja...inte riktigt...har man arbetat med RTOS så vet man att det finns möjlighet att få "delay" rutiner i en process samtidigt som man kör en anna process...Genom att bestämma TIMEOUT i ms (time slice) så kan man köra flera processer parallellt...nåt sånt har jag i tanken iaf....

Jag tänkte mig att köra med en 16bits timer som bara räknar upp som ska fungera som IDLE. Sen kan man utgå från timers och bestämma när nästa process/operation ska köras. Man missar ju några klockcykler när man jämför o så men det blir säkert inte märkbart....
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

RTOS har jag aldrig hört talas om men jag förstår ungefär vad du vill göra.
Du vill styra exekveringen av flera oberoende processer som man gör i operativsystem.
Om du tex ska ha 2st processer som växelvis bryts av ett timer-interrupt så att du på det viset får 2st huvudprogram som körs samtidigt.
Jag har funderat på det en stund och kommit fram till att det kräver att man kan läsa och skriva till stacken.
Det går inte med pic16, men med pic18 går det.

Men jag tror inte att det är nödvändigt att använda ett sånt system, man kommer väldigt långt med vanliga interrupt och ett huvudprogram.
Det går faktiskt att simulera flera prioritetsnivåer på interrupten även om hårdvaran i Pic16 bara har 1 nivå.
Pic18 har 2 prioritetsnivåer i hårdvaran.
Användarvisningsbild
Earendil
EF Sponsor
Inlägg: 448
Blev medlem: 2 juni 2004, 09:06:43
Ort: Lund

Inlägg av Earendil »

RTOS = Real Time Operating System.

Ett (oftast relativt kompakt) operativsystem, vars främsta prioritet är att garantera att processerna får kort och framförallt predikterbar svarstid.

I t.ex. en mobiltelefon finns det ett RTOS, som bland annat har till syfte att hantera inkommande GSM-paket. För att inte samtalet ska brytas måste processen som tar hand om paketet göra detta fort och regelbundet. Det hade aldrig gått att skriva separata processer i UNIX/Linux/Windows för att hantera sådana här saker. Helt plötsligt tar det några sekunder innan en process vaknar och vips har samtalet brutits. Ett exempel på RTOS är Eneas OSE.

Vanliga OS som t.ex. Linux brukar kallas GPOS (General Purpose OS).
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Precis. De flesta RTOS som finns kräver kraftiga processorer, jämför med en vanlig 8-bits PIC! Det skulle då vara mycket lättare att konstruera applikationer som kör flera saker parallellt...
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Jag skrev en gång nåt som skulle kunna kallas ett väldigt enkelt RTOS för PIC16. Jag hade upp till 8 strikt prioriterade "trådar", och bara kooperativ multitasking (dvs varje tråd fick anropa en funktion med jämna mellanrum för att kolla om en annan tråd ville köras). Det fanns en slags enkla mutex och condition-variabler som synkroniserade trådarna och interrupt. Skrev det för ett 16F84-projekt där väldigt mycket skulle göras på en gång, det blev dock aldrig riktigt klart.

Riktig preemptiv multitasking tror jag också kräver PIC18...
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Cyr fungerar ditt PC-oscilloskop bra?? Tar det lång tid att bygga det?
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Lite OT, men..

DSO-projektet är ganska inaktivt just nu, och det är en hel del kvar att göra. Men fömodligen ska det bli klart under hösten, beroende på tid förstås...
Skriv svar