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.