Цитата(zombi @ Mar 5 2011, 14:34)

Т.е. получается что время на запись "тогоже самого" тратится по любому, а вот приводит ли это к износу еепром?
Убивается, ждём-с. Сейчас
1'
248'
000 циклов выполнено, пока жива...
(Хм, в программке вроде бы не наврал нигде.. в один и тот же адрес пишу 0xFF в количестве 992 штук, затем 8 значений с единичкой в разных разрядах, и в обоих случаях читаю и проверяю совпало ли, и циклы считаю.)
Код (ATMega128; здесь USB - мост на UART), на проверку, может ошибка где?
CODE
#include <stdio.h>
static char str[100];
#define EEPROM_ADDRESS_TO_DESTROY 4094U
uint32_t cycles_;
uint16_t cycles_1000_;
void show_cycles(uint8_t is_failed)
{
if(is_failed)
{
sprintf(str, "\r\nFAILED ON: %ld", cycles_);
}
else
{
sprintf(str, "\r\nCURRENT: %ld", cycles_);
}
for(uint8_t i = 0; i < 100; i++)
{
if(str[i]) USB_TransmitByte(str[i]);
else break;
}
}
void eeprom_write_no_check(uint16_t address, uint8_t data)
{
while(EECR & _BV(EEWE));
EEAR = address;
EEDR = data;
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
{
EECR |= _BV(EEMWE);
EECR |= _BV(EEWE);
}
}
uint8_t eeprom_read_no_check(uint16_t address)
{
while(EECR & _BV(EEWE));
EEAR = address;
EECR |= _BV(EERE);
return EEDR;
}
__attribute__((OS_main)) int main(void)
{
USB_Initialize();
sei();
for(;;)
{
eeprom_write_no_check(EEPROM_ADDRESS_TO_DESTROY, 0xFF);
++cycles_;
++cycles_1000_;
if(eeprom_read_no_check(EEPROM_ADDRESS_TO_DESTROY) != 0xFF)
{
show_cycles(TRUE);
for(;;);
}
if(cycles_1000_ == 1000)
{
cycles_1000_ = 0;
show_cycles(FALSE);
for(uint8_t data = 1; data; data <<= 1)
{
eeprom_write_no_check(EEPROM_ADDRESS_TO_DESTROY, data);
++cycles_;
++cycles_1000_;
if(eeprom_read_no_check(EEPROM_ADDRESS_TO_DESTROY) != data)
{
show_cycles(TRUE);
for(;;);
}
}
}
if(USB_IsDataReceived())
{
if(USB_ReceiveByte() == '?')
{
show_cycles(FALSE);
}
}
}
return 0;
}
Если в коде ошибок нет, то поставлю писать что-нить отличное от 0xFF, проверим далее...
Сообщение отредактировал SysRq - Mar 5 2011, 15:03