Forum: Mikrocontroller und Digitale Elektronik Optimierung Bascom Code


von Holger B. (holgerbri)


Angehängte Dateien:

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

von Michael U. (amiga)


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

von Hannes Lux (Gast)


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.

...

von Torsten F. (tnetwork)


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.

von Holger B. (holgerbri)


Lesenswert?

Vielen Dank für Eure Antworten - ich werde das mal ausprobieren...

Viele Grüße
  Holger

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.