Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программные прерывания, Не могу обратиться к файлу из прерывания 
:(
    Опции темы
cir
  Дата 22.4.2006, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 22.4.2006

Репутация: нет
Всего: нет



Подскажите, пожалуйста. Пишу прогу для промышленного компьютера Fastwel CPU686. Операционная система FDOS-6.22, среда разработки Borland C++ v3.1. 
Программа у меня состоит из 2-х частей, одну я вызываю из другой как программное прерывание 
intr(INTR,&reg); Через регисты я передаю два нужных мне параметра. Из самого программного прерывания не могу обратиться к файлу, а точнее не могу его открыть. Где-то уже слышал о подобной проблеме, но там ее решали так: в прерывании устанавливали лишь флаги записи в файл, а саму запись проводили в основном цикле программы. Мне это сделать не уластся, поскольку все данные для записи находятся в самом прерывании. Само прерывание, которое я вызываю - это отдельный проект, программа которая его вызывает тоже отдельный проект.
Может кто подскажет как передать данные из прерывания (их достаточно много около 15 переменных типа float - через регистры само собой не получится), или научится работать с файлом прямо из прерывания (что гораздо удобнее).  
PM MAIL   Вверх
Fin
Дата 22.4.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



Я так думаю, проблема в том, что когда открывается прерывание, все остальные прерывания блокируются. Поэтому запись на диск не возможна. Если FDOS-6.22 аналогичен MSDOS 6.22 То ты можеш сделать в памяти массив твоих переменных объединеных одной структорой с переменной-флагом и через регистры передавать ссылку на данную структуру. Из своего основного модуля уже проверять данную ссылку и делать соответствуюшие действия. 


--------------------
Пролетал мимо.
PM MAIL   Вверх
cir
Дата 22.4.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 22.4.2006

Репутация: нет
Всего: нет



Спасибо за совет. Вот только я не знаю как вернуть как вернуть из обработчика прерывания указатель на структуру, ведь в прерывание состояния регистров передаются просто как параметр (regpack). Если не трудно, объясни как это сделать. 
PM MAIL   Вверх
Fin
Дата 22.4.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



Адрес можно передавать в регистре BX скажем. В  reg он у тебя будет скорее всего типа int. Останется только делом техники преобразование типов.
Пример
Код

   struct MyDate
   {
     bool flag;
    .............
   } ;

// -------------------------------------------------------------
   MyDate *My= (MyDate *) reg.BX;
   if (My-> flag)
   {
   }
 


--------------------
Пролетал мимо.
PM MAIL   Вверх
cir
Дата 23.4.2006, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 22.4.2006

Репутация: нет
Всего: нет



   Быстренько попробовал написать две маленькие программки, одна из которых вызывается из другой как прервание и пишет по указанному в регистрах адресу случайные значения, а другая соответственно считывае по этому адресу значения и выводи их в файл. Все рабртает! В понедельник прийду на работу и опробую уже на реальном проекте. 
  Спасибо за совет. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.