Uppskatta beräkningstid på en arduino?
Uppskatta beräkningstid på en arduino?
Jag har ett problem med en robot baserad på en Arduino atmega 2560.
För att kunna bekräfta att jag har rätt angående problemet så skulle jag vilja ta reda på hur lång tid det tar att köra min kod.
Hur gör jag detta lättast?
Först så använde jag print-funktionen för att skriva ut looptiden till fönstret på datorn.
Men denna operation tar ju också tid och vad jag har förstått tar den lång tid på en Arduino.
Så... Något tips på hur man kan beräkna detta?
För att kunna bekräfta att jag har rätt angående problemet så skulle jag vilja ta reda på hur lång tid det tar att köra min kod.
Hur gör jag detta lättast?
Först så använde jag print-funktionen för att skriva ut looptiden till fönstret på datorn.
Men denna operation tar ju också tid och vad jag har förstått tar den lång tid på en Arduino.
Så... Något tips på hur man kan beräkna detta?
- Klas-Kenny
- Inlägg: 11824
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Uppskatta beräkningstid på en arduino?
Skulle ju kunna växla en utgång mellan 1 och 0 vid olika bestämda tillfällen i koden och kolla utgången med en frekvensräknare (Eller scope för den delen) och beräkna utifrån det.
Re: Uppskatta beräkningstid på en arduino?
Ah! Det hade ju vart en smart lösning!
Dumt bara att jag inte har tillgång till varken scope eller frekvensräknare längre.
Dumt bara att jag inte har tillgång till varken scope eller frekvensräknare längre.
Re: Uppskatta beräkningstid på en arduino?
En metod är att ändra i koden för en emulator så att den räknar antal instruktioner. T.ex Bosch / pcemu för x86. Finns säkert motsvarande för din MCU.
Re: Uppskatta beräkningstid på en arduino?
Om du har en ledig hårdvarutimer tillgänglig, nollställ och starta den precis där/när du går in i sektionen du vill mäta och stoppa den precis där/när du lämnar. Läs sedan timerns värde och printa det.
Re: Uppskatta beräkningstid på en arduino?
Har inte Arduino någon simuleringsmiljö?
Där kan man normalt sätta breakpoints på lämpliga
ställer (kring det man vill mäta tiden på) och bara läsa
av klockan. Det brukar finnas båda faktisk tid (om man
har angett MHz'en korrekt) och antal förbrukade cykler.
EDIT:
Ett fel rättat. "Mhz" skulle så klart vara "MHz".
Hoppas ingen missförstog det hela...
Där kan man normalt sätta breakpoints på lämpliga
ställer (kring det man vill mäta tiden på) och bara läsa
av klockan. Det brukar finnas båda faktisk tid (om man
har angett MHz'en korrekt) och antal förbrukade cykler.
EDIT:
Ett fel rättat. "Mhz" skulle så klart vara "MHz".
Hoppas ingen missförstog det hela...
Senast redigerad av sodjan 8 september 2012, 19:18:03, redigerad totalt 1 gång.
Re: Uppskatta beräkningstid på en arduino?
http://www.atmel.com/devices/atmega2560.aspx
http://www.atmel.com/Images/doc2549.pdf
8-bit AVR med 16 MIPS vid max 16 MHz med "most single clock cycle execution"..
Prova att kompilera din kod till någon MCU som liknar din t.ex ATmega1284a? och kör den med simulavr.
Sedan kan man plocka ut antalet instruktioner från simulavr:
Re: [Simulavr-devel] Clock cycles
Alternativt antal klockcykler.
Btw, finns ingen enhet "Mhz" ..
http://www.atmel.com/Images/doc2549.pdf
8-bit AVR med 16 MIPS vid max 16 MHz med "most single clock cycle execution"..
Prova att kompilera din kod till någon MCU som liknar din t.ex ATmega1284a? och kör den med simulavr.
Sedan kan man plocka ut antalet instruktioner från simulavr:
Re: [Simulavr-devel] Clock cycles
Alternativt antal klockcykler.
Btw, finns ingen enhet "Mhz" ..

Re: Uppskatta beräkningstid på en arduino?
Annars kör en till arduino som övervakar hur länge en pinne är hög...
Re: Uppskatta beräkningstid på en arduino?
Flyttade tråden till kategorin Mikroprocessorer.
/Walle
/Walle
Re: Uppskatta beräkningstid på en arduino?
unsigned long start, end;
start = micros() ;
// kör kod
end = micros();
Serial. println(end-start);
Men jag tror inte Arduino är rätt verktyg om det är viktigt att exekveringstiden är deterministisk.
start = micros() ;
// kör kod
end = micros();
Serial. println(end-start);
Men jag tror inte Arduino är rätt verktyg om det är viktigt att exekveringstiden är deterministisk.