Werbung
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Ein paar wenige Bytes kann man durch Weglassen von
sparen, das schon von Beginn des Threads an mitgeschleift wird.Code:If Pwm_count = 255 Then Pwm_count = 0 'PWM-Variable bei 255 resetten
Eine Byte-Variable läuft von allein nach 255 auf 0 über, da muss man nix extra machen.
Wenn man noch statt der doppelten Abfrage
jeweilsCode:If C_x < 255 Then Incr C_x If C_x = 255 Then State = 1
schreibt, kommt man auf 85%, ohne viel geändert zu haben.Code:If C_x < 255 Then Incr C_x Else State = 1
Geändert von MagicWSmoke (11.03.2012 um 17:03 Uhr)
Hallo!
Dank den Erläuterungen von User MagicWSmoke konnten nun 6% Flash gespart werden. Hier der aktuelle Stand des Programms:
tinyrgb_v1_2.bas
Vielleicht fällt noch jemanden etwas ein? Es ist schon ein interessanter Ansporn, noch etwas Speicher einzusparen, zumal dann ja Platz für weitere Fading-Möglichkeiten ist. Die Schaltung beleuchtet übrigens den Deko-Bereich auf einem Wohnzimmerschrank und wird von zwei NiMH-Akkus versorgt, die tagsüber von Solarenergie geladen werden.
Grüße
Thomas
Hey![]()
kannst du den "Schaltplan" der Schaltung posten?
Ich hab mir gestern 10 RGB LEDs bestellt und weiß nicht wofür ich sie verwenden soll (die haben 3€ das Stück gekostet....ka ob sie was taugen oder nicht aber für 3€ sag ich nicht nein)![]()
Und nun bin ich auf der Suche nach schönen Bastelleien mit RGB LEDs.....btw. ich hab mir eine bei RS für 25€ das Stück bestellt und für 3W ist die ja mal super hell.....und auch die "Chinesen" LEDs sind 3W....mal schauen wie die sich im Test gegen die teure LED machen.
Wie gesagt wäre toll wenn man den Schaltplan noch sehen könnte. Weil so ein kleines Lichterspiel auf dem Schrank oder hinter dem Fernseher sicher toll aussieht.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Hallo Thomas,
folgendes bringt noch hier und da etwas:
statt:
Dim Modus As Bit 'Modus
Dim Flag_a As Bit 'Flag für Sub Fading
als Byte einrichten
Dim Modus As Byte 'Modus
Dim Flag_a As Byte 'Flag für Sub Fading
und alle
Set Modus mit Modus = 1, Reset Modus mit Modus = 0 ersetzen
Set Flag_a, Reset Flag_a gleichermaßen.
Alle "Decr Variable" mit "Variable = Variable - 1"
und alle "Incr Variable" mit "Variable + 1" ersetzen.
bringt pro Decr zwei Byte
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Viel ist da nicht. Einfach ein Tiny13 mit den drei Anschlüssen einer RGB-LED über je einen Vorwiderstand an drei Pins. Dann noch eine Stiftleiste für ISP, einen Widerstand der den Reset-Pin hochzieht, zwei Jumper und ein Abblockkondensator. Das war's.
Das tut es.![]()
Danke für die Ausführung.
Benötigt die Deklaration Var = Var + 1 tatsächlich weniger Speicher als ein einfaches Incr Var?
Grüße
Thomas
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Nein, hier habe ich es nicht festgestellt.
Hatte es nur mit aufgenommen, weil es nach dem Ersetzen des Decr ein besseres Bild im Listing macht. Allerdings meine ich, früher schon mal festgestellt zu haben, daß das Ersetzten von dem Incr auch eine Ersparnis bringt, bin mir jedoch nicht mehr sicherund in welchem Zusammenhang das war.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
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.
Geändert von MagicWSmoke (12.03.2012 um 10:08 Uhr)
Lesezeichen