printf("===2%i:%2i:%2i:%3l===n",t.hh,t.mm,t.ss,t.xx) me donne
=== 0: 0: 0:== de même que printf("===2%i:%2i:%2i:%l===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%3s===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%s===n",t.hh,t.mm,t.ss,t.xx)
printf("===2%i:%2i:%2i:%3l===n",t.hh,t.mm,t.ss,t.xx)
me donne
=== 0: 0: 0:==
de même que
printf("===2%i:%2i:%2i:%l===n",t.hh,t.mm,t.ss,t.xx)
printf("===2%i:%2i:%2i:%3s===n",t.hh,t.mm,t.ss,t.xx)
printf("===2%i:%2i:%2i:%s===n",t.hh,t.mm,t.ss,t.xx)
printf("===2%i:%2i:%2i:%3l===n",t.hh,t.mm,t.ss,t.xx) me donne
=== 0: 0: 0:== de même que printf("===2%i:%2i:%2i:%l===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%3s===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%s===n",t.hh,t.mm,t.ss,t.xx)
Pierre Maurette
printf("===2%i:%2i:%2i:%3l===n",t.hh,t.mm,t.ss,t.xx) me donne
=== 0: 0: 0:== > de même que printf("===2%i:%2i:%2i:%l===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%3s===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%s===n",t.hh,t.mm,t.ss,t.xx)
Pas regardé votre printf(), mais vous devriez reprendre vos essais avec:
printf("===2%i:%2i:%2i:%3l===n",t.hh,t.mm,t.ss,t.xx)
me donne
=== 0: 0: 0:== >
de même que
printf("===2%i:%2i:%2i:%l===n",t.hh,t.mm,t.ss,t.xx)
printf("===2%i:%2i:%2i:%3s===n",t.hh,t.mm,t.ss,t.xx)
printf("===2%i:%2i:%2i:%s===n",t.hh,t.mm,t.ss,t.xx)
Pas regardé votre printf(), mais vous devriez reprendre vos essais
avec:
printf("===2%i:%2i:%2i:%3l===n",t.hh,t.mm,t.ss,t.xx) me donne
=== 0: 0: 0:== > de même que printf("===2%i:%2i:%2i:%l===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%3s===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%s===n",t.hh,t.mm,t.ss,t.xx)
Pas regardé votre printf(), mais vous devriez reprendre vos essais avec:
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Pierre Maurette
printf("===2%i:%2i:%2i:%3l===n",t.hh,t.mm,t.ss,t.xx) me donne
=== 0: 0: 0:== > de même que printf("===2%i:%2i:%2i:%l===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%3s===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%s===n",t.hh,t.mm,t.ss,t.xx)
vous vous seriez rendu compte du problème de l'init_time plus rapidement.
Faites des tests plus simples dans un premier temps, ou dans un second temps si le premier jet ne fonctionne pas.
unsigned short test = 123; printf("%3un",test); puis: printf("%3un",t.xx); etc.
On vous dira ici qu'il ne faut pas tester jusqu'à ce que "ça semble marcher". Ce n'est pas faux, mais tant qu'à tester, autant le faire avec méthode.
Pour votre question précédente, il existe dans math.h la fonction round() et ses avatars.
-- Pierre Maurette
printf("===2%i:%2i:%2i:%3l===n",t.hh,t.mm,t.ss,t.xx)
me donne
=== 0: 0: 0:== >
de même que
printf("===2%i:%2i:%2i:%l===n",t.hh,t.mm,t.ss,t.xx)
printf("===2%i:%2i:%2i:%3s===n",t.hh,t.mm,t.ss,t.xx)
printf("===2%i:%2i:%2i:%s===n",t.hh,t.mm,t.ss,t.xx)
printf("===2%i:%2i:%2i:%3l===n",t.hh,t.mm,t.ss,t.xx) me donne
=== 0: 0: 0:== > de même que printf("===2%i:%2i:%2i:%l===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%3s===n",t.hh,t.mm,t.ss,t.xx) printf("===2%i:%2i:%2i:%s===n",t.hh,t.mm,t.ss,t.xx)
int running_chronometer = FALSE; // 0 false ; -1 true
Autant utiliser le type boll de <stdbool.h>
oui moi j'ai mis des #DEFINE pour TRUE(-1) et FALSE(0) et puis je n'ai pas ce stdbool.h avec WinAVR (cross-compilateur pour ATMEL AVR sous Windows)
void init_time(time_typ time) {
Très mauvaise idée de passer une structure en paramètre.
oui la bonne idée c'est de passer un pointeur sur cette structure...
merci
Pierre Maurette
Bonjour,
je suis toujours après mon microcontrôleur 8 bits ATMEL AVR 8535 (en fait je le simule avec VMLAB) [...]
typedef struct { int hh; //8bits 0-255 int mm; //8bits 0-255 int ss; //8bits 0-255 unsigned short int xx; //16bits 0-65535 } time_typ;
Il vous faut regarder dans votre documentation les types entiers de votre implémentation. Si vous avez juste quelques instances de time_typ à gérer, vous pouvez déclarer les quatre champs en int, ou mieux unsigned. Si la mémoire est un problème, vous optimisez dans ce sens selon votre documentation. Par exemple, en C99:
int main(void) { time_typ t; init_time(&t); printf("===%02u:%02u:%02u:%03u===n",t.hh,t.mm,t.ss,t.xx); return 0; }
On pourrait également utiliser uint_fast8_t et uint_fast16_t.
Pensez à vérifier en imprimant le sizeof de votre structure qu'il n'existe pas un ordre de déclaration des champs offrant moins de padding. Je ne crois pas que ça puisse être le cas ici.
Si vous êtes vraiment charrette en mémoire, votez du coté des bitfields.
-- Pierre Maurette
Bonjour,
je suis toujours après mon microcontrôleur 8 bits ATMEL AVR 8535
(en fait je le simule avec VMLAB)
[...]
typedef struct {
int hh; //8bits 0-255
int mm; //8bits 0-255
int ss; //8bits 0-255
unsigned short int xx; //16bits 0-65535
} time_typ;
Il vous faut regarder dans votre documentation les types entiers de
votre implémentation. Si vous avez juste quelques instances de time_typ
à gérer, vous pouvez déclarer les quatre champs en int, ou mieux
unsigned.
Si la mémoire est un problème, vous optimisez dans ce sens selon votre
documentation. Par exemple, en C99:
int main(void)
{
time_typ t;
init_time(&t);
printf("===%02u:%02u:%02u:%03u===n",t.hh,t.mm,t.ss,t.xx);
return 0;
}
On pourrait également utiliser uint_fast8_t et uint_fast16_t.
Pensez à vérifier en imprimant le sizeof de votre structure qu'il
n'existe pas un ordre de déclaration des champs offrant moins de
padding. Je ne crois pas que ça puisse être le cas ici.
Si vous êtes vraiment charrette en mémoire, votez du coté des
bitfields.
je suis toujours après mon microcontrôleur 8 bits ATMEL AVR 8535 (en fait je le simule avec VMLAB) [...]
typedef struct { int hh; //8bits 0-255 int mm; //8bits 0-255 int ss; //8bits 0-255 unsigned short int xx; //16bits 0-65535 } time_typ;
Il vous faut regarder dans votre documentation les types entiers de votre implémentation. Si vous avez juste quelques instances de time_typ à gérer, vous pouvez déclarer les quatre champs en int, ou mieux unsigned. Si la mémoire est un problème, vous optimisez dans ce sens selon votre documentation. Par exemple, en C99:
int main(void) { time_typ t; init_time(&t); printf("===%02u:%02u:%02u:%03u===n",t.hh,t.mm,t.ss,t.xx); return 0; }
On pourrait également utiliser uint_fast8_t et uint_fast16_t.
Pensez à vérifier en imprimant le sizeof de votre structure qu'il n'existe pas un ordre de déclaration des champs offrant moins de padding. Je ne crois pas que ça puisse être le cas ici.
Si vous êtes vraiment charrette en mémoire, votez du coté des bitfields.
-- Pierre Maurette
Pierre Maurette
Le 15/09/06 17:45, dans <450acaa5$0$27379$,
typedef struct { int hh; //8bits 0-255
"int" n'est pas 8 bits.
Ah... même sur un microcontrôleur 8 bits ?
En tous cas, sizeof(int) >= sizeof(short).
et c'est quoi alors le type qui va de 0 à 255 et qui occupe 8 bits ?
En C99, ce serait uint8_t de stdint.h. Si ça n'existe pas pour vous, il vous faut, après lecture de votre documentation, identifier ou créer les types correspondant à vos besoins et aux contraintes de votre hardware.
-- Pierre Maurette
Le 15/09/06 17:45, dans <450acaa5$0$27379$ba4acef3@news.orange.fr>,
typedef struct {
int hh; //8bits 0-255
"int" n'est pas 8 bits.
Ah... même sur un microcontrôleur 8 bits ?
En tous cas, sizeof(int) >= sizeof(short).
et c'est quoi alors le type qui va de 0 à 255 et qui occupe 8 bits ?
En C99, ce serait uint8_t de stdint.h. Si ça n'existe pas pour vous, il
vous faut, après lecture de votre documentation, identifier ou créer
les types correspondant à vos besoins et aux contraintes de votre
hardware.
et c'est quoi alors le type qui va de 0 à 255 et qui occupe 8 bits ?
En C99, ce serait uint8_t de stdint.h. Si ça n'existe pas pour vous, il vous faut, après lecture de votre documentation, identifier ou créer les types correspondant à vos besoins et aux contraintes de votre hardware.