реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Из программного прерывания не могу работать с файлом
cir
сообщение Apr 22 2006, 03:50
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 2-12-05
Пользователь №: 11 720



Подскажите, пожалуйста. Пишу прогу для промышленного компьютера Fastwel CPU686. Операционная система FDOS-6.22, среда разработки Borland C++ v3.1.
Программа у меня состоит из 2-х частей, одну я вызываю из другой как программное прерывание
intr(INTR,&reg); Через регисты я передаю два нужных мне параметра. Из самого программного прерывания не могу обратиться к файлу, а точнее не могу его открыть. Где-то уже слышал о подобной проблеме, но там ее решали так: в прерывании устанавливали лишь флаги записи в файл, а саму запись проводили в основном цикле программы. Мне это сделать не уластся, поскольку все данные для записи находятся в самом прерывании. Само прерывание, которое я вызываю - это отдельный проект, программа которая его вызывает тоже отдельный проект.
Может кто подскажет как передать данные из прерывания (их достаточно много около 15 переменных типа float - через регистры само собой не получится), или научится работать с файлом прямо из прерывания (что гораздо удобнее).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 22 2006, 06:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(cir @ Apr 22 2006, 06:50) *
Программа у меня состоит из 2-х частей, одну я вызываю из другой как программное прерывание
intr(INTR,&reg); Через регисты я передаю два нужных мне параметра. Из самого программного прерывания не могу обратиться к файлу, а точнее не могу его открыть. Где-то уже слышал о подобной проблеме, но там ее решали так:

Сдается мне, что Ваша проблема гораздо проще - добавьте волшебное слово
enable(); в начале Вашей программы и если наследуемый стек будет достаточен, то все будет
работать. То что Вы слышали "звон", это скороее о другом работа с системными DOS вызовами
из них-же. Там пути обхода и выкручивания много сложнее.
Для начала отладьте просто как функцию (без interrupt модификатора ).

Цитата
Может кто подскажет как передать данные из прерывания (их достаточно много около 15 переменных типа float - через регистры само собой не получится), или научится работать с файлом прямо из прерывания (что гораздо удобнее).

Ну вот - сразу за файл хвататьтся. У Вас еще менеджеры памяти есть. Поставатьте (хотя думаю стоит :-) ), например himem, спросите у него памяти кусочек и работайте с ним их обеих модулей.
Там правда, тоже 'лишние' пересылки будут, но скорость не сравнима будет с файловыми операциями.
Если еще быстрее - напишите резидентика оставляющего в памяти кусочек для обмена. Поскольку
Ваша программа вызываемая по int, таким резидентом, как я понимаю и является, то все сводится вообще в возврату из обработчика прерывания far указателя на структуру с Вашими float.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
cir
сообщение Apr 22 2006, 13:17
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 2-12-05
Пользователь №: 11 720



Спасибо за совет. Вот только я не знаю как вернуть как вернуть из обработчика прерывания указатель на структуру, ведь в прерывание состояния регистров передаются просто как параметр (regpack). Если не трудно, объясните как это сделать.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 22 2006, 15:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(cir @ Apr 22 2006, 16:17) *
Вот только я не знаю как вернуть как вернуть из обработчика прерывания указатель на структуру, ведь в прерывание состояния регистров передаются просто как параметр (regpack). Если не трудно, объясните как это сделать.

Так в Выбранном Вами варианте по выходу из прерывания состояние регистров в тот-же regpack ОБРАТНО и копируется. Far указатели, возвращаются в DX:AX ну а дальше соответственно макросик MK_FP() в помощь....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
cir
сообщение Apr 23 2006, 16:23
Сообщение #5





Группа: Новичок
Сообщений: 3
Регистрация: 2-12-05
Пользователь №: 11 720



Быстренько попробовал написать две маленькие программки, одна из которых вызывается из другой как прервание и пишет по указанному в регистрах адресу случайные значения, а другая соответственно считывае по этому адресу значения и выводи их в файл. Все рабртает! В понедельник прийду на работу и опробую уже на реальном проекте.
Спасибо за совет.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 23 2006, 23:08
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(cir @ Apr 23 2006, 19:23) *
Все рабртает!
Спасибо за совет.

Да не могло не заработать :-).
Пожалуйста!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 20:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016