Hallo,
ich suche eine elegante Möglichkeit, die mir eine Zuordnung eines
Portpins zu einem Signalnamen macht und sich auch bei der
Initialisierung um die richtige Einstellung der Datenrichtung und
Pullups kümmert. Hintergrund ist, dass ich bei einer Hardwareumstellung
wieder einige Schusselfehler drin hatte, die einiges an Zeit und Nerven
gekostet haben. Meine Idealvorstellung wäre, dass die Signaldefinition
mit einer Zeile passiert, um Fehler bei der Konfiguration zu minimieren.
Aus dieser Signaldefinition soll sich alles weitere ableiten lassen. Man
könnte das mit einer großen Tabelle machen. Allerdings kostet das
Laufzeit. Besser wäre, der Präprozessor würde aus einer Signaldefinition
die entsprechenden Makros ableiten. Genau an dieser Stelle zermatere ich
mir seit Wochen das Hirn und komme nicht weiter. Ich habe mir auch schon
die Finger wund gegoogelt, allerdings scheint niemand mein Problem zu
haben.
Wie würdet Ihr das angehen, bzw. welche Lösungen benutzt Ihr in Euren
Projekten?
Gruß Matthias
Hallo,
inwiefern kann es mein Problem lösen?. Ich brauche dann immer noch pro
Signal eine Definition für den Port, eine für das Bit und eine für das
Datenrichtungsregister. Mir schwebt so etwas vor:
#define SIGNAL ... (kreiere alle Makros)
Initialisierung:
for(all Signals)
{
Init DDR;
Init Pullup;
}
im Code:
Signal = ...
if(Signal)
{
...
}
Gruß Matthias
Ein paar Dinge bevor ich eine Lösung skizziere.
Die Idee ist scheiße. Ich habe den Müll nicht mal durch den Compiler
gejagt. Wer ihn haben will darf ihn selber zum Laufen bringen. Ich werde
dazu keine Fragen beantworten, ich will davon nichts wissen.
man muß dann halt nur aufpassen, daß man Input und Output nicht
verwechselt (daher in der hardwaredef.h danach sortiert) und die
Portzuordnung stimmt.
Man könnte das noch nach den Ports aufdröseln, indem man für jeden
Input/Output noch den Port definiert, aber dann finde ich das etwas
unübersichtlich.
Für mich ist dies so ein guter Kompromiss.
Gruß
Andy
Danke für die vielen Anregungen. Sie decken sich im Wesentlichen mit
meinen Überlegungen. Scheinbar braucht man minimum zwei Stellen im Code,
um zum einen die Makros für den Zugriff und zum Anderen die Init zu
bewerkstelligen. Diese Stellen müssen immer konsistent sein und da ist
schnell mal ein Fehler passiert.
@Hannes Jaeger
Letztendlich hast Du auf kompliziertem Weg eine Struktur gebaut. Wenn
man daraus noch die Makros für den Zugriff ableiten könnte, wäre das der
Stein der Weisen.
Danke nochmals für die vielen Hinweise
Gruß Matthias