Sida 4 av 4

Re: [PIC] Räkna ut ACQT & ADCS på 18F4221

Postat: 20 maj 2012, 22:14:13
av Pajn
Att mäta tempen är bara en del av programmet. Efter att jag är klar med det gör jag

Kod: Markera allt

tmp = 0;
tmp är som hörs på namnet temporär så jag ser till att tömma den efter att jag har
använt den.

Re: [PIC] Räkna ut ACQT & ADCS på 18F4221

Postat: 20 maj 2012, 22:25:41
av sodjan
Det där "tömmer" ingenting!
Det "fyller" tmp med värdet "noll"...

0 är absolut inte detsamma som "tom"!

Det var det jag var lite rädd för att du menade.
Det är en allvarlig felsyn på variabler, värden o.s.v.

Om du har andra rutiner som använder tmp och som förutsätter
att tmp innehåller 0 från början, så är det en allvarlig bugg.
Du bör tänka igenom det hela ordentligt för att undvika underliga
problem/buggar i framtiden. Du tänker helgalet kring just det där...

Re: [PIC] Räkna ut ACQT & ADCS på 18F4221

Postat: 20 maj 2012, 22:35:10
av Pajn
Fyller med värdet noll eller tömmer, vad är skillnaden?
tmp blir lika med 0 och jag kan använda den i en loop
eller som ovan eller något annat. Resultatet är exakt
samma som när jag initierar variabeln med värdet 0.

Om jag tömmer/fyller tmp med 0 efter att jag är klar
med den eller när jag ska använda den spelar heller
ingen roll.

Självklart kan man inte göra så i en interrupt om man
också använder variabeln utanför interrupten, men det
är en annan sak.

Re: [PIC] Räkna ut ACQT & ADCS på 18F4221

Postat: 20 maj 2012, 22:35:30
av Batman
För att få en disassembly listing kan du titta i Window Menyn, Output > Disassembly Listing File. Där finns den för mig i MPLAB X 1.10, fast jag använder inte C18 i det projektet jag tittade på.

Re: [PIC] Räkna ut ACQT & ADCS på 18F4221

Postat: 20 maj 2012, 22:50:02
av Pajn
@Batman
Sedär, tackar!

Re: [PIC] Räkna ut ACQT & ADCS på 18F4221

Postat: 20 maj 2012, 22:58:32
av sodjan
> Fyller med värdet noll eller tömmer, vad är skillnaden?

Det är en helt fundamental skillnad! :-)
En variablel *kan* inte vara tom, den har alltid ett värde.

Man kan ha en separat flagga som signalerar att tmp är "tom",
men tmp i sig kan ju ju då innehålla vad som helst. Och "tom"
betyder mer korrekt "för tillfället oanvänd", vilket är viktigare.

Nej, det är sättet att se på det hela, att du faktiskt "tömmer"
någonting, som är fel. :-)

> tmp blir lika med 0 och jag kan använda den i en loop...

Du menar att du någon annarstans i programmet *förutsätter*
att tmp = 0 ? Helgalet och "a bug waiting to happen"... :-)
*Självklart* ska loopen självt initiera tmp till 0 och det ska inte
spela någon som helst roll vilket värde som finns kvar från någon
annan rutin som också använder tmp.

> eller som ovan eller något annat. Resultatet är exakt
> samma som när jag initierar variabeln med värdet 0.

Ja, slutresultatet, när det fungerar, och med lite tur, kanske
blir detsamma, men det gör det inte mindre fel i grunden.

Re: [PIC] Räkna ut ACQT & ADCS på 18F4221

Postat: 21 maj 2012, 20:15:46
av Pajn
>En variablel *kan* inte vara tom, den har alltid ett värde.
Just därför går det att använda ordet tömmer när man sätter
en primitiv datatyp till 0.

>Du menar att du någon annarstans i programmet *förutsätter*
>att tmp = 0 ? Helgalet och "a bug waiting to happen"... :-)
>*Självklart* ska loopen självt initiera tmp till 0 och det ska inte
>spela någon som helst roll vilket värde som finns kvar från någon
>annan rutin som också använder tmp.
Visst kan jag ändra så att den börjar med att tömma :P tmp, inte
så jobbigt.
Men det är lite intressant att veta vad felet är. tmp kommer inte
att börja "sväva iväg" och helt plötsligt innehålla något annat.

När vi ändå fortsätter i den här tråden passar jag på att fråga om
jag vinner någon noggrannhet på att använda en RTC vs. att ha
koll på klockan i PICen. Personligen tycker jag att jag lika gärna
skulle kunna använda samma kristall som ska driva RTCn till att
driva TMR1 och få samma noggrannhet.

Re: [PIC] Räkna ut ACQT & ADCS på 18F4221

Postat: 21 maj 2012, 22:40:53
av sodjan
> > En variablel *kan* inte vara tom, den har alltid ett värde.

> Just därför går det att använda ordet tömmer när man sätter
> en primitiv datatyp till 0.

Trollar du bara eller fattar du inte vad du skriver för dumheter?

> Men det är lite intressant att veta vad felet är.

Det är inte ett tekniskt fel, det är du som har problem med
din metodik. Men välj själv om du vill fortsätta med dumheterna.

> tmp kommer inte att börja "sväva iväg" och helt plötsligt innehålla något annat.

Felet är att du tror att det över huvudtaget spelar någon roll. All kod måste
förutsätta att tmp kan vara vad som helst innan den används. Jävligt
märkligt att det ska behöva sägas över huvudtaget !!

När det gäller RTC så finns det ju mer en noggranhet att ta hänsyn till.
En RTC gör mer än att bara "räkna sekunder". Vissa PICs har inbyggd RTC
som även har dessa funktioner, hantering av skottår o.s.v.