где-то так:
CODE
#define MAX_LEN 64
void clear_buf(char * buf, char len)
{
while(len--) *buf++ =0;
}
char prog(void)
{
char buffer [MAX_LEN];
char buf [MAX_LEN];
char * pts1; // рабочие указатели на строки
char * pts2;
char str_count;
char in_ch;
//nbytes=0; // где определение? + зачем надо!?
// А если не можем открыт для чтения, то будем вечно здесь висеть?
//while(f_open(&file,path,FA_READ)!=FR_OK){};
if(f_open(&file,path,FA_READ)!=FR_OK) return 0;
do
{
//почистим буферы
// хотя зачем это надо !?
clear_buf(buffer, MAX_LEN);
clear_buf(buf, MAX_LEN);
pts1 = buffer;
do
{
// А если достигли конца файла без знаков конца строки, так здесь и повиснем?
//while (f_read(&file,buf,1,&nbytes)!=FR_OK){}; //читаем из файла посимвольно
if (f_read(&file,&in_ch,1,&str_count)!=FR_OK) break; //читаем из файла посимвольно
*pts1++ = in_ch;
}
while (in_ch!=0x0A); //пока не нашли конец строки
//В Windows для завершения строки используется 0x0D+0x0A, где 0x0A - последняя
//иначе "0D0A" будет считаться ПУСТОЙ строкой
//while ((buf[0]!=0x0D)&&(buf[0]!=0x0A)); //пока не нашли конец строки
str_count = pts1 - buffer;
if (!str_count) break;
//если не последняя строка то будем конвертировать в другой формат
if (!strcmp(buffer,":00000001FF/0D/0A")) break; // выход из основного цикла
// переводим цифры в hex из ascii
// + не учитываем ":" и знаки конца строки и все остальные символы
// + окончательно формируем hex строку
pts1 = buffer;
pts2 = buf;
while (str_count--)
{
byte sxor = 0;
if(sxor)
{
if ( (*pts1>0x2F) && (*pts1<0x3A) ) *pts2++ = *pts1 - 0x30;
if ( (*pts1>0x40) && (*pts1<0x47) ) *pts2++ = *pts1 - 0x37;
}
else
{
if ( (*pts1>0x2F) && (*pts1<0x3A) ) *pts2 = (*pts1 - 0x30)<<4;
if ( (*pts1>0x40) && (*pts1<0x47) ) *pts2 = (*pts1 - 0x37)<<4;
}
*pts1++;
sxor ^=1;
}
str_count = pts2 - buf; // длина итоговой строки
// а зачем оно надо !?
clear_buf(buf, MAX_LEN);
clear_buf(buffer, MAX_LEN);
// делаем с результатом что надо
buffer[0]=0x07;
buffer[1]=0x0E;
buffer[2]=((buf[0])+4);
buffer[3]=0x57;
buffer[4]=0x00;
buffer[5]=buf[1];
buffer[6]=buf[2];
putchar(buffer[0]);
putchar(buffer[1]);
putchar(buffer[2]);
putchar(buffer[3]);
putchar(buffer[4]);
putchar(buffer[5]);
putchar(buffer[6]);
}
}
while (1);
}
на грамматические/синтаксические ошибки не проверял
Для проверки библиотеки SD карты, считайте исходный файл и запишите в другой при помощи этих функций
Где-то так:
CODE
char prog(void)
{
char str_count;
char in_ch;
if(f_open(&file,path,FA_READ)!=FR_OK) return 0;
if(f_open(&filewr,path,FA_WRITE)!=FR_OK) return 0;
do
{
if (f_read(&file,&in_ch,1,&str_count)!=FR_OK) break; //читаем из файла посимвольно
if (f_write(&filewr,&in_ch,1,1)!=FR_OK) break; //записываем, синтаксис ф-ции не знаю
}
while (1);
f_close(&file);
f_close(&filewr);
}
Сообщение отредактировал alexeyv - Jun 18 2011, 06:26