| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Как се прави резидентна програма под ДОС? http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=4386 |
Страница 1 от 1 |
| Автор: | Начинаещ [ Чет Юни 21, 2007 10:35 pm ] |
| Заглавие: | Как се прави резидентна програма под ДОС? |
Здравейте! Изучавам С++ като пиша програмки за ДОС ОС. Пиша програма която да отчета времето на работа с компютъра. Но понеже под ДОС може да се работи само една програма, ми се налага да я напиша като резидентно. Но досега не съм програмирал резидентни програми. Моля, ако някой знае как става това да ми отговори. |
|
| Автор: | zaphod [ Пет Юни 22, 2007 8:29 am ] |
| Заглавие: | |
във началото на паметта има област наречена "векторна таблица", където са записани адресите на процедурите които се викат при разни събития. резидентните програми си стоят в паметта и записват адреса си във векторната таблица, на събитие което ги интересува. когато се извика ако иска може да извика след себе си оригиналната функция, ако не иска отебава.имай предвид че в съвременните ос тоя механизъм не се ползва вече, така че само ще ти размъти главата. и защо пишеш ДОС ОС, като последното ОС на ДОС значи същото? |
|
| Автор: | Cvetanov [ Пет Юни 22, 2007 9:12 am ] | |||||||||
| Заглавие: | ||||||||||
Има няколко прекъсвания свързани с часовника и се генерират около 18 пъти в секунда. Това което се ползваше за резидентните програми мисля беше 21 или 23. Но най-добре пусни едно търсене в Гугъл. Със сигурност ще намериш много примери. |
||||||||||
| Автор: | zaphod [ Пет Юни 22, 2007 9:45 am ] |
| Заглавие: | |
е не е казано че резидентната програма точно на часовника трябва да е, макар че за упражнение това е най-добрия избор. |
|
| Автор: | ps66 [ Пет Юни 22, 2007 10:55 am ] | ||||||||||||||||||
| Заглавие: | Re: Как се прави резидентна програма под ДОС? | ||||||||||||||||||
за да остане резидентна - при излизане трябва да извика някоя от функциите на INT 21 за да не се освободи паметта и. понеже няма кой да и дава време за работа (иначе си е зает блок памет) трябва да е вързана към някое прекъсване (таблицата с векторите) най-добре INT8 (55мс), CMOS часовника (през 1мс) или друго (RS232, клавиатура ....) трябва да се грижиш за запазване на регистрите, критичния флаг за ДОС, ... не си заслужава да започваш с това - ще ти е полезно ... само да даваш ъкъл по форумите това съм го взел от мноооого стар мой код (коментарите бяха да досовска кирилица и не стават за четене):
|
|||||||||||||||||||
| Автор: | syscop [ Съб Юни 23, 2007 12:14 am ] | |||||||||
| Заглавие: | ||||||||||
Горното ще освободи паметта заемана от обкръжението. Aко все пак момъка се сети да извика някъде по-долу asm mov ah, 31h asm mov al, retCode asm int 21h и успешно се е закачил за някое прекъсване, може и програмата да остане резидентна, че и да работи |
||||||||||
| Автор: | ps66 [ Съб Юни 23, 2007 7:04 am ] | |||||||||||||||||||||||||||
| Заглавие: | ||||||||||||||||||||||||||||
да прав си бях модифицирал C0 така че ако main върне 1 да остане резидента:
иначе е добре да се насочи и един друг вектор за комуникация с резидентната програма (поне да може да се деинсталира само) |
||||||||||||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|