Peter D. schrieb:
>
> Switch kann man auch in einer Schleife aufrufen.
Schon klar, mit Schleife brauche ich aber keine switch mehr und mit
switch keine Schleife.
> Du kannst Ports über deren Adresse ansprechen, nur wird das viel
> aufwändiger als ein Switch, da die Adressen 16bittig sind.
> Auch sind die Ports nicht hintereinander angeordnet, d.h. Du must Dir
> die Adresse erst aus einem Array der Portadressen holen.
> Bei nur 7 Case ist ein Switch daher schneller und weniger Code.
Dazu ein paar Fragen..
Genau das ist was ich machen will, warum meinst du sollte das mit
Schleife aufwändiger werden als switch? Wenn ich die Adressen in ein
Array packe kann ich das doch in der Schleife durchgehen,
dereferenzieren und ich hab was ich will? Ob 8 oder 16 Bit macht doch
keinen Unterschied, außer dass ich uint16_t* schreibe anstatt uint8_t*?
Eine switch kommt mir hier fehl am Platze vor, weil im Prinzip in jedem
Port die gleiche Operation erfolgt, nur mit unterschiedlichen Daten. Ich
hätte also 14x den gleichen Befehl anstatt 2x.
Was mich jetzt noch verwirrt: Die Adressen der meisten Ports haben 8
Bit. Erst ab Port H sind es mehr. Port H hat bspw. die Adresse 0x102. Am
Ende der Macro-Kette werden die aber alle gecasted auf (*(volatile
uint8_t *)(mem_addr)). Da wird doch die führende 1 abgeschnitten? Warum
dann überhaupt 0x102?