30. november 2004 - 12:15Der er
9 kommentarer og 1 løsning
Seriel kommunikation i Win32
Hej Eksperter!
Jeg ønsker at skrive og læse fra COM porten fra min Win32 applikation, skrevet i C (og bruger WinAPI). Dette går også fint så længe det er non-overlapped fil-operationer. Problemet er nu, at jeg ikke ved hvornår der modtages noget på COM porten. Er det muligt at lave det interruptstyret (eller lign.) således at når der modtages data på porten kaldes en funktion, som læser på porten og lægger det læste data over i en buffer (evt. en fil).
Vil dette kunne lade sig gøre eller er det nødvendig at starte en separat proces op, som hele tiden overvåger porten?
Man kan godt lave en separat process til at læse ved Non-overlapped IO. Ulempen ved denne metode er at skrive operationen vil blive blokeret indtil læse operationen er færdig (og omvendt). Man kan sætte læse timeout ned til f.ex. et sek, skrive operationen vil da højest blive blokeret i et sek; om det er acceptablet ahænger mest af applikationen, hvis det er kritisk kan man evt bruge to tråde, en til at læse og en til at skrive. Jeg tror jeg har et eksempel på dette til at ligge.
Jeg har kikket lidt på overlapped, men aldrig fået det til at virke, men jeg kan måske strikke noget sammen på et par dage (overvejer at lave et program til at sende og modtage SMS via en mobil tilsluttet com-porten).
Skal det være C, eller må der godt bruges C++? Hvilken kompiler bruger du?
Jeg har leget lidt mere med non-overlapped IO. Det bedste resultat opnår jeg ved at sætte rx-timeout til 0 så ReadFile returnerer øjeblikkeligt og så lave et lille delay i loopen (Sleep(100)).
Først og fremmest tak for responsen, jeg var bange for at folk havde fået nok at seriel kommunikation her på eksperten og ikke gad at svare :) Jeg er pt. i gang med at kigge på noget multithreading i Petzold, men vender lige tilbage i løbet af en times tid med status. Koden skal holdes i C, og jeg bruger VS.NET
Jeg har nu arbejdet på at starte en seperat tråd op, som bruger overlapped io til læse og skrive på porten, men det volder en del kvaler..
Du skriver at du måske har et eksempel til at ligge, som starter to tråde op som så hhv. læser og skriver vha non-overlapped io. Er dette skrevet i C (eller nemt at skrive om til C)? Det vil jeg meget gerne prøve at kigge på så.
Det bør tilføjes at det er noget jeg har forsøg at flække sammen fra en c++ klasse til serial komm, som jeg har fundet på nettet, men da jeg er under lidt af et tidspres, er der desværre ikke lige tid til at opfinde hjulet endnu engang.
Det blev til et meget simelt terminal program. Det kan bruges til at sende AT-kommandoer til et modem. Du skriver blot kommandoen (F.ex. AT) og trykker enter, svaret fra modemet vil blive vist øverst.
Det ser ganske brugbart ud. Jeg kigger lige noget mere på det imorgen, men indtil videre tak for hjælpen; du er velkommen til at smide et svar, hvis du vil? Jeg har ikke umiddelbart brug for andre kommentarer.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.