Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1824 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C sur µprocesseur] Calcul de bit de parité

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C sur µprocesseur] Calcul de bit de parité

n°2037376
utb diablo
.: :. 4 ever xo0
Posté le 20-11-2010 à 19:02:57  profilanswer
 

Salut les gens
 
Voila une petite question toute simple, je dois réaliser un algo permettant de calculer un bit de parité d'un mot de 8bit.
En fait c'est un projet scolaire, je code un driver pour piloter un Touchpad PS/2.
Bon, le code à l'air de marcher, mais j'ai codé ca à la va vite, et vu que je suis allé limite niveau temps exécution
(mon µcontrolleur est cadencé à 12Mhz - CY8C21234 de Cypress), je voulais savoir si mon code était rapide ou
mal pensé vu que je dois faire pas mal de truc entre deux coups d'horloge.
 
Voila mon code de test (je viens de tester sur mon ordi perso, ca à l'air de marcher):
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef unsigned char BYTE;   // pour tester sur mon PC w/ gcc sans toucher à mon code
  4. #define makeFoo(a)    printf("Word: %#X - Parity bit: %d\n",\
  5.             a, getParityBit(a))
  6. BYTE getParityBit(BYTE foo) {
  7.     BYTE end = 0x01;  // Lookin for a odd parity, set to 0x00 for even parity
  8.     if(foo == 0xFF)   // Gettin (!end) w/ 0xFF without this
  9.         return end;
  10.     while(foo != 0x00) { // Stop lookin for a '1' if we got 0x00
  11.         end ^= foo&0x01; // Gettin the LSB and XORing it w/ 'end'
  12.         foo >>= 1;   // Movin to the next bit
  13.     }
  14.     return end;
  15. }
  16. int main () {
  17.     BYTE word = 0x00;
  18.     do {       
  19.         makeFoo(word);
  20.         word++;
  21.     } while (word != 0x00);
  22.     return 0;
  23. }


 
Merci d'avance


---------------
Au royaume des aveugles, les borgnes sont rois xo0
mood
Publicité
Posté le 20-11-2010 à 19:02:57  profilanswer
 

n°2037388
billgatesa​nonym
Posté le 20-11-2010 à 21:09:20  profilanswer
 

Pour aller plus vite, on peut souvent utiliser la parité qui est calculée par le microprocesseur lui-même. C'est le cas avec les micro-processeurs Intel et AMD des PC ordinaires. Pour ce microprocesseur, la doc mentionne la parité, voir http://www.cypress.com/?docID=24689 page 3, mais je ne sais pas s'il s'agit de la même parité.

n°2037408
utb diablo
.: :. 4 ever xo0
Posté le 21-11-2010 à 02:38:18  profilanswer
 

Ouaip j'avais deja été voir du coté de la doc, mais j'ai pas trouvé grand chose. Tu penses que l'API du µprocesseur pourrait avoir une fonction du genre? J'irai faire un tour dans les fichiers .h du projet (IDE : Psoc Designer) lundi quand j'aurai accès à mes fichiers.
 
D'ici là, si quelqu'un a un algo plus rapide que le mien, je suis preneur :)


---------------
Au royaume des aveugles, les borgnes sont rois xo0
n°2037410
Un Program​meur
Posté le 21-11-2010 à 08:49:36  profilanswer
 

Code :
  1. int parity(unsigned char b)
  2. {
  3.    b ^= b >> 4;
  4.    b ^= b >> 2;
  5.    b ^= b >> 1;
  6.    return b & 1;
  7. }


Message édité par Un Programmeur le 21-11-2010 à 08:57:07

---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2037442
h3bus
Troll Inside
Posté le 21-11-2010 à 14:36:13  profilanswer
 

Je suppose que tu fait u contrôleur PS2 en bitbang.
Dans ce cas tu va envoyer ta donnée bit par bit. à Chaque bit envoyé tu fait ton XOR, tu te retrouve à la fin avec ta parité.
 
Cela dit, vu la vitesse du PS2, ta méthode fera pas ramer ton µC à 12 MHz...


---------------
sheep++
n°2037660
SquiZZ
Posté le 22-11-2010 à 19:53:53  profilanswer
 

Avoir un BYTE qui s'apelle word, ça me fait mal à la tête :o
Sinon, si t'as de la place en rom, tu peux précalculer la table sur PC et ensuite le 'calcul' se résume à un accès mémoire.  
Un peu overkill pour une parité, mais souvent utilisé pour les crc ou les fonctions trigo.

n°2037788
utb diablo
.: :. 4 ever xo0
Posté le 23-11-2010 à 13:28:37  profilanswer
 

h3bus a écrit :

Je suppose que tu fait u contrôleur PS2 en bitbang.
Dans ce cas tu va envoyer ta donnée bit par bit. à Chaque bit envoyé tu fait ton XOR, tu te retrouve à la fin avec ta parité.


 
Ouaip je bosse en bitbang (connaissais pas le terme avant :p merci wiki),
OK je pense que ta méthode est pas mal, j'y avais pas pensé vu que je preparais mes paquets bien avant de les envoyer. J'essaie dès que je peux...
 

h3bus a écrit :

Cela dit, vu la vitesse du PS2, ta méthode fera pas ramer ton µC à 12 MHz...


 
Mon problème enfait, c'était juste d'être sur d'avoir le temps de faire tout mes calculs entre 2 fronts d'horloge (au moment ou je suis censé envoyer mes données) mais je pense que de côté là, je suis large, nan?

Citation :

The clock frequency must be in the range 10 - 16.7 kHz.  This means clock must be high for 30 - 50 microseconds and low for 30 - 50 microseconds..  If you're designing a keyboard, mouse, or host emulator, you should modify/sample the Data line in the middle of each cell.  I.e.  15 - 25 microseconds after the appropriate clock transition


 

SquiZZ a écrit :

Avoir un BYTE qui s'apelle word, ça me fait mal à la tête :o
Sinon, si t'as de la place en rom, tu peux précalculer la table sur PC et ensuite le 'calcul' se résume à un accès mémoire.  
Un peu overkill pour une parité, mais souvent utilisé pour les crc ou les fonctions trigo.


 
Ouais, peu après avoir posté, je suis tombé sur cette page http://graphics.stanford.edu/~seander/bithacks.html qui en donnait un exemple  (Compute parity by lookup table), mais ca me paraissait un peu lourd pour calculer la parité d'un un mot de 8bits.


Message édité par utb diablo le 24-11-2010 à 10:55:43

---------------
Au royaume des aveugles, les borgnes sont rois xo0

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C sur µprocesseur] Calcul de bit de parité

 

Sujets relatifs
Débutant, problème master mind en C.[C] Parser un arbre représentatif des dossiers
calcul entre date oracle et date pc[C#] Php hors ligne ?
Calcul de compléxitésprobleme de SharpSsh avec C#
afficher une ligne d'un fichier .txt en C purTri_fusion en C qui ne fonctionne pas
[C++] Récupérer la taille d'un fichier binairestructure en C++
Plus de sujets relatifs à : [C sur µprocesseur] Calcul de bit de parité


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR