Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > ПЛК и микроконтроллеры
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Файловая система в ADAM5510E/TCP

 Ответить Ответить
Автор
Сообщение
adamplus Смотреть выпадающим
Новичок
Новичок
Аватар

Присоединился: 25 Январь 2006
Категория: Belarus
Online Status: Offline
Публикации: 5
Свойства публикации Свойства публикации   Ответить, цитируя автора - adamplus Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Файловая система в ADAM5510E/TCP
    Опубликовано: 26 Январь 2009 16:57
Есть необходимомть создавать файлы на диске D во время работы программы и хранить в них какие-то данные (архивы). Подскажите какими функциями пользоваться fopen или open,
fclose или close и т.д. А то получается какой то глюк во время работы. ADAM подвисает (но не сразу, может пройти и час и два) во время работы с файлом и уходит на перезагрузку. Сторожевой таймер отключен. Места на диске хватает. Запись в фай происходит 1 раз в 1-5 мин. Может кто сталкивался с этим.
Наверх
s_sergew Смотреть выпадающим
Новичок
Новичок


Присоединился: 20 Январь 2009
Online Status: Offline
Публикации: 7
Свойства публикации Свойства публикации   Ответить, цитируя автора - s_sergew Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Январь 2009 05:09
Функция fopen("имя_файла","режим_открытия") возвращает указатель на структуру типа FILE.
Функция open(const "имя_файла" , oflags) возвращает дискриптор файла типа int.
Указатель на структуру и int - это немного разные вещи.
Обычный цикл использования fopen:
FILE * in;
in = fopen("имя_файла","режим_открытия");
fwrite(указатель_на_массив, размер_считываемой_структуры,кол-во_считываемых_структур, in);
fclose(in);

Обычный цикл использования open:
int handle;
handle = open("имя_файла",O_RDWR);// флагов много всяких их можно комбинировать.
read(handle,указатель_на_буфер_считывания,кол-во_считываемых_байт);
close(handle);
_____________________
А вообще-то дело не в том как читать/писать. Тут другое,
диск D на вышеуказанном устройстве, это электронный диск (ramdrive), читать/писать можно любой функцией - дело вкуса. А вот за ошибками чтения/записи надо следить строго. Наверное имеет место переполнение диска, и запись/чтение чего попало, с последующей обработкой этого мусора, отсюда и проблема.
Как-то так.


Наверх
adamplus Смотреть выпадающим
Новичок
Новичок
Аватар

Присоединился: 25 Январь 2006
Категория: Belarus
Online Status: Offline
Публикации: 5
Свойства публикации Свойства публикации   Ответить, цитируя автора - adamplus Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Январь 2009 11:15
Спасибо за ответ. Но это все не то. Писать в файл действительно можно любой функцией, и проще всего fwrite.
Но Adam, как выяснилось, зависает на fclose. Пока не сделал сторожевому таймеру disable и delay перед fclose ничего непомогало. Сейчас вылечено и работает сутками.
Наверх
s_sergew Смотреть выпадающим
Новичок
Новичок


Присоединился: 20 Январь 2009
Online Status: Offline
Публикации: 7
Свойства публикации Свойства публикации   Ответить, цитируя автора - s_sergew Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Январь 2009 11:27
Это танцы с бубном и камлания какие-то :-D
Чего это с адамом стряслось, буферы на диск скинуть не успевает, что-ли.
Ну тогда перед fclose(in) надо попробовать сказать fflush(in);
Может тогда что-то прояснится.
Наверх
adamplus Смотреть выпадающим
Новичок
Новичок
Аватар

Присоединился: 25 Январь 2006
Категория: Belarus
Online Status: Offline
Публикации: 5
Свойства публикации Свойства публикации   Ответить, цитируя автора - adamplus Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Январь 2009 11:48
fflush и fflushall все это есть.
Наверх
s_sergew Смотреть выпадающим
Новичок
Новичок


Присоединился: 20 Январь 2009
Online Status: Offline
Публикации: 7
Свойства публикации Свойства публикации   Ответить, цитируя автора - s_sergew Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Январь 2009 12:33
Значит, запишем пока в чудеса.
Если заставят с адамами возится, будем разбираться что, к чему.
[заношу в EEPROM головы] :-D
Наверх
sanwork Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 08 Март 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 440
Свойства публикации Свойства публикации   Ответить, цитируя автора - sanwork Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Февраль 2009 15:37

Ваще говоря, настоящая физическая запись файла на диск (или дисковое устройство) происходит функцией fflash, т.е. сброс буфера из памяти на физ. устройство. Надо поэкспериментировать: сразу вместе с записью делать flash, и не держать данные в памяти, а то многое может измениться. FClose можно делать по вкусу - по ситуации.

С уважением, SAN

Наверх
 Ответить Ответить

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz