Hi,
also ich bin momentan fleißig am programmieren und habe was ausprobiert, was ich kaum glauben kann:
Ein Programm (berechnen von ein paar Variablen) in Bascom braucht 5x so lange wie das gleiche Programm in C. KANN DAS SEIN? Das wäre ja gigantisch 
Hier mal die Codes, damit ihr mitreden könnt:
Bascom:
Code:
Dim Newrcdata As Byte
Dim Empf(8) As Byte
Dim Empfold1(8) As Word
Dim Empfold2(8) As Word
Dim Empfold3(8) As Word
Dim Empfold4(8) As Word
Dim Lpempf(8) As Word
Dim I As Byte
Do
Newrcdata = 1
Call Rc_signal()
Portd.0 = Not Portd.0
Loop
End
Sub Rc_signal()
If Newrcdata = 1 Then
Newrcdata = 0
For I = 1 To 8
Empfold1(i) = Empfold2(i)
Empfold2(i) = Empfold3(i)
Empfold3(i) = Empfold4(i)
Empfold4(i) = Empf(i)
Lpempf(i) = Empfold1(i) + Empfold2(i)
Lpempf(i) = Lpempf(i) + Empfold3(i)
Lpempf(i) = Lpempf(i) + Empfold4(i)
Shift Lpempf(i) , Right , 2 , Signed
Next I
End If
End Sub
AVR-Studio:
Code:
uint8_t newrcdata = 0;
uint8_t empf[8];
uint16_t empfold1[8];
uint16_t empfold2[8];
uint16_t empfold3[8];
uint16_t empfold4[8];
uint16_t lpempf[8];
int main(void)
{
Clock_init();
PORTC.DIR = 0x80;
uart_init(&USARTC1);
init_i2c(&TWIE);
PORTD.DIR = 0xff; //set PortD Output
PORTD.OUTSET = 0x01; //set PortD.0 High
empf[1] = 120;
empf[2] = 210;
empf[3] = 210;
empf[4] = 210;
empf[5] = 210;
empf[6] = 210;
empf[7] = 210;
empf[8] = 210;
while(1)
{
newrcdata = 1;
rc_signal();
PORTD.OUTTGL = 0x01;
}
}
void rc_signal(void)
{
if(newrcdata==1)
{
newrcdata = 0;
for(uint8_t i=1;i<9;i++)
{
empfold1[i]=empfold2[i];
empfold2[i]=empfold3[i];
empfold3[i]=empfold4[i];
empfold4[i]=empf[i];
lpempf[i]=empfold1[i]+empfold2[i]+empfold3[i]+empfold4[i];
lpempf[i]=lpempf[i]>>2;
}
}
}
Die benötigte Zeit wurde jeweils mit dem Oszi gemessen, Bascom braucht 75µs und AVR-Studio braucht 15µs.
Außerdem wollte ich noch fragen, wann brauche ich volatile?
Was ich bis jetzt weiß, ist, dass wenn eine Variable volatile ist, wird der Wert immer wieder im RAM gespeichert und daraus gelesen. Wenn eine Variable nicht als volatile definiert wird, wird der Wert wohl im Stack gespeichert!?
Was ist der Vorteil? Ist der Weg über den Stack schneller?
Kann es passieren, dass mir bestimmte Variablen, die nicht oft benutzt werden, wegoptimiert werden? Und wenn ja, woher weiß ich, welche Variablen wegoptimiert werden?
Sorry für die vielen Fragen, aber in den Tuts / im Inet hab ich leider keine Antworten darauf gefunden...
Vielen Dank & Gruß
Chris
Lesezeichen