Optimierung Bascom Code

OP #1249448
Lesenswert?

Hi,

nachdem ich die verschiedenen Code-Teile erfolgreich an einem Tiny2313 
erfolgreich getestet habe, sind da zwei Byte (!!!) zuviel drin :(. Ich 
habe den Code mal angehängt

Auf eine Funktion wollte ich eigentlich nicht verzichten und eigentlich 
sogar eher noch was Reserve haben. Vermutlich würde das mit Assembler 
etwas schlanker sein, aber ich möchte schon bei Bascom bleben. Habt Ihr 
für mich Newbie ein paar Tipps, wo ich noch sparen kann?

Im schlimmsten Fall müsste ich auf den Tiny48 umsteigen, aber ich 
brauche gar nicht so viele PINS und das Ganze soll auch möglichst klein 
bleiben...

Viele Grüße
  Holger
Angehängte Dateien:
#1249456
Lesenswert?

Hallo,

Bascom scheint irgendwie sonderbar zu sein...

In jeder anderen Sprache würde ein

  ' Hauptprogramm

Offset = 8
Count = 0
Goto Init_all

...

Init_all:
  Disable Interrupts
  Neustart = 0
  Geschw = &H7FFF
  Wait 15
  Ds1820 = Readds1820()
  Temp_feel = Ds1820 - offset
  If Temp_feel < Maxt Then
    Temp_ref = Maxt
    Goto Vorwaerm
  End If
  Enable Interrupts
Return

beim Return in einem Absturz enden...

Gruß aus Berlin
Michael
Gast #1249476
Lesenswert?

> beim Return in einem Absturz enden...

Stimmt...

Vielleicht sind das je die beiden Bytes, die zuviel sind... ;-)

Zum Einsparen der zwei Bytes:
1
Ddrb = &B0001_1111
2
Set Portb.0
3
Set Portb.1
4
Set Portb.2
5
Set Portb.3
6
Set Portb.4

lässt sich durch
1
Ddrb = &B00011111
2
Portb = &B00011111

ersetzen, was schon mal ein paar Bytes spart. Das gesamte Programm habe 
ich mangels Kommentare nicht weiter analysiert.

...
#1249486
Lesenswert?

Versuche weniger funktionen und gotos zu benutzen. Grade, wenn du sie 
nur an einer(evtl 2) stelle nutzt, bläht es den code auf und macht ihn 
schlechter lesbar.
du verwendest "vorwaerm" nur einmal->schreibe es direkt an der stelle wo 
du es brauchst anstatt diese goto springerei.

Vom ds1820 liest du 16 bytes benutzt aber nur die ersten beiden bytes 
als integer.

versuche port-Register in einem Rutsch zu definieren

Constanten könntest du auch  im eeprom statt im flash ablegen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren