Hallo Zusammen, Für ein kleines Projekt welches mit einem Attiny85 aufgebaut ist möchte ich die Geräte ID im EEProm speichern. Bei der Inbetriebnahme soll 0xff als ID ins EEPROM geschrieben werden sofern die ID noch nicht bereits gültig abgelegt ist. Um zu erkennen ob die ID gültig ist oder nicht rechne ich noch 1 Byte CRC über die 1 Byte ID und speichere diese zusätzlich ab.... leider funktioniert das nicht immer ab und zu ist aufeinmal wieder 0xff als ID also muss die CRC nicht gestimmt haben beim einschalten. Was mache ich hier für ein Denkfehler?
1 | // irgendwo im main() ...
|
2 | |
3 | // read device id
|
4 | current_device_id = eeprom_read_byte(&ee_byte_device_id); |
5 | // calculate an check crc
|
6 | _crc8_ccitt_update(u8_tmp, current_device_id); |
7 | // read device id crc
|
8 | current_device_id_crc = eeprom_read_byte(&ee_byte_device_id_crc); |
9 | |
10 | if (current_device_id_crc != u8_tmp) |
11 | {
|
12 | update_device_id(DEFAULT_DEVICE_ID); |
13 | }
|
14 | |
15 | |
16 | |
17 | //
|
18 | |
19 | |
20 | static void update_device_id(uint8_t dev_id) |
21 | {
|
22 | uint8_t tmp; |
23 | |
24 | #ifdef SUART_TX
|
25 | uputs("\r\nupdate dev_id:"); |
26 | itoa(dev_id, buffer, 10); |
27 | uputs(buffer); |
28 | #endif
|
29 | |
30 | tmp = dev_id; |
31 | eeprom_write_byte(&ee_byte_device_id, tmp); |
32 | current_device_id = tmp; |
33 | tmp = 0; |
34 | _crc8_ccitt_update(tmp, dev_id); |
35 | eeprom_write_byte(&ee_byte_device_id_crc, tmp); |
36 | current_device_id_crc = tmp; |
37 | show_id(); |
38 | }
|
Hat vielleicht jemand eine ander Idee wie ich das mit der ID lösen könnte? Vielen Dank.