Präprozessor und Konfigurationsbasierte Typengenerierung

Gast #3762618
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.