Ich frage mich, ob es möglich ist, etwas wie eine Reihe von Makros zu erstellen. Ich habe den folgenden Code implementiert, die funktioniert:Array von Makros in c - ist es möglich
struct led_cmds_
{
ioport_pin_t *commands[LED_COUNT] ;
} ;
struct led_cmds_ the_led_cmd_ ;
void populate() {
the_led_cmd_.commands[0] = SPECIFICPIN(0);
}
und in Haupt:
int main(void)
{
//.....
populate();
LED_On(the_led_cmd_.commands[0]);
}
SPECIFICPIN (x) Makro definiert als:
#define SPECIFICPIN(X) (LED##X##_PIN)
Was denn ich hatte gehofft, ist ein Weg zu einem Weg, so etwas zu tun:
#define ioport_pin_t* ARR_LED[LED_COUNT] \
for (int j = 0; j < LED_COUNT; j++) ARR_LED[j] = SPECIFICPIN(j);
und dann nur noch die folgenden rufen, wenn ich
LED_On(ARR_LED[some_number])
den spezifischen Stift verwenden möchten, wenn ich versuchen zu tun, dass ich ein ARR_LED bekommen nicht deklarierte Fehler (erste in dieser Funktion).
Wenn ich versuche, SPECIFICPIN zu nennen (x), wobei x einen int Iterator in einem zum Beispiel für Schleife ist, erhalte ich eine Fehlermeldung, dass so etwas wie ‚LEDx_PIN‘ nicht angemeldete ...
Sie wissen nicht, ob Sie den gcc-Toolchain verwenden, aber Sie müssen C99 verwenden für avr-gcc (und es ist die Unterstützung Bibliotheken) sowieso - in der Regel mit -Os kombiniert. Warum nicht bei Inline-Funktionen bleiben? –
Der Compiler weiß nichts über Makros, weil sie vor dem Aufruf des Compilers durch den * Präprozessor * ersetzt werden. Daher ist ein Array von Makros unmöglich –
Warum sollten Sie bei der Arbeit mit Hardwareregistern ein Array von Zeigern wünschen?Das ist fischartiger Code. – Lundin