Code: Alles auswählen
repeat i from 1 to 7 'alle anderen cogs anhalten
ifnot i == cogid
cogstop(i)
Code: Alles auswählen
repeat i from 0 to 7
Code: Alles auswählen
repeat i from 1 to 7 'alle anderen cogs anhalten
ifnot i == cogid
cogstop(i)
Code: Alles auswählen
repeat i from 0 to 7
Code: Alles auswählen
repeat i from 1 to 7 'alle anderen cogs anhalten
ifnot i == cogid
cogstop(i)
dira := 0 'diese cog vom bus trennen
cognew(@loader, plen)
cogstop(cogid) 'cog 0 anhalten
Code: Alles auswählen
CON
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
PUB mgr_load|i 'cmgr: bellatrix-loader
cognew(@L000, 0)
DAT
L000 org 0
mov dira, LDIN 'bus auf eingabe schalten
mov outa, LM_0 'bus inaktiv
' clear hRAM
mov Lreg_a, LCLS '32k löschen
mov Lreg_b, #0 'adresse ab 0
L001 rdlong Lreg_b, #0
add Lreg_b, #1 'adresse + 1
djnz Lreg_a, #L001
#ifdef Zerberus
' COG-ID als info für Gesperrte COG's
cogid Lreg_a
wrbyte LSLOT, Lreg_a
' SLOT-Basis setzen
add LSLOT, #3
call #Lget1 'M1-wert(adresse) einlesen
Gute Frage. Ich denke der Loader wird in COG1 gestartet (hab ich aber nie geprüft) empfängt den neuen Code über den Bus und startet ihn in COG 0? Hab ich auch nie geprüft und das könnte wirklich Ursache von Problemen sein. Müsste man mal einen kleinen Testdriver schreiben, der die eigene COGID ausgibt. Wenn man den per bload startet, kann man ja mit Gewissheit sagen wo er landet. Kann ich aber grad nicht probieren, hab hier in der Firma leider (noch) keinen Hive...Bei einem Software reset scheint der prop alle COG's zu killen und dann aber den nächsten freien zu verwenden.
Das ist nicht immer COG0.
danngeht das nicht mehr auf.
Mal eine kleine frage Auf welchen COG läuft "mgr_load" nach dem es das neue File geladen und gestartet hatt?
Rätselhafte Worte in der Dunkelheit...PIC18F2550 hat geschrieben:Ich habe gerade mein bellflash.spin von 1 auf 0 geändert.
ausdrohne235 hat geschrieben:Code: Alles auswählen
repeat i from 1 to 7 'alle anderen cogs anhalten ifnot i == cogid cogstop(i) dira := 0 'diese cog vom bus trennen cognew(@loader, plen) cogstop(cogid) 'cog 0 anhalten
Code: Alles auswählen
repeat i from 1 to 7 'alle anderen cogs anhalten
Code: Alles auswählen
repeat i from 0 to 7 'alle anderen cogs anhalten
Versteh ich nicht: Wenn ich alle COG's stoppe, dann läuft auch der Code nicht mehr, welcher die neue COG mit dem Loader starten soll.PIC18F2550 hat geschrieben:Wenn i nicht COG0 ist kann dieser wesentlich schneller arbeitete Code den frisch geladenen Code noch vor dessen Abschaltung beschädigen.
Daher erst alle COG'S. Stop dann Code laden dann diesen starten und im Anschluss Selbstmord.
Code: Alles auswählen
repeat i from 0 to 7 'alle anderen cogs anhalten
ifnot i == cogid
cogstop(i)
Code: Alles auswählen
dira := 0 'diese cog vom bus trennen
cognew(@loader, plen)
cogstop(cogid) 'cog 0 anhalten