Simulation microcontroleur PIC & MPLAB [C] - C - Programmation
Marsh Posté le 10-06-2011 à 19:11:14
Déja, ça:
Code :
|
c'est pas du C.
A+,
Marsh Posté le 10-06-2011 à 19:44:43
Pourquoi affirmes-tu une telle chose ?
Et si ce n''est pas du C, qu'est-ce?
Je précise que le compilateur compile parfaitement...
Marsh Posté le 10-06-2011 à 19:51:55
Parce que en C, main doit retourner un int. C'est la norme qui impose ça.
Et si des compilos laxistes acceptent des syntaxes non conformes, ce n'est pas une excuse pour les employer.
Citation : ISO/IEC 9899:1989 (C90):
|
Donc void main(...) c'est pas du C (ni du C++). C'est OK en java par contre.
A+,
Marsh Posté le 10-06-2011 à 22:11:48
Et quelle fonction pourrait traiter cette valeur de retour dans un microcontroleur? J'ai indiqué int comme type de retour et retourné 0. A la compilation :
Warning [2103] default startup code expects main function declared as 'void main (void)'
Je recite ta source :
Citation : If an implementation permits it, main can be declared in other ways, but this makes the program implementation defined, and no longer strictly conforming. |
En l'occurrence, on est précisément dans ce cas. Le problème ne vient donc pas de là.
Marsh Posté le 10-06-2011 à 22:26:08
Je n'ai pas dit qu'il venait de la, le problème.
La boucle infinie peut réécrite en plus court:
while (1) { PORTB = (PORTC)?0xF9:0x01; }
et inutile d'écrire des return; en dernière ligne de procédures void XXX()
A+;
Marsh Posté le 11-06-2011 à 00:20:02
Tu as l'air de vraiment tenir à faire du zèle, ça doit être un truc de modo (le prend pas mal je rigole ^^). Je suis loin d'être débutant en C, et j'ai mes habitudes, comme mettre les return pour les fonctions void x(). Je suis un peu puriste de ce côté là, je préfère que ce soit clair, je n'aime pas les choses implicites. Chacun fait comme il veut puisque effectivement, l'omission du return reste dans la norme. En ce qui concerne la boucle while, effectivement ton code marche parfaitement, mais je ne suis pas d'accord d'écrire aussi salement les choses, quitte à écrire plusieurs ligne, je préfère éclaircir le code. Et puis on peut écrire ton code encore plus court :
Code :
|
Et enfin ce n'est qu'un code de test, pas besoin d'optimisation donc.
En ce qui concerne mon problème , penses-tu qu'il puisse venir des bits de configuration du micro?
Marsh Posté le 11-06-2011 à 02:09:40
Citation : je n'aime pas les choses implicites |
Une parenthèse fermante finale de procédure ne retournant rien, je ne vois pas ce que ça a d'implicite.
Un return dans ce type de procédure, je n'ai rien contre en milieu de code, mais cela n'a aucune utilité en dernière ligne.
Citation : Et puis on peut écrire ton code encore plus court |
Non on ne peut pas écrire plus court, sans la définition de PORTC (que je n'ai pas) qui s'il est défini par un #define, peut faire foirer l'expression sans parenthèses.
Et je suis désolé, mais pour un programmeur C, et je suis très loin d'être un débutant en C, moi aussi,
Code :
|
c'est beaucoup moins propre (pas de parenthèsage autour des alternatives du if, même pour une instruction, c'est vouloir vivre dangereusement) et lisible que
while (1) { PORTB = (PORTC)?0xF9:0x01; }
qui lui est immédiatement transparent.
Citation : En ce qui concerne mon problème , penses-tu qu'il puisse venir des bits de configuration du micro? |
Pas la moindre idée, car le programme en C est correct. Le problème du plantage lors de l'ajout de
unsigned char a = 0x00;
provient probablement de spécificités liées au PIC 18F4450 ou au simulateur, que je ne connais pas.
A+,
Marsh Posté le 10-06-2011 à 16:20:39
Bonjour à tous,
je programme un PIC 18F4450 (pour faire de l'USB à terme), sous MPLAB, compilateur Microchip C18 ToolSuite. Voici le code de mon programme :
Je visualise simplement sur le port B l'état du port C (j'affiche 0 ou 1 sur l'afficheur 7 segments). Je simule le fonctionnement sur le PROTEUS Profesional 7.4 :
Comme vous pouvez le voir, tout va bien. Seulement, quand je décommente la ligne 7 (unsigned char a = 0x00; ), Proteus me sort l'erreur suivante :
Avez vous une idée d'où peut venir ce problème?
Merci d'avance
---------------
http://www.microcontest.com - Site de challenges de programmation : Cryptographie - Multimedia - Intelligence Artificielle - Réseaux - Algorithmique - Mathématiques