Цитата(west329_ @ Nov 17 2008, 14:39)

-потом в считанной строке начиная с 9 бита считываю 32 ASCCI символа,
Там совершенно необязательно 32 символа. И не все строки являются кодом.
Вот примерчик чтения хекса и заливки его в еепром:
CODE
#define HEX_LINE_DATA (0x00)
#define HEX_LINE_END (0x01)
#define HEX_LINE_BAD (0xFF)
static struct ProgRecord
{
u08 count;
u08 kind;
u16 address;
u08 data[32];
}HexLine;
static u08 csum;
u08 h2b(u08 b )
{
return ((b <= '9') ? (b - '0') : (b - 0x37));
}
u08 read_hex(void)
{
u08 Hb, Lb;
Hb = rs_getchar();
Lb = rs_getchar();
Lb = (h2b(Hb) << 4) | h2b(Lb);
csum += Lb;
return(Lb);
}
u08 read_hex_line(void)
{
u08 i;
// hex line sample:
//:10007B00DFF6804288828C8387F009E0A3B5F036E7
// skip to the ':'
while (rs_getchar() != ':');
csum = 0;
// Number of Bytes.
HexLine.count = read_hex();
if (HexLine.count > 32) goto bad_len;
// Build address Information.
HexLine.address = (u16)read_hex() << 8;
HexLine.address |= read_hex();
// Get Type
HexLine.kind = read_hex();
// Extract the Data Bytes.
for (i = 0; i < HexLine.count; i++)
HexLine.data[i] = read_hex();
// don't forget about the Checksum u08.*/
read_hex();
if (csum) goto bad_cs;
return TRUE;
bad_len:
rs_puts_p("Bad length. Hit esc\r\n");
while (rs_getchar() != 27);
return FALSE;
bad_cs:
rs_puts_p("Bad csum. Hit esc\r\n");
while (rs_getchar() != 27);
return FALSE;
}
void programm_eeprom(void)
{
rs_puts_p("\r\nSend file!\r\n");
while (read_hex_line())
{
if (HexLine.kind == HEX_LINE_END)
{
rs_puts_p("Done!\r\n");
break;
}
if (HexLine.kind == HEX_LINE_DATA && HexLine.count > 0)
if (!at24c256_write(HexLine.address, (u08*)&HexLine.data, HexLine.count))
{
rs_puts_p("Write error\r\n");
break;
}
rs_putchar('.');
}
}
Если бы я знал, что такое электричество...