Forum: Mikrocontroller und Digitale Elektronik 2-D Array deklarieren und definieren mit Enum in #C


von Mach F. (machfax)


Lesenswert?

Ich möchte ein 2-Dimensionales Array über Enum Zugriff deklarieren und 
definieren.
1
typedef enum
2
{
3
LED_TEST1,
4
LED_TEST2,
5
} LED_t;
6
7
typedef enum
8
{
9
Port1,
10
Port2,
11
} Port_t;
12
13
static uint32_t led_port_map[2][2] = 
14
{{
15
.[Port1].[LED_TEST1] = 1,
16
.[Port2].[LED_TEST1] = 1,
17
}};
18
19
....

Wie muss das aussehen, damit es funktioniert? Danke

: Bearbeitet durch User
von Johannes K. (krjdev)


Lesenswert?

Sorry, wenn ich nur auf StackOverflow verweise...

https://stackoverflow.com/questions/45743255/how-do-i-declare-a-2d-array-of-enum-in-c

Hilft dir das weiter?

EDIT:
Zugegeben hab das selber in C# noch nie verwendet und kannte auch das 
[Flags] Attribut nicht.

Im übrigen gibt es das Schlüsselwort typedef nicht in C#...

Normale Verwendung von Enums in C# ist so...
1
public enum LED
2
3
{
4
5
LED_TEST1 = 0,
6
7
LED_TEST2 = 1,
8
9
};
10
11
public enum Port
12
13
{
14
15
Port1 = 0,
16
17
Port2 = 1,
18
19
};
20
21
static uint32_t led_port_map[2][2] = 
22
23
{{
24
25
.[Port.Port1].[LED.LED_TEST1] = 1,
26
27
.[Port.Port2].[LED.LED_TEST1] = 1,
28
29
}};

Würde hier deshalb bei den Enums die Werte festlegen, weil ich nicht 
sicher bin ob der C# Compiler und die .NET Runtime tatsächlich bei Enums 
bei 0 beginnt.
1
public enum LED
2
3
{
4
5
LED_TEST1 = 0,
6
7
LED_TEST2 = 1,
8
9
};

: Bearbeitet durch User
von Mach F. (machfax)


Lesenswert?

Ja Danke, ist aber noch nicht genau das wonach ich suche. Die 
Problemstellung ist folgende:
Ich habe ein Code mit 2 unterschiedlichen Pin-Maps (uin32_t für Pin)
Jetzt möchte ich entsprechend der Hardware Revision über eine Tabelle 
die IO-Pins initialisieren.
Vorher verwendete ich hardcoded:
1
#define   NRF_GPIO_PIN_MAP(port, pin)   (((port) << 5) | ((pin) & 0x1F))
2
#define LED_RED             NRF_GPIO_PIN_MAP(1, 4)
3
//HardwareRev2
4
#define LED_RED             NRF_GPIO_PIN_MAP(1, 5)
5
6
...
7
nrf_gpio_cfg(LED_RED & 0x1F,
8
               NRF_GPIO_PIN_DIR_OUTPUT,
9
               NRF_GPIO_PIN_INPUT_DISCONNECT,
10
               NRF_GPIO_PIN_NOPULL,
11
               GPIO_PIN_CNF_DRIVE_S0S1,
12
               NRF_GPIO_PIN_NOSENSE);

Über ein einlesen einer ADC Spannung (Hardware-Revision) möchte ich nun 
anstatt den #defines eine vordefinierte Tabelle auslesen.

: Bearbeitet durch User
von Johannes K. (krjdev)


Lesenswert?

Wollte meinen Beitrag noch editieren, konnte das aber nicht mehr. Da du 
typedef und uint32_t verwendet hast...

Reden wir hier von C# oder C?

Ich hab halt deine Frage für C# verstanden.

: Bearbeitet durch User
von Mach F. (machfax)


Lesenswert?

In C sorry. Für ein nRF52 "herkömmlicher" C Code

von Klaus W. (mfgkw)


Lesenswert?

Lesbare Sätze statt hingerotztem Gestammel würden die Diskussion 
effizienter gestalten.

von Mach F. (machfax)


Lesenswert?

sehr hilfreich danke

von Klaus W. (mfgkw)


Lesenswert?

Mach F. schrieb:
> sehr hilfreich danke

Ich gehe mal davon aus, daß du es ironisch meinst und dich nicht 
wirklich bedankst. Musst du auch nicht.

Aber ich meinte meinen Satz ernst, und eigentlich auch hilfreich.
Bei deiner Frage muß man erst einige Zeit nachdenken, worum es geht, und 
dann trotzdem noch ein paar Male nachfragen, was du vorhast.
Von wem verlangst du das? Von jemandem, der halbwegs Ahnung hat? Der hat 
was besseres zu tun...

Mit so einer "Frage" bekommst du eher Antworten von Leuten, die aus 
Langeweile hier herumhängen. Ob die dir eine große Hilfe sind? (*)

Ich helfe gerne hier mal. Aber wenn jemand sich nicht mal die Mühe macht 
sein Problem halbwegs verständlich zu beschreiben und ich erst 
stundenläng rätseln muß, worum es eigentlich geht und ob ich die nächste 
tolle Programmiersprache #C verpasst habe, stecke ich nicht mehr Arbeit 
in eine Antwort als der Frager in die Frage.

Mein Kommentar war also durchaus konstruktiv gemeint.
Mach was draus oder sei beleidigt, ist deine Sache.


P.S.: Mit (*) wollte ich nicht Johannes K. ans Bein pinkeln.
Du hast dich dankenswerterweise redlich bemüht, bist aber in die gleiche 
Falle getappt wie ich auch anfangs und wohl jeder.
Im Nachhinein leider verschwendete Zeit...

Deshalb meide ich es mittlerweile, bei solchen Fragen den Kern zu 
suchen.

Daß ich jetzt überhaupt das hier schreibe, liegt daran daß machfax schon 
öfter hier was gefragt hatte.
Vielleicht will er ja auch mal was davon haben.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.