-
Ja, die drei Register für ein IO port sind immer gleich aufsteigend hintereinander
+0 PINx
+1 DDRx
+2 PORTx
Bei inGet(...) gibt es nur ein theoretisches Risiko: die Zeit zwischen Pullup einschalten und Pin abfragen ist sehr kurz, ev. ist da noch kein stabiler Zustand auf der Leitung (von wegen Kapazitäten etc.).
-
wie lange sollte man den elektonen zeit geben?.. mehrere nops?..
muss man das PIN register übergeben oder kann man in die Funktion auch den Port übergeben?
bspw: outSet((IO_REG*)&PORTB, 3, inGet((IO_REG*)&PORTB,2,1) );
-
ok.. hat sich erledigt.. da sie aufeinanderfolgend sind sollte das erste übergeben werden. also PINA.. dann ist das nächste DDRA..
-
du kannst natürlich auch den PORT übergeben, dann musst du halt in deiner Funktion ein wenig umrechnen...
D.h. am Anfang von inGet und outSet musst du noch port -= 2; schreiben.
Dann musst du allerdings auch wirklich immer &PORTx übergeben.
-
Dann ist die Sache aber nicht mehr wirklich koscher. denn dann ist ja das funktions-argument nicht wirklich korrekt. Und das wiederum betrachte ich als "bäh", andere stören sich mehr an Warnings
Ich glaube schon, dass man sich daran gewöhnen kann, immer "PINx" zu verwenden.
-
genau so mache es ich jetzt auch.
Warnings sind halt "unschön" manche kann man zwar ignorieren aber mir ist es immer lieber wenn da steht das er mit 0 warnings compiliert hat ;)