Estoy trabajando en un firmware proyecto en el cual tengo que hacer un crc16 de verificación para flash integridad.
Controlador: MSP430 IDE: IAR EW 5.40 (Enlazador Xlink)
El crc se calcula utilizando IAR Xlink enlazador y se mantiene al final de la flash. De nuevo el crc se calcula en tiempo de ejecución del código y se compara con el valor almacenado en el flash para comprobar la integridad. Sin embargo, sólo podemos calcular el crc en el segmento de código de la memoria flash. Su tamaño puede cambiar siempre que se realicen algunos cambios en el código. Puede automatizar este proceso que estoy manualmente haciendo ahora?
a partir de el .xcl enlazador de archivo:
// ---------------------------------------------------------
// CRC16 Essentials: -H for fill,-J for checksum calculation
// ---------------------------------------------------------
-HFF
-J2,crc16,,,CHECKSUM2,2=(CODE)5C00-FF7F;(CODE)10000-0x20A13
Aquí tengo que cambiar el valor final del segundo segmento de código que se 0x20A13 ahora. Puedo obtener este valor .archivo de mapa, me.e en cuanto a la memoria rango que mi código es el que residen dentro del flash. Este es el 1er cambio puedo hacer.
Aquí tengo que hacer el 2do cambio de código:
sum = fast_crc16(sum, 0x5C00, 0xFF7F-0x5C00+1);
sum = fast_crc16(sum, 0x10000,0x20A13-0x10000+1);
//Check the crc16 values
if(sum != __checksum)
{
// Action to be taken if checksum doesn't match
}
Por favor, ayudar a la automatización de este proceso!!