programmation de pics sous linux [C] - C - Programmation
Marsh Posté le 27-06-2005 à 11:52:20
raptor13 a écrit : personne ? |
ben le code de ton post est illisible et incompréhensible:
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
Marsh Posté le 27-06-2005 à 14:17:46
manatane a écrit : ben le code de ton post est illisible et incompréhensible:
|
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.
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 :
#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
Message édité par raptor13 le 27-06-2005 à 14:13:43