Demo application for the CRC tests.
This is an example that shows how the Flash and EEPROM CRC tests can be embedded in an user application. The CRC checksums of the Flash and a data section in EEPROM are pre-calculated and stored in EEPROM. During normal execution an LED is lighted while the system runs without errors. Pressing a button leads to CRC test of the Flash and the data section in EEPROM: new checksums are computed and compared with the ones stored in EEPROM. If any of the pairs were different, the error flag would be set (within the test) and the LED would be switched off. This can be tested for example by declaring the symbols MODIFY_FLASH and MODIFY_EEPROM.
Note that if the program is modified, the stored CRC needs to be computed again since the content in Flash will change. This can be done by debugging the program and placing a watch on the following variables:
checksum_test_flash checksum_test_eeprom Those values can be assigned then to
Copyright (C) 2012 Atmel Corporation. All rights reserved.
Definition in file crc/UserApplication.c.
Include dependency graph for crc/UserApplication.c:Go to the source code of this file.
Macros | |
| #define | MODIFY_FLASH |
| If declared the content of the flash is modified. | |
| #define | MODIFY_EEPROM |
| If declared the content of the EEPROM data section is modified. | |
Functions | |
| void | setup_led_switches () |
| This function sets up the LED and switch. The LED is switched on to show that the system is working correctly. The switch is configured to generate an interrupt after being pressed. | |
| ISR (SWITCH_INT0_vect) | |
| Interrupt service routine for button press. | |
Variables | |
| uint32_t | classb_precalculated_flash_crc = 0xe7138241 |
| This variable contains the CRC checksum for the flash and is stored in EEPROM. | |
| uint16_t | classb_precalculated_eeprom_crc = 0xcd4b |
| This variable contains the CRC checksum for the data section in EEPROM. It is stored in EEPROM. | |
| uint8_t | data_eeprom [] = {0,1,2,3,4,5,6,7,8,9,10} |
| Data stored in EEPROM. | |
| NO_INIT volatile uint8_t | classb_error |
| Global error flag. | |
| #define MODIFY_FLASH |
If declared the content of the flash is modified.
If declared an endless loop is compiled at the end of the main application. This changes the program code and thus the flash content. The previously stored checksum will then be different than the new one.
Definition at line 83 of file crc/UserApplication.c.
| #define MODIFY_EEPROM |
If declared the content of the EEPROM data section is modified.
If declared an endless loop is compiled at the end of the main application. This changes the program code and thus the flash content. The previously stored checksum will then be different than the new one.
Definition at line 94 of file crc/UserApplication.c.
| ISR | ( | SWITCH_INT0_vect | ) |
Interrupt service routine for button press.
This will compute the checksums of the Flash and data section in EEPROM and compare them with the ones stored in EEPROM. There some code lines that could be uncommented in order to check the other CRC implementations.
Definition at line 188 of file crc/UserApplication.c.
References CLASSB_CRC16_EEPROM_HW(), CLASSB_CRC32_Flash_HW(), classb_precalculated_eeprom_crc, classb_precalculated_flash_crc, CRC_APP, and data_eeprom.
Here is the call graph for this function: