BASCOM Bootloader- Programmierung ohne Hardwarereset?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • BASCOM Bootloader- Programmierung ohne Hardwarereset?

      Hallo,

      Ich möchte für mein nächstes Projekt diesen Bootloader benutzen:
      gameroom-austria.info/cms/inde…/menu-software-bascomboot

      In der Beschreibung steht:

      Der Bootloader kann bei Bedarf auch ohne HW-Reset aufgerufen werden. Dazu wird der Befehl Goto &H1C00 im eigenen BASCOM-Programm entsprechend verwendet. Der Befehl GOTO wird aber nur mit der korrekten Bootloader-Adresse welche die selbe wie die der Konstante $loader ist funktionieren!
      Wie funktioniert das, könnte das mir jemand erklären?

      Vielen Dank!

      Gruß Ralf
    • Aber muß dieser Befehl im Programm stehen, was schon drauf ist,
      oder in dem was ich aufspielen will?
      Wo sollte er stehen, als erster Befehl?

      Wenn ein Programm auf dem Controller läuft, kann ich es doch nicht
      aus der Bascom IDE heraus stoppen. (ohne Hardwarereset)

      Irgendwie stehe ich auf dem Schlauch.
    • Ralf schrieb:

      Aber muß dieser Befehl im Programm stehen, was schon drauf ist,
      Der steht in Deinem Programm an der Stelle an der Du einen Reset auslösen möchtest.


      Ralf schrieb:

      Wenn ein Programm auf dem Controller läuft, kann ich es doch nicht
      aus der Bascom IDE heraus stoppen.
      Das ist ja auch nicht sinnvoll. Wann möchtest Du denn dass Dein Programm einen Reset ausführt?

      Wenn Du den MC updaten willst. Dafür sendet der PC ein Zeichen, z.B. "{". Beim Empfang dieses Zeichens setzt Du ein Goto zur Loaderadresse.


      Quellcode

      1. Serial0charmatch:
      2. Dim Incoming_data As String * 30
      3. Input Incoming_data
      4. Dim Kennung As String * 1
      5. Kennung = Left(incoming_data , 1)
      6. Select Case Kennung
      7. Case "{"
      8. Goto &Hxxxx 'hier die Loaderadresse
      9. End Select
      10. Return
      Alles anzeigen
      In etwa so.

      Sobald der MC von dem PC dieses Zeichen empfängt, springt er an die Startadresse vom Bootloader. Dieser übernimmt dann und datet den MC ab.
    • Hallo Pac-Man,

      danke für deine Antworten.
      Was mir trotzdem noch nicht klar ist:
      Ich möchte den Controller aus der Bascomumgebung heraus programmieren.
      Ich wähle also den Bascomprogrammer aus, kompiliere das Programm
      und klicke auf programmieren.
      Das kann doch ohne Hardwarereset nicht funktionieren, oder?
      Das ich über die serielle Schnittstelle den Befehl senden könnte
      und das Programm das gerade läuft darauf reagieren könnte und
      zum Bootloader springen könnte ist mir klar.


      Tut mir leid, das ich mich so schwer tue.

      Gruß Ralf
    • Pac-Man schrieb:

      Weiß nicht ob da als programmiergerät der bootloader gewählt werden kann.
      Sogar mehrere.
      Der MSC ist der einzige(?) der einen Soft-reset anbietet. Er sendet dann den vorgewählten Text und dann immer { in ca 10Byte Häpchen jede Sekunde. Die könnten auch als Soft reset genutzt weden. Es kommt in der normalen Komunikation vermutlich nicht so oft vor das da 10 { gesendet werden :D
      Krass drauf ist der Lawicel Bootloader : der fragt FE ED C0 DE und das gleich Kilobyteweise a_448_c66dc889
      Bei den Arduino's bin ich unklar. Meldet der Orginal Arduino Bootloder sich als STK500 Gerät oder wird noch eins benötigt?
      Beide verursachen haufenweise Fehlermeldungen =O da hier niemand antwortet ;)
    • tschoeatsch schrieb:

      Am besten, ihr fragt @Zitronenfalter, gameroom- austria ist seine Seite :D
      Ich probiere es aus, vielleicht schaffe ich es morgen oder übermorgen.
      Eigentlich ist es einleuchtend, der Programmer sendet erst mal irgendwas,
      was natürlich im laufenden Programm empfangen werden muß und als
      Befehl zum Aufrufen des Bootloaders interpretiert werden muß.
      Das Programm springt dann halt zur Adresse des Bootloaders und
      der wartet auf die Anfangssequenz des Programmers.
      ich hoffe, ich liege mal Richtig.
    • Leider funktioniert bei mir weder die Version von Zitronenfalter, noch die von MSC.
      Früher hatte ich mit älteren Versionen von Bascom oft den von MSC benutzt,
      kann jeman die Fehlermeldungen deuten?

      Quellcode

      1. Error : 1 Line : 372 Unknown statement [LDS R0 , {VL}] , in File : D:\Dropbox\Daten\Bascom\BootLoaderBasCom\BootLoader_328P.BAS
      2. Error : 1 Line : 373 Unknown statement [LDS R1 , {VH}] , in File : D:\Dropbox\Daten\Bascom\BootLoaderBasCom\BootLoader_328P.BAS
      3. Error : 7 Line : 373 IF THEN expected [ 373] , in File : D:\Dropbox\Daten\Bascom\BootLoaderBasCom\BootLoader_328P.BAS
      4. Error : 123 Line : 373 END IF expected , in File : D:\Dropbox\Daten\Bascom\BootLoaderBasCom\BootLoader_328P.BAS
      BootLoader_328P.BAS

      Edit: Es fehlen die Ausrufezeichen für den Inlineassembler.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Ralf ()

    • Ralf schrieb:

      Leider funktioniert bei mir weder die Version von Zitronenfalter, noch die von MSC.
      Ich habe das jetzt mal ausprobiert ("meine" Version baut ja auf die von MCS auf) und was soll ich sagen, auch hier kommen jetzt diese Fehler.

      Es sieht so aus, dass in den "modernen" BasCom-Versionen (wohl ab 2.0.8.x) Assembler-Code zwingend in die entsprechenden Direktiven eingebettet werden muss.
      So ging es vorher wohl auch so (hatte aber wohl den Nachteil, dass man so mit eigenen Bezeichnungen kollidieren konnte)

      BASCOM-Quellcode

      1. lds r0, {vl}
      2. lds r1, {vh}
      aber neuerdings geht das wohl nur mehr so (

      BASCOM-Quellcode

      1. $asm
      2. lds r0, {vl}
      3. lds r1, {vh}
      4. $end Asm
      Wenn sich derartige Anweisungen auch noch in Compilerdirectiven (#IF - #ENDIF) befinden darf sich wohl die Assemblerdirective nicht innerhalb der Compilerdirective befinden (also muss diese vor und nach dieser sein (hat zumindest mein kurzer Versuch so ergeben.
    • Hallo Zitronenfalter,

      danke für die Antwort!
      habe gestern lediglich die Ausrufezeichen eingefügt und es hat funktioniert. Der Bootloader läuft ohne Probleme.

      Was mir heute aufgefallen ist:
      Ich habe mir mit den Arduino Bootlader mal den Flash und den EEprom anzeigen lassen. Im Programmer steht 32K und 1K was ja stimmen sollte. Wenn ich mir die Daten anschaue, komme ich auf 15935 und 511Byte, der Bootloader beginnt bei 14336 Byte. Es wird wohl nicht alles angezeigt?
      Die seltsame Adresse des Bootloader verwundert mich.

      Gruß Ralf
    • WIE hast Du den Flash-Speicher und das EEPROM ausgelesen?
      Wenn Du es mit Bascom gemacht hast und dabei ein neues, leeres File geöffnet war, zeigt Bascom zwar bei Chip, Flash size und EPPROM size die richtigen Werten an, aber wieviel vom tatsächlichen INHALT des Flash und EEPROM angezeigt wird, hängt (in diesem Fall) von Deinen Einstellungen unter Options -> Compiler -> Chip ab.
      Ist dort ein falscher Chip eingestellt, wird unter Umständen zu wenig angegzeigt.