![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| cir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 22.4.2006 Репутация: нет Всего: нет |
Подскажите, пожалуйста. Пишу прогу для промышленного компьютера Fastwel CPU686. Операционная система FDOS-6.22, среда разработки Borland C++ v3.1.
Программа у меня состоит из 2-х частей, одну я вызываю из другой как программное прерывание intr(INTR,®); Через регисты я передаю два нужных мне параметра. Из самого программного прерывания не могу обратиться к файлу, а точнее не могу его открыть. Где-то уже слышал о подобной проблеме, но там ее решали так: в прерывании устанавливали лишь флаги записи в файл, а саму запись проводили в основном цикле программы. Мне это сделать не уластся, поскольку все данные для записи находятся в самом прерывании. Само прерывание, которое я вызываю - это отдельный проект, программа которая его вызывает тоже отдельный проект. Может кто подскажет как передать данные из прерывания (их достаточно много около 15 переменных типа float - через регистры само собой не получится), или научится работать с файлом прямо из прерывания (что гораздо удобнее). |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
Я так думаю, проблема в том, что когда открывается прерывание, все остальные прерывания блокируются. Поэтому запись на диск не возможна. Если FDOS-6.22 аналогичен MSDOS 6.22 То ты можеш сделать в памяти массив твоих переменных объединеных одной структорой с переменной-флагом и через регистры передавать ссылку на данную структуру. Из своего основного модуля уже проверять данную ссылку и делать соответствуюшие действия.
-------------------- Пролетал мимо. |
|||
|
||||
| cir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 22.4.2006 Репутация: нет Всего: нет |
Спасибо за совет. Вот только я не знаю как вернуть как вернуть из обработчика прерывания указатель на структуру, ведь в прерывание состояния регистров передаются просто как параметр (regpack). Если не трудно, объясни как это сделать.
|
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
Адрес можно передавать в регистре BX скажем. В reg он у тебя будет скорее всего типа int. Останется только делом техники преобразование типов.
Пример
-------------------- Пролетал мимо. |
|||
|
||||
| cir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 22.4.2006 Репутация: нет Всего: нет |
Быстренько попробовал написать две маленькие программки, одна из которых вызывается из другой как прервание и пишет по указанному в регистрах адресу случайные значения, а другая соответственно считывае по этому адресу значения и выводи их в файл. Все рабртает! В понедельник прийду на работу и опробую уже на реальном проекте.
Спасибо за совет. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |