Forum: PC-Programmierung Präprozessor und Konfigurationsbasierte Typengenerierung


von dotm (Gast)


Lesenswert?

Hallo Forum.
Ich hab gerade folgendes Problemchen:
Ich will für mein RTOS-basiertes CortexM4 Programm meine ADC Routinen 
refaktorieren. Tatsächlich brauch ich für jeden Kanal der in 
Verwendung ist ein Mutex.
Ob ein Kanal verwendet wird sagt mir die Konfigurationsdatei mit 
USE_ADC_X , wobei X die Kanalnummer ist.
Ich will natürlich um den Speicher zu schonen nicht jetzt 18 (soviele 
Kanäle sinds) Mutex-Ids erzeugen.
Meine Struktur dazu schaut jetzt so aus:
1
#ifdef USE_ADC1
2
  osMutexId adc_ch1_mutex_id;
3
#endif /* USE_ADC2 */
4
5
#ifdef USE_ADC2
6
  osMutexId adc_ch2_mutex_id;
7
#endif /* USE_ADC2 */
8
9
#ifdef USE_ADC3
10
  osMutexId adc_ch3_mutex_id;
11
#endif /* USE_ADC3 */
12
13
// et cetera et cetera...

Und das ist noch nichtmal alles, in der Initialisierungsroutine würde 
sich das ähnlich wiederholen..
Copypaste von der schlimmsten Sorte, nochdazu was wenn ich plötzlich 
noch eine zweite Variable pro Kanal erzeugen muss z.B.
1
 
2
int16_t ch1_kalibration_irgendwas;
Dann müsste ich die 18mal hinzufügen. Wie kann ich das verbessern? Kann 
ich das ganze mit einem Präprozessormakro erzeugen lassen zb
1
#define ADC_GENERATE_VARS(x)          \
2
#ifdef USE_ADC(x)                     \
3
  osMutexId adc_ch(x)_mutex_id; \ 
4
#endif /* USE_ADC(x) */               \
Ich befürchte nein weil Präprozessoranweisungen in einem Makro 
vorkommen.
Ausserdem was wenn ich pro erzeugten Variablen auch Javadoc generieren 
will? Kann ich die Javadocs auch in die Makros reinschreiben und wird 
das Makro dann von Doxygen aufgelöst? z.B.:
1
#define ADC_GENERATE_VARS(x)                                 \
2
#ifdef USE_ADC(x)                                            \
3
  osMutexId adc_ch(x)_mutex_id; /**< Mutex for ch(x)   \ 
4
#endif /* USE_ADC(x) */                                      \
Ich befürchte nicht!
Grüsse
M.

von dotm (Gast)


Lesenswert?

Beim letzten Codevorschlag hab ich übrigens vergessen das Doxygen 
comment wieder zu schliessen.

von dotm (Gast)


Lesenswert?

Eventuell ist der Titel nicht ganz korrekt, besser wäre:
konfigurationsbasierte *Variablengenerierung*
Ist auch rechtschreibtechnisch besser.

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.