Bootloader Version

    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!

    • Pluto25 schrieb:


      War das Problem nicht das die Adresse nicht bekannt ist ?
      Adresse ist bekannt. hab jetzt den originalen Bootloader von MSC genommen. Der beginnt bei FC00.

      Quellcode

      1. #elseif Loaderchip = 1284
      2. $loader = $fc00
      3. Const Maxwordbit = 7
      4. Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 ,
      5. Databits = 8 , Clockpol = 0



      Auslesen tue ich mit

      Quellcode

      1. Local X As Dword : X = 0
      2. Local Y As Dword : Y = 0
      3. Local Element As Byte
      4. For X = 64512 To 64542
      5. Waitms 50
      6. Element = Cpeek(hex(x))
      7. Print#pc , "@" ; ">" ; Hex(x) ; "-" ; Hex(element) ; "<" ; Chr(13)
      8. Reset Watchdog
      9. Next X
      10. Exit Sub
      Alles anzeigen
      Mein Ergebnis ist

      Quellcode

      1. >0000FC00-0C<
      2. >0000FC01-91<
      3. >0000FC02-8D<
      4. >0000FC03-E6<
      5. >0000FC04-75<
      6. >0000FC05-11<
      7. >0000FC06-EB<
      8. >0000FC07-AB<
      9. >0000FC08-80<
      10. >0000FC09-11<
      11. >0000FC0A-6F<
      12. >0000FC0B-04<
      13. >0000FC0C-B2<
      14. >0000FC0D-66<
      15. >0000FC0E-A8<
      16. >0000FC0F-B9<
      17. >0000FC10-AA<
      18. >0000FC11-0C<
      19. >0000FC12-E9<
      20. >0000FC13-80<
      21. >0000FC14-67<
      22. >0000FC15-53<
      23. >0000FC16-B9<
      24. >0000FC17-A8<
      25. >0000FC18-E2<
      26. >0000FC19-8C<
      27. >0000FC1A-00<
      28. >0000FC1B-0C<
      29. >0000FC1C-AC<
      30. >0000FC1D-8C<
      31. >0000FC1E-83<
      Alles anzeigen
      Wenn ich den Flash auslese bekomme ich


      Quellcode

      1. 7800 8F EF 8D BF C8 ED E0 EA ï¿Èíàê
      2. 7808 4E 2E 88 E0 8E BF D8 E0 N.ˆàŽ¿Øà
      3. 7810 F8 E0 5F 2E A8 95 84 B7 øà_.¨•„·
      4. 7818 08 2E 87 7F 84 BF 88 E1 ..‡„¿ˆá
      Ich glaube ich lese die falschen Adressen. allerdings liefert eine Suche in der BIN nach meinen ersten drei byte (0C 91 8D) auch kein Ergebnis. Ich hab keine Ahnung was ich da einlese...
    • Wieso versuchst du es nicht mal nach dem Vorschlag von mir?
      Im Bootloader die Adresse des Labels mittels Restor lesen vor dem Verlassen des Bootloaders.

      Im Hauptprogramm brauchst du dann nur noch Read myString machen.

      Die Adressen-Berechnung kannst du dem Compiler überlassen.

      Zudem suchst du am Anfang deines Bootloaders. Dein "Irengwas" steht aber am Ende!
    • Pac-Man schrieb:

      Wenn ich den Flash auslese bekomme ich
      Und weshalb liest Du den Flash nicht bei FC00 ?
      Wenn ich Sete 13 mit 27 vergleiche ist es auch so das die ersten Zeichen nicht dieselben sind.

      PS Der Chip ist zu groß . Beim Tiny13 steht unter FC00 das gleich wie unter 7800 :D

      Pac-Man schrieb:

      Cpeek(hex(x))
      lass das Hex() mal weg. Bascom mag nicht mehrere Operationen in einer Zeile. Auch wenn es keine Fehlermeldung gibt weiß man nicht was darauskommt?
      Z.B. x=17 : Hex(x)= "11"
      Ein String in einer Funktion die ein Word erwachtet.
      Die ließt sonstwas. Vielleicht $3131 = 12593

      Mitch64 schrieb:

      Dein "Irengwas" steht aber am Ende!
      Bestimmt? Konstanten und Label such ich meißt vergeblich bzw finde sie sonstwo.
      Die letzte string="Hier ist fast Ende" Finde ich dann auch tatsächlich fast am Ende.
      Jedoch wird er vermutilch gar nichts finden wenn es verschlüsselt wird ?

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Pluto25 ()

    • Mitch64 schrieb:

      Wieso versuchst du es nicht mal nach dem Vorschlag von mir?
      Ich bin erst bei Beitrag 14. Wenn ich das gerafft habe versuche ich mich am nächsten.


      Pluto25 schrieb:

      Und weshalb liest Du den Flash nicht bei FC00 ?
      Ich lasse mir doch die Adresse anzeigen und die beginnt doch bei FC00 oder ist das Murks?

      Pac-Man schrieb:

      >0000FC00-0C<
      >0000FC01-91<
      >0000FC02-8D<
      >0000FC03-E6<


      Pluto25 schrieb:

      PS Der Chip ist zu groß . Beim Tiny13 steht unter FC00 das gleich wie unter 7800
      Das verstehe ich jetzt nicht, sorry.
    • Bei Post #21 sehe ich aber einen Mega 1284. Bei FC00 läuft da noch nix über.

      Im übrigen habe ich es mit meinen Grundkenntnissen geschafft, den Sampelcode "Bootloader.bas" mit meinen Daten (Version und einen String) zu erweitern und die Adresse auf diese Datazeilen per Restore vor dem Verlassen des Bootloaders für das Anwendungsprogramm zu hinterlassen.

      Im Bootloader wurde am Ende des Codes 2 Datazeilen mit Daten fürs Hauptprogramm abgelegt. Das ganze mit einem Label versehen, damit der Compiler die Adresse ermitteln kann.
      Dann wurde überall im Code vor "Goto _Reset" ein Restore auf diese Datazeilen gemacht.

      Bootloader Code: BootLoaderTest_M168.bas

      Im Anwendungsprogramm werden diese beiden Werte ausgelesen und angezeigt.

      Das folgende Anwendungs-Programm wurde dann mit dem MCS-Bootloader übertragen.

      BASCOM-Quellcode: Anwendungsprogramm Blink

      1. $Regfile = "m168def.dat"
      2. $Crystal = 14745600
      3. $Baud = 19200
      4. Dim _Version as Integer
      5. Dim _myString as String * 30
      6. Read _Version
      7. Read _myString
      8. Wait 1
      9. LED Alias PortB.0
      10. Config LED = Output
      11. Do
      12. Toggle LED
      13. Print _Version
      14. Print _myString
      15. Waitms 500
      16. Loop
      Alles anzeigen
      In Zeile 5 und 6 werden die Variablen definiert, die dann mit Read in Zeile 8 und 9 befüllt werden.
      Das ganze wird dann einfach wiederholend in der Loop ausgegeben.

      Die Ausgabe ergibt dann im Terminal

      123
      Copyright
      123
      Copyright
      123
      Copyright

      usw.
    • Mitch64 schrieb:

      einen Mega 1284. Bei FC00 läuft da noch nix über.
      Ja, ist ein Mega1284

      Da ich mir nicht sicher war ob ich im richtigen Adressbereich rumstochere lese ich jetzt vor dem Bootloader schon die Adressen. Alle vor FC00 sind auch leer.

      Quellcode

      1. >0000FBCF-FF<
      2. >0000FBD0-FF<
      3. >0000FBD1-FF<
      4. >0000FBD2-FF<
      5. >0000FBD3-FF<
      6. >0000FBD4-FF<
      7. >0000FBD5-FF<
      8. >0000FBD6-FF<
      9. >0000FBD7-FF<
      10. >0000FBD8-FF<
      11. >0000FBD9-FF<
      12. >0000FBDA-FF<
      13. >0000FBDB-FF<
      14. >0000FBDC-FF<
      15. >0000FBDD-FF<
      16. >0000FBDE-FF<
      17. >0000FBDF-FF<
      18. >0000FBE0-FF<
      19. >0000FBE1-FF<
      20. >0000FBE2-FF<
      21. >0000FBE3-FF<
      22. >0000FBE4-FF<
      23. >0000FBE5-FF<
      24. >0000FBE6-FF<
      25. >0000FBE7-FF<
      26. >0000FBE8-FF<
      27. >0000FBE9-FF<
      28. >0000FBEA-FF<
      29. >0000FBEB-FF<
      30. >0000FBEC-FF<
      31. >0000FBED-FF<
      32. >0000FBEE-FF<
      33. >0000FBEF-FF<
      34. >0000FBF0-FF<
      35. >0000FBF1-FF<
      36. >0000FBF2-FF<
      37. >0000FBF3-FF<
      38. >0000FBF4-FF<
      39. >0000FBF5-FF<
      40. >0000FBF6-FF<
      41. >0000FBF7-FF<
      42. >0000FBF8-FF<
      43. >0000FBF9-FF<
      44. >0000FBFA-FF<
      45. >0000FBFB-FF<
      46. >0000FBFC-FF<
      47. >0000FBFD-FF<
      48. >0000FBFE-FF<
      49. >0000FBFF-FF<
      50. >0000FC00-0C<
      51. >0000FC01-91<
      52. >0000FC02-8D<
      53. >0000FC03-E6<
      54. >0000FC04-75<
      55. >0000FC05-11<
      56. >0000FC06-EB<
      57. >0000FC07-AB<
      58. >0000FC08-80<
      59. >0000FC09-11<
      60. >0000FC0A-6F<
      61. >0000FC0B-04<
      62. >0000FC0C-B2<
      63. >0000FC0D-66<
      64. >0000FC0E-A8<
      65. >0000FC0F-B9<
      66. >0000FC10-AA<
      67. >0000FC11-0C<
      68. >0000FC12-E9<
      69. >0000FC13-80<
      70. >0000FC14-67<
      71. >0000FC15-53<
      72. >0000FC16-B9<
      73. >0000FC17-A8<
      74. >0000FC18-E2<
      75. >0000FC19-8C<
      76. >0000FC1A-00<
      Alles anzeigen
      Zum Verständnis ob ich es richtig kapiere. Cpeek ließt ein Byte. Hex(Byte) sollte mit doch dann genau das gleiche anzeigen wie wenn ich die BIN mit einem Hexmonitor lade.
    • Pac-Man schrieb:

      wenn ich die BIN mit einem Hexmonitor lade.
      Der Hexmonitor macht es für uns verständlich. CPeek kann jedoch damit nichts anfangen.
      Er macht aus eine binären Zahl zwei (bzw drei mit der Lücke) Ascii-Zeichen. Die widerum sehen binär völlig anders aus. Bin() würde auch Acii Zeichen erzeugen.
      Um eine Hexzahl für CPeek verständlich zu schreiben ginge &H auch &B für Binärzahlen. Variablen sind aber schon im richtigen Format.

      Durchsuch doch mal die komplette bin irgendwo sind die 0C,91.. vorhanden. Nur vermutlich nicht in der gleichen Reihenfolge
    • Pluto25 schrieb:

      Durchsuch doch mal die komplette bin irgendwo sind die 0C,91.. vorhanden
      0C kommt sicher 100mal vor...

      Anbei ein Screenshot vom Hexmonitor.
      Zwischenablage01.jpg

      Hier einer vom Progtool

      Zwischenablage02.jpg


      Pluto25 schrieb:

      Nur vermutlich nicht in der gleichen Reihenfolge
      Warum nicht? Die Variable wird doch in darauffolgende Speicherstellen geschrieben.

      Zwischenablage03.jpg
    • Habs so gelöst...

      Quellcode

      1. Local X As Word
      2. Local Element As Byte
      3. For X = &HFD32 To &HFD3A
      4. Waitms 50
      5. Element = Cpeekh(x , 1 )
      6. Print#pc , "@" ; ">" ; Hex(x) ; " " ; Chr(element) ; "<" ; Chr(13)
      7. Next X


      und als Ergebnis bekomme ich den String welchen ich mit

      Quellcode

      1. ' Hier das Label,
      2. DataForProgrammAccess:
      3. Data "irgendwas"
      am Ende vom Bootloader stehen hab.


      Quellcode

      1. >FD32 i<
      2. >FD33 r<
      3. >FD34 g<
      4. >FD35 e<
      5. >FD36 n<
      6. >FD37 d<
      7. >FD38 w<
      8. >FD39 a<
      9. >FD3A s<
      Vielen Dank für Eure Hilfe,

      Gruß, Martin
    • Mitch64 schrieb:

      Im Anwendungsprogramm werden diese beiden Werte ausgelesen und angezeigt.
      das läuft bei mir nur mit $noramclear


      Quellcode

      1. $noramclear
      2. Dim _version As Integer
      3. Dim _mystring As String * 30
      4. Read _version
      5. Read _mystring
      wenn ich es ohne versuche kriege ich bei _version als Ergebnis -1 und bei _mystring verabschiedet es sich.

      Muss ich Probleme befürchten wenn der RAM nicht gelöscht wird?
    • Ich habe das mit einem Mega 168 getestet und funktionierte prima!

      Da du den Mega1284 hast, habe ich das mal im Simulator eingestellt und probiert.

      Da sind mir 2 Fehler aufgefallen im Bootloader:
      1. Im Deklarationsteil waren 2 Controller ausgewählt. Siehe Zeile 34, 35 und 80.
      2. In der Unter-Routine Do_spm (Zeile 382 und 383) fehlen die Ausrufezeichen.

      Hier nochmal der korrigierte Bootloader für M1284: BootLoaderTest_M1284.bas

      Zum Anwendungsprogramm:
      Dein Hinweis, dass bei Version -1 kommt und beim String lesen der Controller abstürzt, sagt mit, dass Read auf einen falschen Adressbereich zugreift.
      Denn -1 (Integer) entstricht der Bytefolge FF FF im Speicher. Also unbeschriebener Speicher.

      Ich habe geprüft, ob RAMPZ bei Restore im Bootloader gesetzt wird. Und ja, er wird gesetzt.
      Ich vermute, dass RAM-Clear den RAMPZ auf null setzt.
      Daher greift Read ins Nirvana.

      Probiere doch mal den obigen Bootloader aus.

      Das Blink-Programm muss dann angepasst werden, damit der RAMPZ stimmt, bevor du mit Read versuchst zu lesen.
      Auf das $NoRAMClear kannst du verzichten!


      BASCOM-Quellcode: Angepasstes Blink-Programm (mit RAMPZ))

      1. '$Regfile = "m168def.dat"
      2. $Regfile = "m1284def.dat"
      3. $Crystal = 14745600
      4. $Baud = 19200
      5. Dim _Version as Integer
      6. Dim _myString as String * 30
      7. RAMPZ = 1
      8. Read _Version
      9. Read _myString
      10. Wait 1
      11. LED Alias PortB.0
      12. Config LED = Output
      13. Do
      14. Toggle LED
      15. Print _Version
      16. Print _myString
      17. Waitms 500
      18. Loop
      Alles anzeigen
      Wichtig ist dabei, dass du dein Programm um Zeile 9 ergänzen tust, bevor du einen Read machst. Dann sollte es gehen, auch ohne $NoRAMClear!

      Hier auch nochmal zum runterladen: Blink.bas
    • Mitch64 schrieb:

      Da sind mir 2 Fehler aufgefallen im Bootloader:
      1. Im Deklarationsteil waren 2 Controller ausgewählt. Siehe Zeile 34, 35 und 80.
      2. In der Unter-Routine Do_spm (Zeile 382 und 383) fehlen die Ausrufezeichen.
      Das ist mir bekannt. Das hab ich auch korrigiert.


      Mitch64 schrieb:

      damit der RAMPZ stimmt, bevor du mit Read versuchst zu lesen
      Danke, ich versuche RAMPZ mal zu verstehen bevor ich es probiere.