Отговори на тема  [ 22 мнения ]  Отиди на страница Предишна  1, 2
DOS, "С", прексъвания и управление на COM порта 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 21, 2005 9:35 pm
Мнения: 152
Местоположение: Варна
Мнение 
jony++ Програма, която ползва директен достъп до портовете може да тръгне под ДОС/Win9x но NT базираните Windows
няма да ти позволят такива *своеволности* :). и ще трябва да правиш други магии... Ползвай Win API-тата
CreateFile, WriteFile, ReadFile.... Ако пък толкова искаш да пишеш драйвери за Win-а потърси си Microsoft DDK.


Вто Яну 24, 2006 6:58 pm
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 27, 2005 2:47 pm
Мнения: 349
Местоположение: Varna
Мнение 
Джони, това което правиш за обикновено ПЦ-е ли е или за някво ембедед?


Вто Яну 24, 2006 7:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
не се засягай, но тук се опитваме да спорим аргументирано. всеки, като каже нещо, може да се наложи да го защити.
онзи линк по-горе е към интеръпт листа на ралф браун. ако там го няма, значи може да се счита че го няма в 99% от случите.
затова ще е интересно да качиш материала за тайните на IBM & M$, да видим на какво се базира тази твоя убеденост в наличието на функция A5.


Вто Яну 24, 2006 7:09 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Сеп 19, 2005 12:49 am
Мнения: 61
Мнение 
Bezmozachen написа:
Джони, това което правиш за обикновено ПЦ-е ли е или за някво ембедед?


За връзка между ПС и ембедед. Ама като гледам какъв спор се разрази направо се чувствам виновен че постнах тази тема само да скарвам хората :( . А и съвсем се опърках вече 8O


Сря Яну 25, 2006 5:29 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
t_i_t_o написа:
алех11, брато, това че даваш едно от решенията на проблема не означава че е единственото или че е най доброто!!! ама никакав проблем не е да се хване кое да е прекъсване в ДОС в собствена програмка КОЯТО НЕ Е РЕЗИДЕНТНА а нормална узерска - та даже е за предпочитане щото е по просто.
Твоята идея е просто нещо като драйвер кой да могат да го ползват всички ДОС програмки - ама кому е нужно това??? На пича просто му трябва да си работи с кома с неговата си програмка.
И недей да ми спориш че не съм прав щото мога да се подкрепя с сорсове :)


Изпревари ме. :) Действително, TSR не е задължителен при обработката на прекъсвания. То е един пач, с който се заобикаля липсата на многозадачност на ДОС-а. Това за .EXE и .COM също няма нищо общо с истината. Правил съм обработка на прекъсвания с Турбо Паскал. :roll:
Единствения подводен камък е ползването на АПИ-то на системата, когато си в прекъсване. Получаваха се едни много шибани сривове и последващи забивания. Имаше някакъв начин да се работи около този проблем, но вече не си спомням нищо. :(


Сря Яну 25, 2006 6:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
добре...
малко си загубих време да изровя някой стар пример.

Код:
// тези инклуди ти трябват задължително
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>

// прототипи
void interrupt (*oldirq3)(...);
void interrupt (*oldirq4)(...);

// твоята фунция, обслужваща IRQ3
void interrupt my_int3(...) {
    disable();              // disable ints

// тука правиш каквото трябва в прекъсването

    outportb(0x20,0x20);    // reset PIC
    enable();               // ints ok now
}

// твоята фунция, обслужваща IRQ4
void interrupt my_int4(...) {
    disable();              // disable ints

// тука правиш каквото трябва в прекъсването

    outportb(0x20,0x20);   // reset PIC
    enable();                    // ints ok now
}

// другите твои функции

main ( void ) {

int PIC1mask=0;                // define vars and set default values
int  tmp;

   disable();                        // disable interrupts
   PIC1mask = 0x1C;          // bits set for IRQ3, IRQ4 and IRQ2(cascade)

   // save old vectors and set new ones
   oldirq3=getvect(0xB);      // IRQ 3
   setvect(0xB,my_int3);

   oldirq4=getvect(0xC);      // IRQ 4
   setvect(0xC,my_int4);

   printf("Old vectors: %Fp, %Fp\n", oldirq3, oldirq4 );
   printf("New vectors: %Fp, %Fp\n",
   getvect(0xB), getvect(0xC) );

   tmp=inportb(0x21)&~PIC1mask;
   outportb(0x21,tmp);         // clear bits for IRQ2,3,4 in PIC1

   enable();                         // re-enable interrupts

   // end interrupt enable


   //
   // други неща, които ти трябват
   // и накрая
   // main_loop

   // тука вече си решил, че трябва да се излиза
   // turn off our interrupts and reset vectors
   disable();

   // restore old vectors
   setvect(0x0B,oldirq3);
   setvect(0x0C,oldirq4);

   outportb(0x21,inportb(0x21) | PIC1mask );

   printf("\nInterrupt vectors reset to: %Fp %Fp\n",
   getvect(0xB), getvect(0xC) );

   enable();

   return 0;
}


дано сега да ти е ясно какво съм писъл по-нагоре
ако имаш още питания, не се стеснявай

това по принцип е за турбо-С 2.х, но трябва да се компилира и на С++4.х
не мога да го пробвам, щото нямам дос от поне 15 години

и още нещо ВАЖНО: ако ще обслужваш прекъсвания >=9, трябва да работиш И с втория PIC (8259 = Programmable Interrupt Controller)


Сря Яну 25, 2006 6:21 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Сеп 19, 2005 12:49 am
Мнения: 61
Мнение 
ДедоБоре написа:
добре...
малко си загубих време да изровя някой стар пример.


Мерси ДедоБоре, когато има акод вече си е друго. И извинявай за загубеното време.


Сря Яну 25, 2006 7:48 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 22 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 8 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни