Tajming, tänker jag rätt?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9068
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Tajming, tänker jag rätt?

Inlägg av AndersG »

Det är fortfarande mitt GPIB-diskprojekt...

Jag har ju ingen RTC, men om jag sätter upp Timer0 att räkna, med den interna klockan och 256 prescale:

Kod: Markera allt

	T0CON = 0b10000111;
	INTCONbits.TMR0IF = 0;
sedan har jag en snutt jag kallar:

Kod: Markera allt

void Time(void)
{
unsigned int ticks = TMR0L + 256 * TMR0H;
	sprintf(string,(const far rom char*)"\r\nTicks:%u %d\r\n", ticks, INTCONbits.TMR0IF);
	sio_puts(string);
	INTCONbits.TMR0IF = 0;
}
Systemklockan är 32MHz (8MHz med x4 PLL) så borde ett tick motsvara 1/(8MHz/256) = 32us?

Om det då tar 5377 ticks att föra över 256 byte, så tar varje byte 672us, vilket blir 1,5kb/s?

En "riktig" HP 9122 har 45kb/s överföringshastighet, så det finns rum för förbättringar...
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4745
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Tajming, tänker jag rätt?

Inlägg av Swech »

"unsigned int ticks = TMR0L + 256 * TMR0H;"

Håll bara koll så att den läser de båda bytes i rätt ordning.
Kanske C kompilatorn fixar detta....

Swech
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9068
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Tajming, tänker jag rätt?

Inlägg av AndersG »

Håll bara koll så att den läser de båda bytes i rätt ordning.
PIC 18F4620 fixar detta i hårdvara. Den höga byten är inte läsbar direkt, utan då man läser den lägre så läses samtidigt den höga in i TMR0H som en atomisk händelse.
Användarvisningsbild
kimmen
Inlägg: 2042
Blev medlem: 25 augusti 2007, 16:53:51
Ort: Stockholm (Kista)

Re: Tajming, tänker jag rätt?

Inlägg av kimmen »

Fast för att det skall fungera krävs det ju att man läser den låga byten först - och det finns det ingen garanti för i din kod. (om nu inte din kompilator specifikt garanterar det av någon anledning)

I C är ordningen i vilken underuttryck evalueras ospecifierad. Se t.ex följande sida för detaljer:

https://www.securecoding.cert.org/confl ... take+place
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9068
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Tajming, tänker jag rätt?

Inlägg av AndersG »

I think izi already looked at the source code, but the peripheral library should definitely read/write the timer registers in the correct order. If the library functions don't use the correct order, it's a bug.
Och är man osäker kan man ju göra det i assembler. Som det är nu så använder jag bara 8-bitarsläger och dessutom kollar jag bara TMT0IF (när räknaren slår runt)
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Tajming, tänker jag rätt?

Inlägg av Icecap »

Jag använder XC8 i ett PIC-projekt och ville läsa timern på samma sätt med denna atomic-läsning aktiverat. Kompilern gjorde inte samma sak i rätt följd varför jag fick fixa det manuellt.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9068
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Tajming, tänker jag rätt?

Inlägg av AndersG »

Det är ju inte helt fel att kolla den genererade koden att det blir rätt.
Användarvisningsbild
MiaM
Inlägg: 12760
Blev medlem: 6 maj 2009, 22:19:19

Re: Tajming, tänker jag rätt?

Inlägg av MiaM »

AndersG skrev:Det är fortfarande mitt GPIB-diskprojekt...

Jag har ju ingen RTC, men om jag sätter upp Timer0 att räkna...
Du skulle kunna göra en testmjukvara som bara kör klockan och matar ut vad den tycker klockan är, och logga output ihop med riktiga klockslag till en loggfil, för att se hur rätt/fel den visar.
AndersG skrev:Om det då tar 5377 ticks att föra över 256 byte, så tar varje byte 672us, vilket blir 1,5kb/s?

En "riktig" HP 9122 har 45kb/s överföringshastighet, så det finns rum för förbättringar...
Har du provat att "profilera" din kod för att se vad som händer?

Captain obvious hälsar att det givetvis är vettigt att "förbererda nästa byte" åt ena eller andra hållet vid de punkter i koden som du ändå måste vänta på extern enhet.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9068
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Tajming, tänker jag rätt?

Inlägg av AndersG »

Har du provat att "profilera" din kod för att se vad som händer?
Ja, jag vet exakt var flaskhalsarna är och jag har filat på de bitarna och fått ned antal instruktioner avsevärt. Är nu på en nivå när jag har ungefär samma prestanda som den gamla HP floppy jag emulerar.

I många av fallen jag testat dessutom så är jag betydligt snabbare än instrumentet. Dvs det är mätinstrumentet som är flaskhalsen, inte diskemulatorn. Min 1631D är tex 10x långsammare än min 44788-kort.
Användarvisningsbild
MiaM
Inlägg: 12760
Blev medlem: 6 maj 2009, 22:19:19

Re: Tajming, tänker jag rätt?

Inlägg av MiaM »

Gött!

Min poäng, ifall den inte framgick, är att det givetvis är bra om du kan korsbefrukta dina flaskhalsar med instrumentets flaskhalsar, så att i väntan på instrumentet gör du förberedelser som t.ex. att läsa från halvlångsam flash till snabbare RAM eller liknande. (Även om du inte har nån avacerad cachealgoritm så är det väl dels helt självklart att instrumentet lär fullfölja en begärd läsning, och högst sannolik att instrumentet är suget på att fortsätta läsa nästföljande delar av en fil som det börjat läsa av o.s.v.).
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9068
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Tajming, tänker jag rätt?

Inlägg av AndersG »

Visst.
Skriv svar