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:
AVR-Studio: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
Die benötigte Zeit wurde jeweils mit dem Oszi gemessen, Bascom braucht 75µs und AVR-Studio braucht 15µs.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; } } }
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







Zitieren

Lesezeichen