- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: Compileroption Optimize Code

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109

    Compileroption Optimize Code

    Anzeige

    Powerstation Test
    Einen guten Morgen an alle!

    Ich habe mal eine Frage zu der Compiler-Option "Potimize Code".

    Welche Auswirkung hat diese Funktion auf den erzeugten Code (kleiner, schnelle, usw.).

    Wenn ich für die Compilierung bei mir diese Funktion verwende, bekomme ich folgende Fehlermeldung:

    Invalide comparison operator
    Der Fehler zeigt auf die Codezeile mit Case 0

    Im Vorfeld habe ich diesen Case mit Alias definiert

    Messpunkt Alias 0

    Grüße
    Martin

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    35
    Beiträge
    1.614
    schick mal bitte deinen ganzen quellcode, ich glaub da issn dicker fehler drin, denn konstanten macht man in Bascom nich mit alias sondern mit const (const messpunkt = 0)

    maddin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    Hier der gesamte Code

    $regfile = "m8def.dat"
    $crystal = 3686400
    $hwstack = 46
    $swstack = 40
    $framesize = 40
    '***************************Config Schaltausgänge*******************************
    Config Portb = Output
    Pumpeww Alias Portb.2
    Brenner Alias Portb.3
    Pumpefb Alias Portb.4
    Pumpehk Alias Portb.5
    '**************************Def. allgemeiner Variabeln***************************
    Dim Tagnacht As Bit
    Dim Nachtbetrieb As Byte
    Dim Tagbetrieb As Byte
    Dim Tempmessstelle( As Single

    'Dim Setzeservo As Integer

    Dim Tempmittel( As Single
    Dim Tempmittelist( As Single
    Dim Deltatempnewold As Single
    Dim Z As Byte
    Dim Y As Byte
    Dim X As Byte
    X = 0
    Z = 0

    Const Tagtemp_og = 21.6
    Const Tagtemp_ug = 21.4
    Const Nachttemp_og = 20.8
    Const Nachttemp_ug = 20.6

    Nachtbetrieb = 21
    Tagbetrieb = 5

    '***************Variabeln für Servo*********************************************
    Config Portc.2 = Output

    Dim Minimum As Integer
    Dim Mittel As Integer
    Dim Maximum As Integer
    Dim Ist As Integer
    Dim Deltaminmax As Integer
    Dim Steigung As Integer
    Dim Sollwert As Integer
    Dim Pause As Byte

    Minimum = 600
    Mittel = 1500
    Maximum = 600
    Ist = Minimum
    Deltaminmax = Maximum - Minimum
    Steigung = Deltaminmax / 10
    '**************************Funktionen LCD-Display*******************************

    Config Lcd = 40 * 4
    Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
    Config Lcdbus = 4
    Config Lcdmode = Port

    Dim ___lcdno As Byte

    ___lcdno = 0
    Initlcd
    Cursor Off
    Cls
    ___lcdno = 1
    Initlcd
    Cursor Off
    Cls
    '************************************************* ******************************

    Config 1wire = Portc.1 'DS1820

    Match_rom Alias &H55
    Read_scratchpad Alias &HBE
    Start_conversion Alias &H44

    Innen Alias 0
    Vorlauf Alias 1
    Rücklauf Alias 2
    Aussen Alias 3
    Kessel Alias 4


    Dim Read_temp As Integer
    Dim Sensor_ids(4 As Byte
    Dim Id As Byte
    Dim Offset As Byte
    Dim Ds_array(7) As Byte
    Dim Bruchteil As Single
    Dim Temperatur As Single
    Dim I As Integer

    '*************************Config Timer1*****************************************
    Config Timer1 = Timer , Prescale = 256 '64 '256 'Konfiguriere Timer1
    Enable Timer1 'schalte den Timer1 ein
    On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
    Enable Interrupts
    Timer1 = 51135 'Timer1 soll schon von 34285 wegzählen
    '***************************Config RTC******************************************
    Config Sda = Portc.4
    Config Scl = Portc.5

    Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
    Const Ds1307r = &HD1

    Config Clock = User ' this will dim the bytes automatic
    Dim Weekday As Byte

    'Time$ = "20:10:00" ' to watch the day changing value
    'Date$ = "02.27.07" ' erstmaliges stellen der Uhr

    Portc.2 = 0
    '****************************Servo in Mittelstellun*****************************
    'For I = 1 To 8
    Pulseout Portc , 2 , 500 'Mittel 'Servo in Mittelstellung bringen
    Waitms 60
    ' Portc.2 = 0
    ' Waitms 500
    'Next I
    '***************************ID 1Wire configurieren******************************
    For Id = 1 To 40 'Einlesen der 5 Sensoren IDs (5*8 Byte)
    I = Id - 1
    Readeeprom Sensor_ids(id) , I
    Next Id
    '**************************Hauptrogramm*********** ******************************
    Dim Tempaltplus As Single
    Dim Tempaltminus As Single
    Do
    Print Tempmessstelle(5)
    Wait 1
    For Id = Innen To Kessel 'Kessel
    Offset = Id * 8
    Offset = Offset + 1 'Offset geht auf 1, 9, 17, 25 und 33
    1wreset 'hier wird der Temperaturwert eingelesen
    1wwrite Match_rom
    1wwrite Sensor_ids(offset) , 8 '8 Byte ID wird übertragen
    1wwrite Read_scratchpad
    For I = 1 To 7 'nur bis 7, weil 8 und 9 uninteressant
    Ds_array(i) = 1wread()
    Next I
    Read_temp = Makeint(ds_array(1) , Ds_array(2))
    1wreset 'jetzt wird wieder die Konvertierung gestartet
    1wwrite Match_rom
    1wwrite Sensor_ids(offset) , 8
    1wwrite Start_conversion
    Shift Read_temp , Right
    If 127 < Read_temp Then Read_temp = Read_temp - 32768
    Bruchteil = 16 - Ds_array(7)
    Bruchteil = Bruchteil / 16
    Bruchteil = Bruchteil - 0.25
    Temperatur = Read_temp + Bruchteil
    Temperatur = Temperatur + 0.2
    Deltatempnewold = Temperatur - Tempmessstelle(id + 1)

    If Deltatempnewold < 0.5 Or Deltatempnewold > -0.5 Or Temperatur = Tempmessstelle(id + 1) Then
    Tempmessstelle(id + 1) = Temperatur
    Else
    Tempmessstelle(id + 1) = Tempmessstelle(id + 1)
    End If

    ___lcdno = 0

    Select Case Id
    Case Innen:
    Locate 1 , 1 : Lcd "WZ: "
    Locate 1 , 5 : Lcd Fusing(temperatur , "#.#")
    Case Vorlauf: 'ausgabe im Display ist dann z.B.
    Locate 2 , 1 : Lcd "VL: "
    Locate 2 , 5 : Lcd Fusing(temperatur , "#.#" ) ' Inn Auss Kess Rück Vorl
    Case Rücklauf: ' 14.4 52.4 67.3 43.0 62.8
    Locate 2 , 11 : Lcd "RL: "
    Locate 2 , 14 : Lcd Fusing(temperatur , "#.#")
    End Select
    Locate 1 , 11 : Lcd "AT: "
    Locate 1 , 14 : Lcd Fusing(tempmessstelle( , "#.###")

    ___lcdno = 1
    Locate 2 , 20
    Lcd Time$
    Select Case Id
    Case Aussen:
    Locate 1 , 1 : Lcd "AU: "
    Locate 1 , 5 : Lcd Fusing(temperatur , "#.#")
    Case Kessel:
    Locate 1 , 11 : Lcd "KE: "
    Locate 1 , 14 : Lcd Fusing(temperatur , "#.#")
    End Select
    Locate 2 , 1 : Lcd "A2: "
    Locate 2 , 5 : Lcd Fusing(temperatur , "#.#")
    Cursor Off
    Next Id
    Gosub Schalterelais
    'Gosub Servo
    Gosub Tempmittel
    Loop
    End
    '*******************************TempMittel******** ******************************
    Servo:
    Sollwert = Tempmessstelle(4) * Steigung
    Sollwert = Sollwert + Minimum
    If Tempmessstelle(4) >= 20.0 Then
    If Ist < Sollwert And Ist > Minimum Then
    Ist = Ist + 10 ' Incr Ist
    Pulseout Portc , 2 , Ist
    Waitms 60
    End If
    Else
    Ist = Ist - 10 ' Incr Ist
    Pulseout Portc , 2 , Ist
    Waitms 60
    End If
    Wait 1
    Return
    '*************************Sub Relais schalten***********************************
    Schalterelais:
    Select Case Tagnacht
    Case 0
    Gosub Nachtbetrieb
    Case 1
    Gosub Tagbetrieb
    End Select
    Return
    '**************************Sub für Tagbetrieb***********************************
    Tagbetrieb:
    If Tempmessstelle(1) >= Tagtemp_og Then 'And Oldmesswert(1) >= Tagtemp_og Then
    Brenner = 0 ' Brenner
    If Tempmessstelle(5) < 32.0 Then
    Pumpefb = 0 ' Pumpe FB
    Pumpehk = 0 ' PumpeHK
    End If
    If Tempmessstelle(5) > 34.0 Then
    Pumpefb = 1 ' Pumpe FB
    Pumpehk = 1 ' PumpeHK
    End If
    End If
    If Tempmessstelle(1) < Tagtemp_ug Then 'And Oldmesswert(1) < Tagtemp_ug Then
    Brenner = 1
    Pumpefb = 1
    Pumpehk = 1
    End If
    Return
    '**************************TempMittel berechnen*********************************
    Tempmittel:
    If X = 0 Then
    For Y = 1 To 8
    Tempmittel(y) = Tempmessstelle(y)
    Next Y
    X = 1
    End If
    If X = 1 Then
    If Z < 50 Then
    For Y = 1 To 8
    Tempmittel(y) = Tempmittel(y) + Tempmessstelle(y)
    Tempmittel(y) = Tempmittel(y) / 2
    ' Print Tempmittel(y)
    Next Y
    Z = Z + 1
    End If
    End If
    If Z = 50 Then
    X = 0
    Z = 0
    End If
    Return
    '**************************Sub für Nachtbetrieb*********************************
    Nachtbetrieb:
    If Tempmessstelle(1) >= Nachttemp_og Then 'And Oldmesswert(1) >= Nachttemp_ogthen
    Brenner = 0
    If Tempmessstelle(5) < 32.0 Then
    Pumpefb = 0
    Pumpehk = 0 ' Pumpe FB
    End If
    If Tempmessstelle(5) >= 34.0 Then
    Pumpefb = 1
    Pumpehk = 1
    End If
    End If
    If Tempmessstelle(1) <= Nachttemp_ug Then 'And Oldmesswert(1) < Nachttemp_ug Then
    Brenner = 1
    Pumpefb = 1
    Pumpehk = 1
    End If
    Return '
    '**************************Subroutine für Timer1********************************
    Isr_von_timer1: 'ISR von Timer1
    Timer1 = 51135
    If _hour >= Nachtbetrieb Or _hour < Tagbetrieb Or _hour = 7 Then
    Tagnacht = 0 'Nachteinstellung
    Else
    Tagnacht = 1 'Tageinstellung
    End If
    Return
    '***************************Subs für RTC****************************************
    Getdatetime:
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 0 ' start address in 1307

    I2cstart ' Generate start code
    I2cwbyte Ds1307r ' send address
    I2crbyte _sec , Ack
    I2crbyte _min , Ack ' MINUTES
    I2crbyte _hour , Ack ' Hours
    I2crbyte Weekday , Ack ' Day of Week
    I2crbyte _day , Ack ' Day of Month
    I2crbyte _month , Ack ' Month of Year
    I2crbyte _year , Nack ' Year
    I2cstop
    _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
    _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
    Return

    Setdate:
    _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 4 ' starting address in 1307
    I2cwbyte _day ' Send Data to SECONDS
    I2cwbyte _month ' MINUTES
    I2cwbyte _year ' Hours
    I2cstop
    Return

    Settime:
    _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
    I2cstart ' Generate start code
    I2cwbyte Ds1307w ' send address
    I2cwbyte 0 ' starting address in 1307
    I2cwbyte _sec ' Send Data to SECONDS
    I2cwbyte _min ' MINUTES
    I2cwbyte _hour ' Hours
    I2cstop
    Return

    '************************************************* ******************************
    $eeprom

    Data &H10 , &HE8 , &HF4 , &H23 , &H01 , &H08 , &H00 , &HEF '
    Data &H10 , &H1B , &HD0 , &H23 , &H01 , &H08 , &H00 , &H23 '
    Data &H10 , &H78 , &H37 , &H39 , &H01 , &H08 , &H00 , &H11 '
    Data &H10 , &HC0 , &H46 , &H19 , &H01 , &H08 , &H00 , &H67 '
    Data &H10 , &HBD , &HB6 , &H23 , &H01 , &H08 , &H00 , &H40 '
    Data &H10 , &H56 , &HA3 , &H23 , &H01 , &H08 , &H00 , &H3F

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Wenn du die Variable "Tagnacht" als Byte anlegst dann gehts mit Case.

    Alternativ statt Case was anderes nehmen.
    zb. "On tagnacht Gosub Nachtbetrieb , Tagbetrieb"
    Gruß
    Ratber

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad