Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

printf d'un unsigned short int et autres sorties formatées

23 réponses
Avatar
noone
Bonjour,

je suis toujours après mon microcontrôleur 8 bits ATMEL AVR 8535
(en fait je le simule avec VMLAB)

Je veux réaliser un chronomètre.

J'ai donc créé



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;

time_typ current_time;
time_typ last_time;
time_typ best_time;

int running_chronometer = FALSE; // 0 false ; -1 true

void init_time(time_typ time) {
time.hh = 0;
time.mm = 0;
time.ss = 0;
time.xx = 0;
}

xx représente les millièmes


le problème c'est que je voudrais faire un printf pour afficher le temps.



j'ai pensé à

printf("===2%i:%2i:%2i:%3l===\n",t.hh,t.mm,t.ss,t.xx)


mais cela ne fonctionne pas pour les millièmes...
(rien ne s'affiche)



j'ai également un autre problème...
je voudrais que ça affiche ===00:00:00:000===
au lieu de === 0: 0: 0: 0===


savez-vous comment je dois procéder ?


Merci d'avance


PS : il n'est pas prêt de marcher mon chrono !!!!

3 réponses

1 2 3
Avatar
noone
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)



Surtout que TRUE vaut généralement 1 et pas -1. Les calculs booléens en C
donnent 0 et 1 et pas -1 ou 42.


Ah ! j'avais pris c'est define dans un exemple sur le net

le fait de mettre -1 pour TRUE ne fait il pas passer tous les bits à 1
dans le cas d'un entier non signé ?

mais j'ai regardé et j'ai bien un fichier stdbool.h...




Avatar
Eric Levenez
Le 16/09/06 9:34, dans <450ba904$0$25936$,
«  » a écrit :


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)



Surtout que TRUE vaut généralement 1 et pas -1. Les calculs booléens en C
donnent 0 et 1 et pas -1 ou 42.


Ah ! j'avais pris c'est define dans un exemple sur le net


Internet est plein de mauvais exemples.

le fait de mettre -1 pour TRUE ne fait il pas passer tous les bits à 1
dans le cas d'un entier non signé ?


-1 met tous les bits à 1 sur sur un entier signé et si le CPU utilise la
notation complément à 2.

Mais comme je l'ai dit en C une expression du type "(a == b)" est une
expression booléenne qui vaut 0 ou 1.

mais j'ai regardé et j'ai bien un fichier stdbool.h...


Alors tout n'est pas perdu.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.





Avatar
Eric Levenez
Le 16/09/06 9:23, dans <450ba658$0$27373$,
«  » a écrit :

Désolé mais parler de portabilité pour un microcontrôleur je trouve ça
assez comique ;-)


Non ce n'est pas comique. Regarde par exemple comment afficher ton timer
avec printf, tu peux faire ce printf de façon portable ou non portable.

il y a tellement de trucs non portable dans mon code
(initialisations de registres en particulier)


Bien sûr tout ce qui concerne les entrées/sortie sont non portables. C'est
pour cela que d'habitude cette partie est codée dans un source bien à part
de la partie portable. Si tu changes de CPU, il suffira de changer un seul
fichier, les autres étant portables, n'auront aucun changement.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

1 2 3