-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Programm aus dem Jahr 2005 Compilieren

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Bernd_Stein
    Registriert seit
    19.09.2008
    Ort
    Deutschland : Nordrhein-Westfalen ( NRW )
    Alter
    46
    Beiträge
    362

    Programm aus dem Jahr 2005 Compilieren

    Anzeige

    Hallo zusammen,

    von Bascom habe ich gar keine Ahnung, möchte aber das Programm im Anhang compilieren.
    Das Programm stammt aus dem Jahr 2005.

    Ich selbst bin soweit gekommen, das ich diesen Fehler ausmerzen konnte :
    $regfile = "at26def.dat" => falsch
    $regfile = "ATtiny26.dat" => richtig

    Hier kommen die nächsten Fehler, die ich allerdings nicht verstehe :

    Dim Version As Byte
    Error 353: Line 11 Reserved word may not be used [ VERSION ]

    Dim Stemp As String * 16 'String temporär
    Error 22: Line 25 Out of SRAM space

    Die BASCOM-Demoversion lautet :

    Compiler version : 2.0.7.5
    Compiler build : 2.0.7.5.003
    IDE Version : 2.0.7.5.003

    und ist von hier : http://www.rn-wissen.de/index.php/Ba...R_Bascom_Basic

    Ich vermute mal, das es an dem alten Programm liegt und weil ich die neue BASCOM-Demoversion benutze.

    Wäre jemand von Euch so nett und kann mir das Programm compilieren ?

    Bernd_Stein
    Angehängte Dateien Angehängte Dateien
    CRS Robotics A255

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Hallo!


    Dim Version As Byte
    Error 353: Line 11 Reserved word may not be used [ VERSION ]
    Version ist inzwischen ein Befehl geworden und kann aus diesem Grund nicht mehr als Variablenname genutzt werden. Abhilfe: Anderen Variablennamen verwenden (z. B. "Vers").
    Grüße
    Thomas

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Bernd_Stein
    Registriert seit
    19.09.2008
    Ort
    Deutschland : Nordrhein-Westfalen ( NRW )
    Alter
    46
    Beiträge
    362
    Zitat Zitat von Bernd_Stein Beitrag anzeigen
    Dim Version As Byte
    Error 353: Line 11 Reserved word may not be used [ VERSION ]
    Zitat Zitat von Thomas E. Beitrag anzeigen
    Hallo!
    Version ist inzwischen ein Befehl geworden und kann aus diesem Grund nicht mehr als Variablenname genutzt werden. Abhilfe: Anderen Variablennamen verwenden (z. B. "Vers").
    Danke, das ging ja mal richtig schnell.
    Hast Du Dir mal die Mühe gemacht und versucht, das Programm zu compilieren ?
    Ich weiß so etwas wird nicht gerne gelesen, das Andere die Arbeit für einen machen sollen.
    Aber wäre es trotzdem möglich, wenn es nicht zu viel ist ?

    Manchmal möchte man halt etwas nur Nachbauen, ohne alles im Detail zu verstehen.
    Das Programm ist eine I2C -> RS232 Schnittstelle für einen Datenlogger.
    Den sogenannten MiniLogger der in LogView benutzt werden kann.
    Die Sache ist ziemlich kompliziert - auch deswegen, weil sich dafür keiner mehr zu interessieren scheint.

    http://www.ganzfix.de/MiniLogger/

    http://www.logview.info/vBulletin/fo...?14-MiniLogger


    Bernd_Stein
    CRS Robotics A255

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Das Programm lässt sich mit der 2.0.7.4 kompilieren. Ich musste nur
    Code:
    Version
    gegen
    Code:
    Bversion
    ersetzen, sowie
    Code:
    & B58#;
    gegen
    Code:
    :
    ersetzen.

    Code:
    $crystal = 1000000                                          '1 MHz, Damit auch die Software davon weiss
    $regfile = "ATtiny26.dat"                                   'Wir benutzen einen Tiny26
    $noramclear
    
    Const Eeprom_adress_w = &HA0                                'Basisadresse des verwendeten EEPROMs 24C64A = &HA0 / 24C256 = &HA0
    Const Eeprom_adress_r = Eeprom_adress_w + 1                 'Nicht aendern!
    
    Dim Eeprom_size As Word                                     '
    Dim Last_icadr As Word                                      '
    Dim Measured_bytes As Byte                                  '
    Dim Bversion As Byte                                        '
    
    Dim Icadr As Word At &H74                                   'Adresse im I2C-EEProm
    Dim Icadrlo As Byte At &H74 Overlay                         '
    Dim Icadrhi As Byte At &H75 Overlay                         '
    Dim Collected As Word At &H78                               'Anzahl gespeicherter Datensätze im akt. Block
    Dim Collectedlo As Word At &H78 Overlay                     '
    Dim Collectedhi As Word At &H79 Overlay                     '
    Dim Wtemp0 As Word At &H7C                                  '16Bit temporär
    Dim Wtemp0lo As Byte At &H7C Overlay                        '
    Dim Wtemp0hi As Byte At &H7D Overlay                        '
    Dim Wtemp1 As Word At &H7E                                  '16Bit temporär
    Dim Btemp0 As Byte                                          '
    Dim Btemp1 As Byte                                          '
    Dim Stemp As String * 16                                    'String temporär
    
    'Config & Init ----------------------------------------------
    Ddra = &B00000000                                           'Ddra Input
    Porta = &B11111111                                          'pull-up
    
    Ddrb = &B01100000                                           'Ddrb.0 Input SDA (Mini-Datenlogger)
    'DDrb.1 Input
    'DDrb.2 Input SCL (Mini-Datenlogger)
    'DDrb.3 Input Button
    'DDrb.4 Input Seriell
    'DDrb.5 Output Seriell
    'DDrb.6 Output Reset (Mini-Datenlogger)
    'DDrb.7 Input (Reset)
    
    Portb = &B01001000                                          'Portb.0 SDA (Mini-Datenlogger)
    'Portb.1
    'Portb.2 SCL (Mini-Datenlogger)
    'Portb.3 pull-up für Button
    'Portb.4 seriell
    'Portb.5 seriell
    'Portb.6 Reset (Mini-Datenlogger)
    'Portb.7
    
    Config Sda = Portb.0                                        'Ports fuer die I2C-Schnittstelle
    Config Scl = Portb.2
    'I2cinit 'wird mit DDRB= und PORTB= miterledigt
    'Reset Portb.0 (Sda)
    'Reset Portb.2 (Scl)
    'Reset Ddrb.0 (Sda)
    'Reset DDrb.2 (Scl)
    
    Open "COMB.5:9600,8,N,1,INVERTED" For Output As #1          'Port für serielle Ausgabe
    'Set Ddrb.5
    'Reset Portb.5
    
    'Program ----------------------------------------------------
    
    _read_i2c:                                                  '                                              '
    I2cstop                                                     '
    Waitms 500                                                  '
    Icadr = 0                                                   '
    Gosub Read_eeprom                                           '
    Measured_bytes = Wtemp0lo                                   '
    Bversion = Wtemp0hi                                         '
    Gosub Read_eeprom                                           '
    Eeprom_size = Wtemp0                                        '
    
    Print #1 , "no connect"
    If Bversion = 0 Then Goto _read_i2c
    If Bversion = 255 Then Goto _read_i2c
    If Measured_bytes = 0 Then Goto _read_i2c
    If Measured_bytes = 255 Then Goto _read_i2c
    If Eeprom_size = 0 Then Goto _read_i2c
    
    Shift Eeprom_size , Left , 8                                '
    Eeprom_size = Eeprom_size + 255                             '
    Print #1 , "MiniLogger;"
    Print #1 , ";" ; Bversion ; ";" ; Measured_bytes ; ";" ; Eeprom_size ; ";"
    Shift Measured_bytes , Right , 1                            'lesen erfolgt word-weise
    
    Last_icadr = Eeprom_size - 4                                '
    Last_icadr = Last_icadr - Measured_bytes                    '
    
    Gosub Read_eeprom                                           '
    
    Do                                                          'Beginn Hauptschleife
    Gosub Read_eeprom                                           '
    Print #1 , ";"
    Print #1 , Wtemp0 ; ";"
    Collected = Wtemp0                                          '
    For Wtemp1 = 1 To Collected                                 'Datensätze lesen
    If Icadr > Last_icadr Then
    Collected = 0
    Exit For                                                    '
    End If
    For Btemp1 = 1 To Measured_bytes
    Gosub Read_eeprom
    Print #1 , ";" ; Wtemp0hi ; ";" ; Wtemp0lo ;
    Next Btemp1
    Print #1 , ";"
    Next Wtemp1
    Loop Until Collected = 0                                    'Ende Hauptschleife
    
    Do                                                          '
    Loop                                                        '
    
    'I2C-Routinen
    '-----------------------------------
    Read_eeprom:                                                '
    I2cstart                                                    'generate start
    I2cwbyte Eeprom_adress_w                                    'slave adsress
    I2cwbyte Icadrhi                                            'address of EEPROM
    I2cwbyte Icadrlo                                            'address of EEPROM
    I2cstart                                                    'repeated start
    I2cwbyte Eeprom_adress_r                                    'slave address (read)
    I2crbyte Wtemp0hi , Ack                                     'read byte
    I2crbyte Wtemp0lo , Nack                                    'read byte
    I2cstop                                                     'generate stop
    Incr Icadr
    Incr Icadr
    Return
    Out of SRAM Space kann darauf hindeuten, dass in den Optionen zu hohe Stackwerte eingetragen sind, welche dann genommen werden, wenn im Programmcode nichts angegeben ist.
    Geändert von peterfido (14.08.2012 um 18:13 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Bernd_Stein
    Registriert seit
    19.09.2008
    Ort
    Deutschland : Nordrhein-Westfalen ( NRW )
    Alter
    46
    Beiträge
    362
    Zitat Zitat von peterfido Beitrag anzeigen
    Das Programm lässt sich mit der 2.0.7.4 kompilieren. Ich musste nur ..., sowie
    Code:
    & B58#;
    gegen
    Code:
    :
    ersetzen.
    Da habe ich ja was zu knacken. " &58# " gegen " : " getauscht. Aber ich will gar nicht rätseln .
    Ich möchte einfach nur das das Programm läuft und das tut was sich der Programmierer dabei gedacht hat.


    Zitat Zitat von peterfido Beitrag anzeigen
    Out of SRAM Space kann darauf hindeuten, dass in den Optionen zu hohe Stackwerte eingetragen sind, welche dann genommen werden, wenn im Programmcode nichts angegeben ist.
    Das kann ich leider auch nicht lösen .

    Bernd_Stein
    CRS Robotics A255

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Bernd_Stein Beitrag anzeigen
    Das kann ich leider auch nicht lösen .
    Du musst entweder die Werte für Stacks und Frame in den Bascom-Einstellungen anpassen, oder direkt eingefügt im Code.
    Dass bei dem kleine Controller der SRam noch früher zur Neige geht, liegt am Pfusch die Overlays auf 'ne feste Adresse zu setzen, damit wird der Bereich von &h66 - &h74 verschwendet.
    Kann nach diesem Schema behoben werden:
    Code:
    Dim Icadr As Word
    Dim Icadrlo As Byte At Icadr Overlay
    Dim Icadrhi As Byte At Icadr + 1 Overlay
    'usw.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von Bernd_Stein
    Registriert seit
    19.09.2008
    Ort
    Deutschland : Nordrhein-Westfalen ( NRW )
    Alter
    46
    Beiträge
    362
    Zitat Zitat von Bernd_Stein Beitrag anzeigen
    Das kann ich leider auch nicht lösen .
    Danke auch Dir für Deine Hilfe.

    Zitat Zitat von MagicWSmoke Beitrag anzeigen
    Du musst entweder die Werte für Stacks und Frame in den Bascom-Einstellungen anpassen, oder direkt eingefügt im Code.
    Dass bei dem kleine Controller der SRam noch früher zur Neige geht, liegt am Pfusch die Overlays auf 'ne feste Adresse zu setzen, damit wird der Bereich von &h66 - &h74 verschwendet.
    Das alles ist mir zur Zeit etwas zu hoch. Beschäftige mich schon mehrere Tage mit diesem MiniLogger.
    Ich bin schon froh soweit gekommen zu sein und auch, das überhaupt jemand solch ein Projekt mit der Hilfe anderer erstellt hat.

    Zitat Zitat von MagicWSmoke Beitrag anzeigen
    Kann nach diesem Schema behoben werden:
    Code:
    Dim Icadr As Word
    Dim Icadrlo As Byte At Icadr Overlay
    Dim Icadrhi As Byte At Icadr + 1 Overlay
    'usw.
    Habe jetzt soviel Zeit in diesen MiniLogger gesteckt, das ich in den kommenden Tagen mich nur noch spärlich damit befassen kann. Also nicht wundern, wenn Ihr in den nächsten Tagen nichts von mir hört.

    Bernd_Stein
    CRS Robotics A255

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Ohne mir jetzt Gedanken über Sinn oder Unsinn des Codes gemacht zu haben, so kompiliert das und entspricht funktional dem vorgegeben Code.
    Die absolute Adressvergabe wird nirgends anders als im Overlay genutzt und da lässt man besser den Compiler die Variablen organisieren.
    Code:
    $regfile = "ATtiny26.dat"                                   'Wir benutzen einen Tiny26
    $crystal = 1000000                                          '1 MHz, Damit auch die Software davon weiss
    $hwstack = 32
    $swstack = 24
    $framesize = 24
    
    $noramclear
    
    Const Eeprom_adress_w = &HA0                                'Basisadresse des verwendeten EEPROMs 24C64A = &HA0 / 24C256 = &HA0
    Const Eeprom_adress_r = Eeprom_adress_w + 1                 'Nicht aendern!
    
    Dim Eeprom_size As Word                                     '
    Dim Last_icadr As Word                                      '
    Dim Measured_bytes As Byte                                  '
    Dim Bversion As Byte                                        '
    Dim Icadr As Word
    Dim Icadrlo As Byte At Icadr Overlay
    Dim Icadrhi As Byte At Icadr + 1 Overlay
    Dim Collected As Word                                       'Anzahl gespeicherter Datensätze im akt. Block
    Dim Collectedlo As Word At Collected Overlay                '
    Dim Collectedhi As Word At Collected + 1 Overlay            '
    Dim Wtemp0 As Word
    Dim Wtemp0lo As Byte At Wtemp0 Overlay                      '
    Dim Wtemp0hi As Byte At Wtemp0 + 1 Overlay                  '
    Dim Wtemp1 As Word                                          '16Bit temporär
    Dim Btemp0 As Byte                                          '
    Dim Btemp1 As Byte                                          '
    Dim Stemp As String * 16                                    'String temporär
    
    'Config & Init ----------------------------------------------
    Ddra = &B00000000                                           'Ddra Input
    Porta = &B11111111                                          'pull-up
    
    Ddrb = &B01100000                                           'Ddrb.0 Input SDA (Mini-Datenlogger)
    'DDrb.1 Input
    'DDrb.2 Input SCL (Mini-Datenlogger)
    'DDrb.3 Input Button
    'DDrb.4 Input Seriell
    'DDrb.5 Output Seriell
    'DDrb.6 Output Reset (Mini-Datenlogger)
    'DDrb.7 Input (Reset)
    
    Portb = &B01001000                                          'Portb.0 SDA (Mini-Datenlogger)
    'Portb.1
    'Portb.2 SCL (Mini-Datenlogger)
    'Portb.3 pull-up für Button
    'Portb.4 seriell
    'Portb.5 seriell
    'Portb.6 Reset (Mini-Datenlogger)
    'Portb.7
    
    Config Sda = Portb.0                                        'Ports fuer die I2C-Schnittstelle
    Config Scl = Portb.2
    'I2cinit 'wird mit DDRB= und PORTB= miterledigt
    'Reset Portb.0 (Sda)
    'Reset Portb.2 (Scl)
    'Reset Ddrb.0 (Sda)
    'Reset DDrb.2 (Scl)
    
    Open "COMB.5:9600,8,N,1,INVERTED" For Output As #1          'Port für serielle Ausgabe
    'Set Ddrb.5
    'Reset Portb.5
    
    'Program ----------------------------------------------------
    _read_i2c:                                                  '                                              '
    I2cstop                                                     '
    Waitms 500                                                  '
    Icadr = 0                                                   '
    Gosub Read_eeprom                                           '
    Measured_bytes = Wtemp0lo                                   '
    Bversion = Wtemp0hi                                         '
    Gosub Read_eeprom                                           '
    Eeprom_size = Wtemp0                                        '
    
    Print #1 , "no connect"
    If Bversion = 0 Then Goto _read_i2c
    If Bversion = 255 Then Goto _read_i2c
    If Measured_bytes = 0 Then Goto _read_i2c
    If Measured_bytes = 255 Then Goto _read_i2c
    If Eeprom_size = 0 Then Goto _read_i2c
    
    Shift Eeprom_size , Left , 8                                '
    Eeprom_size = Eeprom_size + 255                             '
    Print #1 , "MiniLogger;"
    Print #1 , ";" ; Bversion ; ";" ; Measured_bytes ; ";" ; Eeprom_size ; ";"
    Shift Measured_bytes , Right , 1                            'lesen erfolgt word-weise
    
    Last_icadr = Eeprom_size - 4                                '
    Last_icadr = Last_icadr - Measured_bytes                    '
    
    Gosub Read_eeprom                                           '
    
    Do                                                          'Beginn Hauptschleife
    Gosub Read_eeprom                                           '
    Print #1 , ";"
    Print #1 , Wtemp0 ; ";"
    Collected = Wtemp0                                          '
    For Wtemp1 = 1 To Collected                                 'Datensätze lesen
    If Icadr > Last_icadr Then
    Collected = 0
    Exit For                                                    '
    End If
    For Btemp1 = 1 To Measured_bytes
    Gosub Read_eeprom
    Print #1 , ";" ; Wtemp0hi ; ";" ; Wtemp0lo ;
    Next Btemp1
    Print #1 , ";"
    Next Wtemp1
    Loop Until Collected = 0                                    'Ende Hauptschleife
    
    Do                                                          '
    Loop                                                        '
    
    'I2C-Routinen
    '-----------------------------------
    Read_eeprom:                                                '
    I2cstart                                                    'generate start
    I2cwbyte Eeprom_adress_w                                    'slave adsress
    I2cwbyte Icadrhi                                            'address of EEPROM
    I2cwbyte Icadrlo                                            'address of EEPROM
    I2cstart                                                    'repeated start
    I2cwbyte Eeprom_adress_r                                    'slave address (read)
    I2crbyte Wtemp0hi , Ack                                     'read byte
    I2crbyte Wtemp0lo , Nack                                    'read byte
    I2cstop                                                     'generate stop
    Incr Icadr
    Incr Icadr
    Return

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von Bernd_Stein
    Registriert seit
    19.09.2008
    Ort
    Deutschland : Nordrhein-Westfalen ( NRW )
    Alter
    46
    Beiträge
    362

    Hoffe nun endlich alles zu haben um den MiniLogger mit LogView nutzen zu können

    Zitat Zitat von MagicWSmoke Beitrag anzeigen
    Ohne mir jetzt Gedanken über Sinn oder Unsinn des Codes gemacht zu haben, so kompiliert das und entspricht funktional dem vorgegeben Code.
    Die absolute Adressvergabe wird nirgends anders als im Overlay genutzt und da lässt man besser den Compiler die Variablen organisieren.
    Sehr vielen Dank.
    Konnte das Programm wunderbar compilieren. Die .Hex ist zwar mit 4KB angegeben, aber das dürfte wohl an Windoof liegen.
    Über alles weitere werde ich hoffentlich dem Nächst berichten können.

    Für heute over and out.

    Bernd_Stein
    CRS Robotics A255

  10. #10
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das .hex File ist noch ASCII codiert. Das .hex File ist etwas mehr als 3 mal so lang wie der benötigte Platz im µC. Das liegt nicht an Windows, sondern File Format (von Intel).

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 04.02.2012, 15:09
  2. Problem beim Compilieren oder Fehler im Programm
    Von holgie72 im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 06.02.2010, 15:48
  3. Antworten: 14
    Letzter Beitrag: 04.03.2009, 16:57
  4. Robo-Projekt / 1 Jahr / einige Fragen
    Von Nygil im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 12
    Letzter Beitrag: 07.09.2004, 23:36
  5. Mehrere hunderttausend Staubsaugerroboter in einem Jahr
    Von Frank im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 16
    Letzter Beitrag: 30.04.2004, 12:02

Berechtigungen

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