![]() |
Проблема с FFD RTU188 |
Ответить ![]() |
Автор | |
![]() Новичок ![]() Присоединился: 09 Июль 2004 Категория: Russian Federation Online Status: Offline Публикации: 9 |
![]() ![]() ![]() ![]() Опубликовано: 15 Февраль 2006 08:34 |
Здравствуйте!
Используем в своих проектах контроллер RTU188bs с проц. RDC ,биос 2.4 от 31.08.05. На всех контроллерах проевляется следующая ошибка: при записи данных(переодически 1 в час) в FDD в нормальном режиме наблюдается задержка 3-4 сек (наверно связанная со стиранием страницы), через некоторое случайное время пауза при записи проподает, хотя данные нормально пишутся и читаются, но если сбросить контроллер все записанные данные(после проподания паузы) проподают! Для записи данных использую функции ReadRam и WriteRam, для инициализации InitBackupRam. В проекте используются прерывания 0x11(COM2),0x12(Timer1),0x14(COM1). #include <sys\stat.h> #include <string.h> #include <stdio.h> #include <fcntl.h> #include <io.h> #define MaxAdrRam 60000 #define lenbuf 100 int handle=0; //handle of file //======================================================= //============= CloseFile ========= // close file 'flash.dat' //in: //out: void far CloseFile(void) { close(handle); // close file } //=======================================================//================== flush // save data from dos buffer in FDD //in: //out: 1 - err write file // 0 - OK BYTE flush(int handle) { int duphandle; /* make a duplicate file handle */ duphandle = dup(handle); /* close the duplicate handle to flush the DOS buffer */ if (close(duphandle)==-1) return True; else return False; } //======================================================= //========================== InitBackupRam // open and creat file 'flash.dat' //in: //out: 1 - err write file // 0 - OK BYTE far InitBackupRam(void) { DWORD i,Max_i; BYTE buf[lenbuf]; if ((handle=open("data.dat", O_RDWR|O_BINARY))==-1) { _fmode = O_BINARY; handle=creat("data.dat", S_IREAD |S_IWRITE); //clear buffer for (i=0;i<lenbuf;i++) buf=0; Max_i=MaxAdrRam/lenbuf; // save file for (i=0;i<Max_i;i++) write(handle, buf, lenbuf); close(handle); handle=open("data.dat", O_RDWR|O_BINARY); } return 0; } //======================================================= //============================ ReadRam // Read data in FDD //in: linaddr - adres in flash // ptr - pointer data // qty - caunt data //out: >0 - err read // 0 - Ok BYTE far ReadRam(WORD linaddr, BYTE *ptr, WORD qty) { int result=False; if (handle==-1) result=True; else //set offset { result=lseek(handle, linaddr, SEEK_SET); if (result==-1) result=True;//return True; else { ResetTimeWDT(); result=read(handle, ptr, qty); if (result==-1) result=True;//return True; } } return result; } //======================================================= //========================== WriteFlash // Write data in FFD //in: linaddr - adres in flash // ptr - pointer data // qty - caunt data //out: >0 - error write // 0 - Ok BYTE far WriteRam(WORD linaddr, BYTE *ptr, WORD qty) { int result=False; if (handle==-1) result=True; else //set offset { result=lseek(handle, linaddr, SEEK_SET); if (result==-1) result=True; //return True; else { ResetTimeWDT(); result=write(handle, ptr, qty); if (result==-1) result=True; else flush(handle); } } return result; } |
|
![]() |
Ответить ![]() |
Переход на форум | Права доступа на форуме ![]() Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |