Braiman
Messages postés4Date d'inscriptionmardi 1 juillet 2003StatutMembreDernière intervention22 décembre 2007 22 déc. 2007 à 15:53
Recemment, j'ai programmé un microcontroleur pour qu'il gère un LCD. J'ai donc regardé ta source avec intéret.
Plusieurs choses me gène dans le code. Par exemple ta fonction convert, elle n'est utilisée nul part. Et puis la suite de if dedans n'est pas très belle. J'aurais plutôt mis dedans un truc du genre :
if (n >= 0 && n <=9) return n + 48;
return 0;
La fonction right n'est pas géniale non plus. Utilise plutôt l'opérateur modulo : return x % 10;
Pour la fonction left j'aurais aussi utiliser le modulo :
// suppression du chiffre des unités : x - (x % 10) ou x - right(x) pour utiliser ta fonction
// puis on divise par 10 ==> on obtient 0, 1, 2, ...
x = (x - (x % 10)) / 10;
// x est des secondes, minutes ou heures ==> sauf erreur jamais négatif et pas au dessus de 59
// donc on retourne x, ça devrait suffire.
return x;
Quand je programmais avec des outportb, j'utilisais des #define qui aide à comprendre ce qui est fait. Par exemple :
#define LPT1_DATA 888 //Adresse du bus de données
#define LPT1_STATE 889 //Adresse du registre d'état
#define LPT1_CONTROL 890 //Adresse du registre de controle
...
outportb(LPT1_CONTROL, 0x06); // ==> on voit tout de suite qu'on écrit dans le registre de controle
D'ailleur j'en profite pour poser une petite question : outportb n'est elle pas obsolete ? Cette fonction ne fonctionne plus très bien sous XP non ?
22 déc. 2007 à 15:53
Plusieurs choses me gène dans le code. Par exemple ta fonction convert, elle n'est utilisée nul part. Et puis la suite de if dedans n'est pas très belle. J'aurais plutôt mis dedans un truc du genre :
if (n >= 0 && n <=9) return n + 48;
return 0;
La fonction right n'est pas géniale non plus. Utilise plutôt l'opérateur modulo : return x % 10;
Pour la fonction left j'aurais aussi utiliser le modulo :
// suppression du chiffre des unités : x - (x % 10) ou x - right(x) pour utiliser ta fonction
// puis on divise par 10 ==> on obtient 0, 1, 2, ...
x = (x - (x % 10)) / 10;
// x est des secondes, minutes ou heures ==> sauf erreur jamais négatif et pas au dessus de 59
// donc on retourne x, ça devrait suffire.
return x;
Quand je programmais avec des outportb, j'utilisais des #define qui aide à comprendre ce qui est fait. Par exemple :
#define LPT1_DATA 888 //Adresse du bus de données
#define LPT1_STATE 889 //Adresse du registre d'état
#define LPT1_CONTROL 890 //Adresse du registre de controle
...
outportb(LPT1_CONTROL, 0x06); // ==> on voit tout de suite qu'on écrit dans le registre de controle
D'ailleur j'en profite pour poser une petite question : outportb n'est elle pas obsolete ? Cette fonction ne fonctionne plus très bien sous XP non ?