[C] programmation de pics sous linux

programmation de pics sous linux [C] - C - Programmation

Marsh Posté le 26-06-2005 à 19:43:59    

salut tlm !!
 
 
j'ai quelques problèmes avec le compilateur sdcc
 
les memes instructions ne donnent pas le meme resultat dans le main que dans une fonction
 
par exemple :  
 

Citation :

#define __16f877
#include"16f877a.h"
 
#define bitset(var , bitno) ((var) |= 1 << (bitno)) //macro pour mettre le bit bitno du port var à 1 sans changer les autres bits
#define bitclr(var , bitno) ((var) &= ~(1 << (bitno))//macro pour mettre le bit bitno du port var à 1 sans changer les autres bits
 
void test(unsigned char ttest); // fonction de test
 
unsigned unsigned char i,j,k; // je suis obligé de déclarer mes variables en globale autrement sdcc les déclare hors de la memoire disponible
void main(void) {
   
        TRISB = 0;
 PORTB = 0x0;
        while(1) {
  for (k=0; k<8;k++)
  {
         // mise à 1 du bit k du port B
  //bitset(PORTB,k);// <= ces 2 instructions
  test(k);          // <=  
 
  for (i = 0; i < 250; i++) // tempo pour avoir le temps de voir ce qui se passe sur le port
  for (j = 0; j < (250); j++)
  _asm nop; nop;_endasm;
 
  PORTB = 0x0; // remise à 0 de tous les bits du port
 
  for (i = 0; i < 250; i++)// tempo pour avoir le temps de voir ce qui se passe sur le port
  for (j = 0; j < (250); j++)
  _asm nop; nop ;_endasm;
  }
         
 }
}
void test (unsigned char ttest){
 bitset(PORTB,ttest); // mise à 1 du port ttest du portB
}
 


 
quand bitset est appelé depuis le main j'obtient bien une mise à 1 du bit k dans le portB
alors que quant bitseet est appelé depuis la fonction test j'obtient toujours uen mise à 1 du bit 2 du portB
 
 :hello:


Message édité par raptor13 le 27-06-2005 à 14:13:43
Reply

Marsh Posté le 26-06-2005 à 19:43:59   

Reply

Marsh Posté le 27-06-2005 à 11:23:45    

personne ? :sweat:

Reply

Marsh Posté le 27-06-2005 à 11:52:20    


ben le code de ton post est illisible et incompréhensible:

  • indentation pourrie
  • pas de commentaire
  • tu "void" ton main
  • variables temporaires foutues en globales, macro...


Si tu (ou quelqu'un d'autre) reprend ton programme dans quelques temps, tu crois que çà va se faire en passant une demi heure à le décortiquer comme un vestige de l'egypte ancienne ou le foutre à la poubelle et passer un quart d'heure à le refaire proprement?  
Bref, fait un effort si tu veux que les autres en fassent aussi  :o

Reply

Marsh Posté le 27-06-2005 à 14:17:46    

manatane a écrit :

ben le code de ton post est illisible et incompréhensible:

  • indentation pourrie
  • pas de commentaire
  • tu "void" ton main
  • variables temporaires foutues en globales, macro...


Si tu (ou quelqu'un d'autre) reprend ton programme dans quelques temps, tu crois que çà va se faire en passant une demi heure à le décortiquer comme un vestige de l'egypte ancienne ou le foutre à la poubelle et passer un quart d'heure à le refaire proprement?  
Bref, fait un effort si tu veux que les autres en fassent aussi  :o


 
 
désolé pour les comentaires mais je ne pensait pas reprendre ce programme plus tard c'est juste un programme de test.
mais c'est vrais que je n'ai pas pensé aux lecteurs du forum.
 
sinon mon main est void car il n'est pas censé renvoyer de valeurs vu que sur un microcontroleur ne dois pas sortir du main.
 
mes variables temporaires sont foutues en globales car autrement sdcc les déclare hors de la memoire disponible.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed