Здравствуйте! Требуется помощь в нахождениир контрольной суммы программного кода и прошивки. Программа: #include "dz1612/dz1612.h" #include <stdio.h>
#define flashStart 0xFA00 #define flashEnd 0xFDFF #define flashChecksum 0x1080
int tap_count = 0; int d1, d2, d3, d4; int i; u_int8_t mas[5]={0x5A, 0x6B, 0x7C, 0x8D, 0x9E};
void funct(u_int8_t *mas) { wdog_reassure(); if ( P1IN & 0x40 ) { if( d3 == 0 ) { i = i + 1; if( i > 4 ) i = 4; d3 = 1; } } else { d3 = 0; } if ( P1IN & 0x80 ) { if( d4 == 0 ) { i = i - 1; if( i < 0 ) i = 0; d4 = 1; } } else { d4 = 0; } if ( P1IN & 0x10 ) { if( d1 == 0 ) { tap_count = 1; d1 = 1; } } else { d1 = 0; } if ( P1IN & 0x20 ) { if( d2 == 0 ) { tap_count = 0; d2 = 1; } } else { d2 = 0; } if( (tap_count&1) == 1 ) { P1OUT &= 0xF0; P1OUT |=( ( mas[i] >> 4 ) & 0x0F ); } else { P1OUT &= 0xF0; P1OUT |=(mas[i] & 0x0F ); } }
int main() {
init_pins(); init_clock(); init_systimer(512); stdio_init(9600); P1SEL =0; P1DIR =15; d1 = d2 = 0; d3 = d4 = 0; i = 0; while (1) { funct(mas); } halt(11); return 0; }
Есть пример нахождения контрольной суммы: #include <msp430x16x.h> #define flashStart 0xFA00 #define flashEnd 0xFDFF #define flashChecksum 0x1080 int verifyFlash(void); void storeChecksum(void); void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer FCTL2 = FWKEY + FSSEL0 + FN0; // MCLK/2 for flash timing generator // . // . Flash writes // . storeChecksum(); // Later in the program.... if (!verifyFlash()) { // Handle the error } _BIS_SR(LPM3_bits+GIE); // Sleep until port interrupt } int verifyFlash(void) { unsigned int i, checksum=0, storedChecksum; for (i=0;i<0x0200;i++) // Calculate checksum checksum += ((unsigned int *)flashStart)[i]; storedChecksum = *(unsigned int *)flashChecksum; //Pull stored val from flash if (checksum==storedChecksum) // Compare and return the result return(1); else return(0); } void storeChecksum(void) { unsigned int i, checksum=0,*pFlashData; for (i=0;i<0x0200;i++) // Calculate checksum checksum += ((unsigned int *)flashStart)[i]; // Erase checksum storage location pFlashData = (unsigned int *) flashChecksum; // Reset ptr to start of block FCTL3 = FWKEY; // Unlock flash FCTL1 = FWKEY + ERASE; // Set Erase bit *pFlashData = 0x0000; // Dummy write to erase // Store checksum FCTL1 = FWKEY+WRT; // Enable flash write *pFlashData = checksum; // Write checksum to flash FCTL3 = FWKEY + LOCK; // Lock flash }
Необходимо их как-то совместить и сравнить контрольную сумму программы и прошивки.)))))
|