separado, para reducir la latencia entre la recepción de datos. Si es necesario, es posible utilizar un
threadpool
para una interpretación más rápida en entornos de varios núcleos.
Todos los mensajes son asíncronos, es decir, durante el procesamiento de un comando (esperando entre
enviar y recibir) se pueden recibir otros mensajes (eventos, imágenes o incluso comandos de otros threads).
Ejemplo de cálculo de CRC16 XMODEM
// Ejemplo de implementación del algoritmo CRC16 XMODEM. Este ejemplo usa una
// "CRC tab"para calcular previamente los coeficientes y optimizar el rendimiento.
// Es posible definir la pestaña como una constante de valores "mágicos".
// Utiliza variables definidas en el <stdint.h> que puede ser reemplazado
// por el sistema equivalente. Usualmente están:
// - uint8_t -> unsigned char
// - uint16_t -> unsigned short int
uint16_t crcXMODEM(const uint8_t *c, int numBytes, uint16_t currCrc = 0) {
static uint16_t crcTab[256];
static bool init = 0;
if(!init){
init = true;
for (int i=0; i<256; i++) {
uint16_t short_c = i<<8;
uint16_t crc = 0;
for (int j=0; j<8; j++) {
}
crcTab[i] = crc;
}
}
for (int i = 0; i < numBytes; i++) {
currCrc = (currCrc << 8) ^ crcTab[((currCrc >> 8) ^ c[i])];
}
return currCrc;
}
if ( ((crc ^ short_c) & 0x8000) != 0 ) {
crc <<= 1;
crc ^= 0x1021;
} else {
crc <<= 1;
}
short_c <<= 1;
www.pumatronix.com
Manual de Integração
ITSCAM 600
68