Hallo alle zusammen,
Ich hab mal wieder ein Problem, dem ich alleine nicht herr werde.
Dieses mal ist es etwas seltsam, denn wenn ich den Bootloader Code, der in der Bascom Hilfe vorhanden ist, auf meinen Mikrocontroller lade habe ich das Problem, dass bei gewissen Anweisungen das Program einfach stoppt.
Wenn ich jetzt die $loader Anweisung weglasse, also den Code nicht in den Bootloaderbereich schreibe, wird der Code normal ausgeführt.
Folgendes habe ich schon getestet:
- dim > Funktioniert
- config > Funktioniert
- open > Funktioniert
- Zuweisungen > Funktioniert
- Berechnungen > Funktioniert
- Schalten eines Ports > Funktioniert
- Interrupts dis/enable > Funktioiniert
- nop > funktioniert
- Schleifen > Stoppt
- Bedingungen > Stoppt
- goto/gosub > Stoppt
- wait/waitms/.. > Stoppt
- print/printbin > Stoppt
- inkey/waitkey > Stoppt
- watchdog > versuch den Mikrocontroller neuzustarten nachdem er hängen bleibt, hat nicht funktioiniert
(
config watchdog = 1024
start watchdog
)
Nachfolgend ist mein Testcode, welcher als Kopie der Bootloader Hilfe aus Bascom entstanden ist. Ich hab Hauptsächlich sachen weggekürzt, welche Compiler Code waren und den Com2 auf Com1 geändert. Auch hab ich den gesamten funktionalen Teil des Codes rausgenommen da ich nicht bis zu diesen Code im Programm komme. Auf das Problem bin ich gestoßen, weil der Bootloader keine Rückmeldung auf die 123 Befehle geliefert hat. Zuerst dachte ich, dass das waitkey()/waitkey(#1) probleme macht, dem war aber nicht so. Bin durch Tests draufgekommen, dass wenn ich ein "waitms 1" und ein "set Port" vor die erste waitkey() Anweisung gebe der Port nicht gesetzte wird.
Ich habe auch schon ander Varianten versucht wo ich, den gesamten Bootloader Code rausgeworfen hab und nur die 2 Leds geschalten hab. Einmal immer vor einer Anweisung und einmal gleich danach, um zu Testen welche Anweisungen dazu führen das der Mikrocontroller hängen bleibt.
Alles anzeigen
Ich hoffe jemand von euch hat noch eine Idee.
Danke schonmal für eure Zeit.
Ich hab mal wieder ein Problem, dem ich alleine nicht herr werde.
Dieses mal ist es etwas seltsam, denn wenn ich den Bootloader Code, der in der Bascom Hilfe vorhanden ist, auf meinen Mikrocontroller lade habe ich das Problem, dass bei gewissen Anweisungen das Program einfach stoppt.
Wenn ich jetzt die $loader Anweisung weglasse, also den Code nicht in den Bootloaderbereich schreibe, wird der Code normal ausgeführt.
Folgendes habe ich schon getestet:
- dim > Funktioniert
- config > Funktioniert
- open > Funktioniert
- Zuweisungen > Funktioniert
- Berechnungen > Funktioniert
- Schalten eines Ports > Funktioniert
- Interrupts dis/enable > Funktioiniert
- nop > funktioniert
- Schleifen > Stoppt
- Bedingungen > Stoppt
- goto/gosub > Stoppt
- wait/waitms/.. > Stoppt
- print/printbin > Stoppt
- inkey/waitkey > Stoppt
- watchdog > versuch den Mikrocontroller neuzustarten nachdem er hängen bleibt, hat nicht funktioiniert
(
config watchdog = 1024
start watchdog
)
Nachfolgend ist mein Testcode, welcher als Kopie der Bootloader Hilfe aus Bascom entstanden ist. Ich hab Hauptsächlich sachen weggekürzt, welche Compiler Code waren und den Com2 auf Com1 geändert. Auch hab ich den gesamten funktionalen Teil des Codes rausgenommen da ich nicht bis zu diesen Code im Programm komme. Auf das Problem bin ich gestoßen, weil der Bootloader keine Rückmeldung auf die 123 Befehle geliefert hat. Zuerst dachte ich, dass das waitkey()/waitkey(#1) probleme macht, dem war aber nicht so. Bin durch Tests draufgekommen, dass wenn ich ein "waitms 1" und ein "set Port" vor die erste waitkey() Anweisung gebe der Port nicht gesetzte wird.
Ich habe auch schon ander Varianten versucht wo ich, den gesamten Bootloader Code rausgeworfen hab und nur die 2 Leds geschalten hab. Einmal immer vor einer Anweisung und einmal gleich danach, um zu Testen welche Anweisungen dazu führen das der Mikrocontroller hängen bleibt.
BASCOM-Quellcode
- $prog &HEC , &HFF , &HDC , &HFC
- $crystal = 16000000
- $hwstack = 40
- $swstack = 40
- $framesize = 40
- $baud = 38400 'baud statt baud1 definiert da die Programmierung über Com1 Stattfindet und nicht Com2
- $timeout = 200000 'wie in der Bascom hilfe für bootlader angegeben bei 16Mhz wurde 200000 empfohlen
- $regfile = "m2561def.dat"
- $loader = &H1FC00 'Aus der Bascom Hilfe für Bootloader
- '#################################################################################################
- dim bStatus as byte
- dim bRetries as byte
- poLedYellow alias Porta.7
- poLedRed alias PortD.4
- '#################################################################################################
- 'Com2 wurde auf Com1 geändert, da der Bootloader auf Com1 lesen/schreiben soll und nicht Com2
- config Com1 = dummy, Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
- open "com1:" for binary as #1
- '#################################################################################################
- disable Interrupts
- bRetries = 5
- '#################################################################################################
- set poLedRed
- waitms 1 '<-- Hier "stoppt" das Programm
- set poLedYellow 'Wird nie ausgeführt
- Testfor123:
- bStatus = Waitkey()
- '...
Ich hoffe jemand von euch hat noch eine Idee.
Danke schonmal für eure Zeit.