Hallo PICture,

so je´tzt hab ich endlich mal wieder Zeit (und Thread) gefunden um auf Dein Hilfeangebot zurückzukommen. Also, ich programmiere ausschließlich in Assembler. Die Quelldateien bekommen die Endung *.asm, die in der Source-Datei eingebundenen Dateien mit Beispielsweise Hilfsvariablen/konstanten (Registernamen, Bitpositionen, ...) haben bekanntlich die *.inc Endung. Das ist gleich wie bei C mit den *.c und *.h Dateien.

Wegen der vielen Banken (ich spreche hier nur vom Speicher), hat der Assembler Direktiven, mit denen der Assembler/Linker entscheidet, wohin dann schlussendlich damit (udata_shr, udata_ovr, .. direktiven). Wenn man keinen fixen Speicherplatz vorgibt, Entscheidet der Assembler über Platz. Um die Variable dann auch adressieren zu können, müsste vor jedem Zugriff ein "banksel" stehen. Das wiederum wird in zwei BSC/BCF Befehle umgewandelt => Programmspeicherfresser & Geschwindigkeitsbremser.

Ich möchte nun meine größeren Projekte sinnvoll gliedern. Dazu möchte ich "Library's" erstellen. Die Deklarationen kommen in die zugehörige *.inc-Datei. Tja, und blöderweise genau da hapert es dann, dort sieht man, dass das Speicherverwaltungskonzept noch nicht ganz so durchdacht ist. Ein weiteres Problem das ich habe ist es, teile von Interrupt-Routinen in eine Library auszulagern. Ausser den Code-Teil als Macro zu definieren, habe ich noch kein vernünftigeres Konzept gefunden.

Hoffe mich etwas klarer ausgedrückt zu haben.

Achja, kaum mal wieder aktiv, schon drängt sich der nächste Bug auf: Ich habe den Timer 1 an einen 32kHz Quarz gehängt (In MPLAB per SCL-emuliert). Wenn ich nun den Timer aktiviere und das zugehörige Pin im TRIS-Register nicht als Eingabe geschalten ist, wird das Signal nicht durchgereicht. Lt. Datenplatt sollte aber die Timer-Einstellung das TRIS-Bit überschreiben.
Draufgekommen bin ich, da ich einen "Kick"-Start eingebaut habe und die Kapazitäten vor timer-aktivierung lade (OSZ unstabil mache).

Gruß
Mario