Ich habe mal den genialen Tip bekommen, für den schreibenden Zugriff auf 
einzelne I/O Pins bei AVR Makros zu verwenden:
| 1 | #define writeBit(port,bit,value) { if ((value)>0) (port) |= (1<<bit); else (port) &= ~(1<<bit); }
 | 
Dieses Makros kann der Compiler wunderbar optimieren, wenn bit und value 
Konstanten sind. Aus "writeBit(PortA,3,1)" wird zum Beispiel "PortA|=1".
Aber Makros finde ich häßlich, vor allem wirken sie sich auf 
Fehlermeldungen störend aus. Wenn ich sie intensiv nutze, meldet mir der 
Compiler in Fehlermeldungen oft (aber komischerweise nicht immer) 
falsche Zeilen Nummern.
Deswegen erwäge ich, lieber Funktionen/Prozeduren zu verwenden. Aber 
dann klappt die Optimierung nicht mehr so gut, oder doch?
| 1 | void writeBit(??? port, uint8_t bit, uint8_t value) {
 | 
| 2 |   if (value>8)
 | 
| 3 |     port |= (1<<bit);
 | 
| 4 |   else
 | 
| 5 |     port &= ~(1<<bit);
 | 
| 6 | }
 | 
Wie kann ich das so verbessern, dass sowohl der Funktionsaufruf als auch 
der if-Ausdruck weg optimiert werden, sofern bit und value Konstanten 
sind?
Und was gehört an der Stelle ??? hin?