Je travaille dans un micro-contrôleur en utilisant la langue Nous définissons le service d'interruption réel Routine ailleurs et utilisez le pointeur de fonction (comme Il serait pratique si les interruptions pouvaient être définies à l'aide d'une macro. Je veux faire définir une macro de la manière suivante: p> Le compilateur lancer l'erreur suivante: p> indiquant la ligne suivante : P> #pragma code> en suivant:
isr_p00 code> dans l'exemple) pour les exécuter. p>
static void _int_##INT_NAME() { (*isr_##INT_NAME)(); }
3 Réponses :
Un travail de travail consiste à utiliser la génération de code ou une autre macro-language pour prépraper votre code. P>
IE Écrivez le code avec une extension différente. P>
Avez votre rôle de maquillage ou votre appel similaire la macro language (E.G. M4) ou un script de quelque forme que ce soit pour générer un fichier .C p>
puis compilez cela. p>
Vous recherchez une solution qui n'invoquera pas d'autre script.
Autant que je sache, ce que vous êtes Le compilateur ne reconstitue pas la sortie du préprocesseur. Chaque jeton de prétraitement devient un jeton de compilateur. p>
blockQuote>
J'ai aussi pensé que c'est impossible. Mais je me demande si vous pouvez atteindre une autre façon.
C99 a le nouveau mot clé Si votre compilateur ne supporte pas cela (GCC fait) et que vous iriez une implémentation externe de ce dont vous avez besoin (comme indiqué, _pragma code> qui vous permet de placer
#pragma code> à l'intérieur de macros. Fondamentalement, il s'attend à une chaîne comme argument qui correspond au texte que vous auriez donner à la directive
#pragma code>. P>
m4 code> pourrait être un choix) le meilleur serait probablement Pour rester aussi proche que possible de ce non-nouveau
_pragma code>. Ensuite, une fois que votre constructeur de compilateur attire la standard, vous pouvez simplement arrêter d'utiliser votre script. P>
Le compilateur ne prend pas en charge _pragma. :(
@Donotalo, dommage. Il est que 11 ans maintenant que cette norme existe ;-) Vous pouvez essayer une solution mixte en utilisant simplement gcc code> comme pré-processeur, puis en utilisant votre compilateur natif pour les étapes suivantes de la compilation.
Quel microcontrôleur et quel compilateur? Si elle est basée sur GCC, il peut y avoir un attribut spécial macro yo peut utiliser, comme dans la micropuche C32:
void __isr (_timer_5_vector) quelqueisr (vide) code>
Le micro est OKI 431 et le compilateur provient de OKI: IDEU8.