So werden's 72%:
Und das bringt's auf 66%:Code:Dim C_r As IRam Byte At 12 'Channel Rot Dim C_g As IRam Byte At 13 'Channel Grün Dim C_b As IRam Byte At 14 'Channel Blau
Außerdem kommt man dann ordentlich mit dem HWStack hin. Es hatte vorher lediglich keine Auswirkung wenn SWStack und Frame überschrieben wurden. Das Sichern der Register kostete 26 Bytes HWStack und der Aufruf von Incr Div nochmal 2 Bytes, 8 Bytes waren also viel zuwenig. Nun werden nicht mehr als 10 Byte Stack verwendet, bei Bedarf an mehr Platz für Variablen können folgende Stackangaben nochmal verkleinert werden, SWStack und Frame werden sowieso nicht benutzt.Code:On Timer0 Isr_timer0 Nosave ' ... 'ISR TIMER0 Isr_timer0: !push r16 !push r17 !push r20 !push r21 !push r23 !push r24 !push r26 !push r30 !push r31 !in r24, SREG !push r24 Incr Pwm_count 'PWM-Variable erhöhen If Div = 10000 Then 'Teilervariable bei 10000 resetten Div = 0 Set Flag_a End If Div = Div + 1 'Teilervariable erhöhen !pop r24 !out SREG,r24 !pop r31 !pop r30 !pop r26 !pop r24 !pop r23 !pop r21 !pop r20 !pop r17 !pop r16 Return
Hinweis dazu: die selektive Registersicherung per Nosave/Push/Pop ist nur solange als gültig zu betrachten, solange die ISR nicht verändert wird, evtl. muss man auf die Bascom-Version achten, hier 2.0.7.4Code:$hwstack = 16 $swstack = 16 $framesize = 24
Interessanterweise wird mit ausgeschalteter Optimierung jeweils 1% weniger Speicher belegt.
Nein, das ist falsch. Incr Byte_Var und Byte_Var = Byte_Var +1 erzeugen zwar identischen Code, hingegen wird Word_Var = Word_Var +1 Inline compiliert, dagegen Incr Word_Var als Funktionsaufruf. Es hängt also erst einmal von der Zielvariablen ab.Benötigt die Deklaration Var = Var + 1 tatsächlich weniger Speicher als ein einfaches Incr Var?
Eine Funktion aufzurufen, d.h. Setzen der Register und ein RCALL/CALL, kostet weniger Flashspeicher als wenn der Code Inline eingebaut wird.
Hat man viele Stellen im Code, in denen eine Word-Variable um 1 erhöht wird, so ist es also genau anders herum, man spart mit der Incr-Version Speicherplatz. Das kann sich aber mit der Bascom-Version ändern.
In unserem Fall ist Div = Div + 1 besser, da es etwas weniger Stack braucht und schneller ist.







Zitieren

Lesezeichen