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

[WD/C] traduction d'un programme en c->WD

3 réponses
Avatar
Pierre BOUSQUET
Bonjour,

j'essai de transcrire un programme de C en WD dont voici le code :


Polynom: x16 + x12 + x5 + 1 ⇒ CRC_POLYNOM = 0x8408;
Start Value: 0xFFFF ⇒ CRC_PRESET = 0xFFFF;
C-Example:
unsigned int crc = CRC_PRESET;
for (i = 0; i < cnt; i++) /* cnt = number of protocol bytes without CRC
*/
{
crc ^= DATA[i];
for (j = 0; j < 8; j++)
{
if (crc & 0x0001)
crc = (crc >> 1) ^ CRC_POLYNOM;
else
crc = (crc >> 1);
}
}





WD :
BuffHexa est chaîne = "020016FF81830008010000000000000000000000"
b est entier
c est entier
Polynom est entier = 0x8408
crc est entier = 0xFFFF

POUR b=1 A Taille(BuffHexa) PAS 2
crc=OUExclusifBinaire(crc,HexaVersEntier(Milieu(BuffHexa,b,2)))
POUR c=1 A 8
crc=bitDécaleDroite(crc,1)

SI ETBinaire(crc,1) ALORS
crc=OUExclusifBinaire(crc,Polynom)
FIN
FIN
FIN




je sèche un peu, pourriez-vous m'aider

Merci d'avance

3 réponses

Avatar
Romain PETIT
Pierre BOUSQUET a utilisé son clavier pour écrire :
Bonjour,

j'essai de transcrire un programme de C en WD dont voici le code :


[...]
je sèche un peu, pourriez-vous m'aider

Merci d'avance



Ca ressemble à du CRC16 MODBUS ?
https://groups.google.com/forum/#!topic/fr.comp.developpement.agl.windev/AwgIx_N-mOo

A+

--
Romain PETIT
contact : rompetit chez free fr
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup
Avatar
mbrochand
bonjour si c'est du CRC modbus
j'avais fais ça (il y a 10 ans ne pas me demander d'explication!)

PROCEDURE calculcrc16RTU(table,lg)

NBCar est un entier
Crc_16 est un entier
AdrCRC est un entier
nCarCRC est un entier
NumB est un entier
Retenue est un entier
CarCRC est un entier

Crc_16=0xFFFF
AdrCRC=0xA001


POUR NBCar=1 A lg
CarCRC=(table[NBCar])
Crc_16=OUExclusifBinaire(Crc_16,CarCRC)
SI Crc_16<0 ALORS Crc_16=Crc_16+65536
NumB=0
TANTQUE NumB<=7
Retenue=ETBinaire(Crc_16,1)
Crc_16=PartieEntière(Crc_16/2)
SI Retenue ALORS
Crc_16=OUExclusifBinaire(Crc_16,AdrCRC)
SI Crc_16<0 ALORS Crc_16=Crc_16+65536
FIN
NumB++
FIN
FIN



RENVOYER (Crc_16)



Pierre BOUSQUET a pensé très fort :
Bonjour,

j'essai de transcrire un programme de C en WD dont voici le code :


Polynom: x16 + x12 + x5 + 1 ⇒ CRC_POLYNOM = 0x8408;
Start Value: 0xFFFF ⇒ CRC_PRESET = 0xFFFF;
C-Example:
unsigned int crc = CRC_PRESET;
for (i = 0; i < cnt; i++) /* cnt = number of protocol bytes without CRC */
{
crc ^= DATA[i];
for (j = 0; j < 8; j++)
{
if (crc & 0x0001)
crc = (crc >> 1) ^ CRC_POLYNOM;
else
crc = (crc >> 1);
}
}





WD :
BuffHexa est chaîne = "020016FF81830008010000000000000000000000"
b est entier
c est entier
Polynom est entier = 0x8408
crc est entier = 0xFFFF

POUR b=1 A Taille(BuffHexa) PAS 2
crc=OUExclusifBinaire(crc,HexaVersEntier(Milieu(BuffHexa,b,2)))
POUR c=1 A 8
crc=bitDécaleDroite(crc,1)

SI ETBinaire(crc,1) ALORS
crc=OUExclusifBinaire(crc,Polynom)
FIN
FIN
FIN




je sèche un peu, pourriez-vous m'aider

Merci d'avance
Avatar
Pierre BOUSQUET
Bonjour,


Merci Messieurs ça marche nickel !!!!