Bonjour à tous,

Je ne savais pas vraiment où poster cela, cela relève plus de comment (ré)organiser (ou pas) un projet qui va un peu grossir. Peut-etre qu'il n'y a pas de solutions ^^
J'ai développé un programme pour AVR avec 4 librairies, des fichiers de configuration ou de définition, répartie dans différents repertoires et sous répertoires (cela n'a peut etre pas beaucoup d'importances).

Actuellement, le programme supporte l'attiny85, l'attiny84 et l'AT Mega 168/328. Pour les parties spécifiques, j'utilise les options du precompileur à savoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
#if defined(__AVR_ATtiny85__)
[...]
#elif defined(__AVR_ATtiny84__)
[...]
#elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
J'ai ces "#if defined" dans un peu tous les fichiers à chaque fois qu'une partie est spécifique à tel ou tel AVR. Pour l'instant c'est encore à peu pret lisible même si je trouve que la multicompatibilité devient un peu lourd.

Là, je veux porter mon programme pour STM32 et cela devient un peu la merde ^^ Car si entre les AVR il y a beaucoup de points commun, pour le STM32 du peu que j'ai lu, il a ses propres caractéristiques. Si je prends la lecture interne de la tension, j'ai :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
uint16_t hwCPUVoltage(void)
    {
 
        // Measure Vcc against 1.1V Vref
    #if defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
        ADMUX = (_BV(MUX5) | _BV(MUX0));
    #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
        ADMUX = (_BV(MUX3) | _BV(MUX2));
    #else
        ADMUX = (_BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1));
    #endif
 
        delay(20);
 
        // Do conversion
        ADCSRA |= _BV(ADSC);  
        while (bit_is_set(ADCSRA,ADSC)) {}; 
 
        uint16_t Vcc = (1126400UL) / ADC;   //1.1V*1024
        powerADC(false);
 
        return Vcc;
    };
Cela devient :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
uint16_t hwCPUVoltage(void)
    {
#if defined(__AVR__)
        // Measure Vcc against 1.1V Vref
    #if defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
        ADMUX = (_BV(MUX5) | _BV(MUX0));
    #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
        ADMUX = (_BV(MUX3) | _BV(MUX2));
    #else
        ADMUX = (_BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1));
    #endif
 
        delay(20);
 
        // Do conversion
        ADCSRA |= _BV(ADSC);  
        while (bit_is_set(ADCSRA,ADSC)) {}; 
 
        uint16_t Vcc = (1126400UL) / ADC;   //1.1V*1024
        powerADC(false);
#elif defined(__STM32__)
 
[...]
Code spécifique STM32
[...]
#endif
        return Vcc;
    };
Et heu, là c'est un exemple simple sur quelques lignes, mais sur certaines librairies, j'ai quasiment tout à réécrire pour le passage en STM32 (entre autres l'utilisation des GPIO via les registres). Mon problème c'est que cela nuit pas mal à la lisibilité du code en rajoutant beaucoup de lignes "pour rien".
Ma question est donc : est-ce qu'il y a un moyen d'organiser tout cela pour que cela soit plus claire ? (j'ai un petit écran, cela parait con mais je ne peux afficher que 38 lignes), soit en exportant des morceaux de conditions (mais quid de l'organisation des fichiers ?) soit en ... ?

Je ne sais pas si je suis très clair

Question annexe, j'ai 2 fichiers, un de conf et un avec que des #define que j'utilise sur ce projet mais également un autre. Est-ce qu'il y a un moyen avec GIT de faire correspondre les deux pour avoir un suivi ?
En gros, projet1 et projet2 sont sur GITHUB, mais si j'update dans projet1, cela n'update pas dans projet2 (il faudrait comme un ln sous linux)

Merci, si ce n'est pas claire, je peux préciser sans problème.