Bonjour à tous,
Je dois developper deux petites fonctions en C compilé par diab pour aller sur un MPC555.
Mise en situation:
Le logiciel sur lequel je travail ecrit des blocks (ie 0 to 5023) dans une memoire et doit garder une trace des blocks ecrit. A chaque fois qu'un block est ecrit, on appel une fonction qui s'occupe de marquer ces blocks comme ecrit. Il faut aussi etre capable de retourner, à l'aide d'une autre fonction, si un block passé en parametre est ecrit.
Premier choix on crée un tableau, contenant des variable de 32 bits, en supposant que ca ameliore par rapport a des variables de 8, 16 ou 64 bits
On a donc cette fonction prenant forcement un unsigned short en entrée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #define size (5024u) static unsigned int history[size/32u]
Premiere question, etes vous d'accord avec ce code d'un point de vue des performance ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void setblock(unsigned short block_id) { unsigned int mask; unsigned int index; //on cree notre mask pour aller ecrire dans le tableau mask = (unsigned int)(1u<<(block_id%32u)); //on determine a quelle position ecrire index = (unsigned int)(block_id/32u); //et on vient updater le tableau history[index] |= mask; }
Aussi je ne veux laisser aucun cast implicite.
Deuxieme question, d'apres ce que je sais, la version de diab que j'utilise ne fera pas le castage du float comme je l'attend.
int i = (int)(1.7) --> 2 et non 1.
Je voudrais donc contourner ce probleme, mais de facon a ce que le resultat soit comme attendu et ce, pour difference type de compilateur.
ie: sur gcc int i = (int)(1.7) --> 1.
Auriez vous une suggestion ?
Merci beaucoup pour votre aide et vos suggestions
Partager