Я работаю над проектом прошивки, в котором мне нужно выполнить проверку CRC16 на целостность флеш-памяти.
CRC рассчитывается с использованием линкера IAR Xlink и сохраняется в конце флэш-памяти. Снова crc вычисляется во время выполнения из кода и сравнивается с сохраненным значением во флэш-памяти для проверки целостности. Однако мы можем вычислить crc только для сегмента кода флеш-памяти. Его размер может измениться всякий раз, когда мы вносим некоторые изменения в код. Могу ли я автоматизировать этот процесс, который я делаю сейчас вручную?
из файла компоновщика .xcl:
// ---------------------------------------------------------
// CRC16 Essentials: -H for fill,-J for checksum calculation
// ---------------------------------------------------------
-HFF
-J2,crc16,,,CHECKSUM2,2=(CODE)5C00-FF7F;(CODE)10000-0x20A13
Здесь мне нужно прямо сейчас изменить конечное значение второго сегмента кода, равное 0x20A13. Я получаю это значение из файла .map, т.е. от того, в каком диапазоне памяти мой код находится во флеш-памяти. Это первое изменение, которое я делаю.
Здесь мне нужно сделать 2-е изменение из кода:
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
}
Пожалуйста, помогите автоматизировать этот процесс !!