Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Erich, > > > da es mir ein Rätsel ist, was es mit diesem "Offset" bei den interrupt-Routinen auf sich hat, bitte ich > > euch um Rat. > > "Offset" ist einfach die Einsprungadresse an der die Routine liegt. > Der Zulässige Wert ist 0 bis 65534. (nur gerade Werte) > Der nächste Parameter ist das Segment, in dem die Interrupt-System-Routine liegt. > I.d.R. sind die Segmente 1, 2 und 3 möglich. Allerdings kann man kleine Routinen > auch im RAM ablegen und von dort ausführen. Einerseits im MCU-RAM in Segment 0, > andererseits auch im SRAM, welches Segment 8 darstellt. > > > Wie komme ich auf die Adresse einer Variable, damit ich sie in einer Assembler-Routine > > inkrementieren kann? > > Wenn Du nur eine Variable inkrementieren willst, ist es reichlich umständlich, dafür > eine extra Interruptroutine zu schreiben. Zumal das OS dies bereits integriert hat. > Mit <code>ports.getcount()</code> kannst Du ganz bequem einzeln > die vier Counter-Ports auslesen: > <code>int counter; > > counter=counter+ports.getcount(0); // Counter 0 Abfragen (P1H.0) > </code> > > Was die Parameterübergabe angeht, so ist die einfachste Möglichkeit > die über den Rechenstack. Dazu gibt es ein kleines Bsp. unter "Assembler". > Alternativ kannst Du Dir dazu z.B. den Quellcode von den Systemtreibern > sys0001 und sys0002 ansehen. > > Etwas anders sieht es aber bei interruptroutinen aus. > Hier benutzt Du am besten freie Bereiche des Bit-Adressierbaren Bereichs > des Controller-internen RAMs. > Der Bereich 0xFD01 bis 0xFDFD (Segment 0) kann problemlos genutzt werden. > Mit den VM-Codes VM_STORE_ABSOLUE_INT und VM_LOAD_ABSOLUTE_INT > kann darauf problemlos aus C2 heraus zugegriffen werden. > (genauso sind auch Byte-und und Long-Zugriffe mit den entspr. VM-Codes möglich. > Bei allen Zugriffen, außer Byte, muß die Speicheradresse geradzahlig sein.) > <code> > function readFD02() returns int > { > inline vmcodes.VM_LOAD_ABSOLUTE_INT; > inline 0xFD02; > } > > function writeFD02(int value) > { > inline vmcodes.VM_STORE_ABSOLUTE_INT; > inline 0xFD02; > }</code> > > Es gibt noch einen Bereich mit 100 Byte, welcher aber für > Flash Schreib-und Leseoperationen genutzt wird. Somit auch vom Modul flash.c2 . > Darum gehe ich auf diesen Bereich nicht näher ein. > > > Wie schaffe ich mehr als nur eine Interrupt-Assembler-Routine? > > Indem Du einfach mehrere Routinen schreibst und sie mit <code>system.hook()</code> > an die verschiedenen Events hängst. > > > Dass man das > > mischen muss ist ja wirklich eine Schwäche am ganzen C-Control-System. Sollte man vielleicht einen > > anderen Controller wählen? Ich bin etwas verzweifelt, muss ich sagen. > > Also genau das ist eher eine Stärke, als eine Schwäche. > Daß Du das siehst kann ich beim besten Willen nicht nachvollziehen. > Das beste wird wohl sein, daß Du zu aller erst das Handbuch zur Hand nimmst, > und die Kapitel 1 bis 4 liest. > > > Das Hauptproblem, was ich immer wieder erlebe, ist einfach das, daß immer wieder > die Leute weigern Handbücher zu lesen, oder diese wenigstens zum Nachschlagen > zu benutzen. > Es geht eben nicht, daß man den Controller einfach anschließt und ein bißchen > irgendetwas schreibt und schon funzt alles, ohne vorher die Grundlagen anzueignen. > Wenn jemand dazu nicht bereit ist, braucht er sich mit µController erst > garnicht zu beschäftigen > > MfG André H.