Hallo liebe Gemeinde,
ich programmiere z.Z. in Assembler auf verschiedenen AVR und versuche
ein wenig Struktur ins Chaos zu bringen :)
kurze Frage:
wie löst ihr die Verwaltung der Interruptvektortabelle wenn ihr modular
programmiert?
etwas nicht ganz so kurze Erklärung:
Meistens wird die IVT schön übersichtlich an den Anfang des Programms
gestellt, gefolgt von Initialisierungen und dem eigentlichen
Programmcode mit allen Unterprogrammen, also sehr statisch,übersichtlich
und clean.
Entsprechend schlecht lassen sich Programmteile wiederverwenden, also
ist Kapselung/Modularisierung momentan für mich das Zauberwort.
Jetzt möchte ich z.B. Hardware modular abstrahieren und die Module bei
Bedarf includieren.
Alles bis dahin kein Problem, ausser wenn das Modul einen
Interruptvektor nutzt.
In dem Fall muss ich diesen manuell in die schöne Interruptvektortabelle
am Anfang eintragen und das finde ich nicht so toll.
Überlegungen zur Abhilfe:
-am Programmanfang mit der Direktive .org INT_VECTORS_SIZE den Speicher
frei halten und direkt in den Modulen mit .org die Sprungadresse zur
Interruptroutine in den jeweiligen Vector schreiben.
-irgendwelches Macro oder anderes Präprozessorgedöhns nutzen, wobei mir
da die Ideen/Erfahrungen fehlen....
Danke fürs lesen und evtl. Antwort :)
...der Peter, hat er wieder das Zauberkästle aufgemacht und mich einfach
nur verblüfft....wieso hab ich den wertvollen Beitrag nicht selber
gefunden!!*Kopfkratz*
Ich verneige mich zu tiefst und wünsche Dir eine besonders schöne Woche
:o)
Bestromer schrieb:> muss ich diesen manuell in die schöne Interruptvektortabelle> am Anfang eintragen
Warum nimmst Du nicht weak symbols, oder nochmal anders gefragt, warum
schreibst Du die überhaupt selber und wenns dafür nen Grund gibt warum
dann jedesmal neu?
Bernd K. schrieb:> Warum nimmst Du nicht weak symbols....
im Zusammenhang mit Assembler kann ich damit gerade nix anfangen,aber
ich werde mal Googeln...
> oder nochmal anders gefragt, warum schreibst Du die überhaupt selber...
In Assembler kümmert man sich so ziemlich um alles selber, ich kenne da
jetzt keinen anderen Weg?
> und wenns dafür nen Grund gibt warum dann jedesmal neu?
Jedes mal neu will ich sie ja nicht schreiben,sondern in den jeweiligen
Modulen die Initialisation vornehmen, deshalb meine Fragestellung :)
Bestromer schrieb:> Bernd K. schrieb:>> Warum nimmst Du nicht weak symbols....>> im Zusammenhang mit Assembler kann ich damit gerade nix anfangen,aber
Die weak Symbole werden vom linker ausgetauscht wenn er in irgendeinem
objekt file das selbe Symbol nochmal findet und es dort nicht als weak
markiert ist.
Mit der Gnu Toolchain sollte das gehen. Schau dir mal die oft in asm
geschriebenen startup files und vektortabellen für Arm Controller an, da
wird das genauso gemacht.
Hallo Bernd,
erst mal vielen Dank für Deine Anwort :)
Die Funktionsweise konnte ich schon erahnen, aber bei mir gibt es keinen
Linker, da ich direkt in Assembler programmiere und deshalb auch keine
Toolchain benutze.
Da gibt es nur den Präprozessor mit seinen paar Direktiven und eben den
Assembler...klingt ein wenig wie in der Steinzeit, in gewissen
sicherheitsrelevanten Bereichen oder kleinen Minimalsystemen ist das
aber noch gängige Praxis.
Projekte in C werde ich in Zukunft definitiv realisieren, da man dann
doch einen gewissen Komfort hat und sehr übersichtlich in Headerfiles
verankern kann.
Allerdings ist dies für mich Neuland, da ich bisher nur sehr
zeitkritische Dinge programmieren sollte wo der Code nachvollziehbar aus
einer Hand stammen musste und nicht durch Fremdmechanismen wie eine
Toolchain bearbeitet werden durfte.
Die Zeiten sind aber vorbei, denn die Entwicklungszeit spielt heute die
grössere Rolle....wobei man das aber auch sehr oft an der Qualität
mancher Produkte sieht ;)
Ich bin aber überzeugt, das man mit genug Hintergrundwissen über die
verwendete Toolchain und evtl. eingesetzter Bibliotheken auch sehr
zuverlässige Software entwickeln kann und dies mit den tollen Vorzügen
dieser Sprache.
LG Frank
@ Bestromer (Gast)
>ich programmiere z.Z. in Assembler auf verschiedenen AVR und versuche>ein wenig Struktur ins Chaos zu bringen :)>Die Funktionsweise konnte ich schon erahnen, aber bei mir gibt es keinen>Linker, da ich direkt in Assembler programmiere und deshalb auch keine>Toolchain benutze.
Einfache Lösung. Nimm C.
>Da gibt es nur den Präprozessor mit seinen paar Direktiven und eben den>Assembler...klingt ein wenig wie in der Steinzeit, in gewissen>sicherheitsrelevanten Bereichen oder kleinen Minimalsystemen ist das>aber noch gängige Praxis.
Bei Moby und seinen Spießgesellen, jaja ;-)
>Allerdings ist dies für mich Neuland, da ich bisher nur sehr>zeitkritische Dinge programmieren sollte wo der Code nachvollziehbar aus>einer Hand stammen musste und nicht durch Fremdmechanismen wie eine>Toolchain bearbeitet werden durfte.
Das sagen sie alle. Was für Steuerungen sollen das sein?
Wenn man taktgenau programmieren muss nimmt man meist
besserProgramierbare Logik in Form von CPLDs und FPGAs. Es gibt nur noch
sehr wenige Ausnahmen, die hand- und taktoptimierten Assmbler WIRKLICH
rechtfertigen.
>Die Zeiten sind aber vorbei, denn die Entwicklungszeit spielt heute die>grössere Rolle....
Na immerhin bist du noch erkenntnisfähig, im Gegensatz zu Moby.
>wobei man das aber auch sehr oft an der Qualität>mancher Produkte sieht ;)
Früher war alles besser ;-)
>Ich bin aber überzeugt, das man mit genug Hintergrundwissen über die>verwendete Toolchain und evtl. eingesetzter Bibliotheken auch sehr>zuverlässige Software entwickeln kann und dies mit den tollen Vorzügen>dieser Sprache.
In der Tat.
"Everything is easy with the right tool. But a fool with a tool is still
a fool."
Hallo Falk,
ja, diese Kriegsszenarien habe ich öfter amüsiert mitgelesen...für mich
als Leser und "Anfänger" stecken da viele Infos drin, auch wenn der Ton
manchmal etwas rau geworden ist...aber wir sind ja keine Mädchen :)
Grundsätzlich bin ich kein Verfechter von Assembler wobei mir gewisse
Dinge echt Spass gemacht haben, aber wirkliche Effizienz und Komfort bei
der Entwicklung ist eben auch eine verlockende Sache.
Ich bin gespannt auf die Kombination von beiden, damit kann man die
Vorzuge beider Sprachen nutzen...ich glaube das wird gut.
Danke für Deinen Beitrag ;)