2010-05-05 7 views
1

Je programme sur un microprocesseur (Coldfire) et je n'ai pas accès tous les jours au microprocesseur, donc je veux pouvoir exécuter une partie de mon code sur l'ordinateur.Le préprocesseur ne saute pas les directives asm

Donc j'essaie d'ignorer une partie de mon code lors de l'exécution sur l'ordinateur en définissant TEST.

Cela ne fonctionne pas. Il essaie de compiler le code asm et meurt en pleurant de ne pas connaître les noms des registres (ils sont bien définis en compilant contre le Coldfire, pas mon Intel Core Duo).

Des idées pour lesquelles cela ne fonctionne pas? ou peut-être une autre façon d'exécuter le code sur le PC sans le commenter ?.

est ici un exemple de code de mon projet:


inline void ct_sistem_exit(int status) 
{ 
#ifdef _TEST_ 
    exit(status); 
#else 
    asm volatile(
      "moveb #0,%%d1\n\t" 
      "movel #0, %%d0\n\t" 
      "trap #15\n\t" 
      : 
      : 
      : "d0", "d1" 
      ); 
#endif /* _TEST_ */ 
} 

Si elle aide: l'aide gcc3 avec Cygwin sur Netbeans 6.8

Et la façon dont je suis la définition _TEST_:



#define _TEST_ 
#include "mycode.c" 

int main(int argc, char** argv) 
{ 
    ct_sistem_exit(0); 
} 
+0

Comment définissez-vous '_TEST_'? Il semble que cela devrait fonctionner si ce symbole est défini correctement. Vous pouvez essayer de mettre "#define '_TEST_' 1" juste avant cette fonction pour vous assurer que cela fonctionne. Vous pouvez également essayer un nom différent au cas où '_TEST_' est utilisé pour autre chose. – WildCrustacean

+0

J'ai essayé de définir _TEST_ juste avant la fonction, comme vous l'avez dit, mais cela provoque de drôles d'erreurs sur mon code. Je vais ajouter à la question comment j'ai défini _TEST_ – demula

Répondre

1

La question évidente est-ce que vous avez défini _TEST_? Vous pouvez le faire sur la ligne de commande avec -D_TEST_.

Je peux compiler votre code quand je le définis.

+0

Vous avez raison! Je n'ai pas. Je compilais un autre fichier qui importait ce code et bien que j'ai défini _TEST_ avant de l'inclure, il n'était pas défini lors du traitement du code (je ne sais pas pourquoi ...). Outre l'option de ligne de commande que je viens de découvrir que Netbeans vous permet de définir avant le traitement: Exécuter> Définir la configuration du projet> Personnaliser ...> compilateur C> préprocesseur Définitions Merci beaucoup! – demula

0

Vous ne devriez normalement pas utiliser les noms de symboles commençant par le trait de soulignement. Ceux-ci sont réservés à l'utilisation par le compilateur et les bibliothèques standard. Il est probable qu'il y ait déjà un TEST défini quelque part. Cela devrait être assez facile à vérifier, cependant.

Vous pouvez essayer d'utiliser #warning pour savoir quand vous construisez pour la machine de test, ce qui vous aidera à tester que le préprocesseur fonctionne comme prévu.

+0

_TEST_ n'a été utilisé par personne bien que je garde à l'esprit les traits de soulignement. Conseil #warning ajouté! Merci beaucoup pour les astuces – demula

Questions connexes