Estoy trabajando en un proyecto de firmware en el que tengo que hacer una comprobación de crc16 para verificar la integridad del flash.
Controlador: MSP430 IDE: IAR EW 5.40 (Linker Xlink)
El crc se calcula utilizando el enlazador IAR Xlink y se mantiene al final del flash. Nuevamente, crc se calcula en tiempo de ejecución a partir del código y se compara con el valor almacenado en la memoria flash para verificar la integridad. Sin embargo, solo podemos calcular crc en el segmento de código de la memoria flash. Su tamaño puede cambiar siempre que realicemos algunos cambios en el código. ¿Puedo automatizar este proceso que estoy haciendo manualmente ahora mismo?
del archivo enlazador .xcl:
// ---------------------------------------------------------
// CRC16 Essentials: -H for fill,-J for checksum calculation
// ---------------------------------------------------------
-HFF
-J2,crc16,,,CHECKSUM2,2=(CODE)5C00-FF7F;(CODE)10000-0x20A13
Aquí necesito cambiar el valor final del segundo segmento de código que es 0x20A13 en este momento. Obtengo este valor del archivo .map, es decir, en la cantidad de memoria que reside mi código dentro del flash. Este es el primer cambio que hago.
Aquí necesito hacer el segundo cambio del 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 ayuda a automatizar este proceso!