webForumDet fria alternativet

Paralellporten i C...

C/C++

16 svar · 467 visningar · startad av funkstar

Medlem sedan juli 20037 inlägg
Frågan#1

Tjenna.
Sitter och försöker ta kontroll över paralellporten med C-kommandot "outport". Det fungerar ibland och iboland inte. Mycket märkligt. När jag lägger det i en for-loop, ex
"for (i=950 ; i<960; i++){
outport(i, 213);
printf("Port %d", i);
}"
så funkar det ibland. Hänger sig lika ofta. Som fristående anrop, ex
"outport(958, 111);"
så funkar det inte alls...

Mycket konfunderad. Kan det ha ngt med XP (igen...) att göra?

MVH

P.

Medlem sedan juni 200010 432 inlägg
#2

Den funktionen är väl ändå ganska systemspecifik? Förresten så är inte NT-system (XP,W2K,NT4) så glada i att man anropar LPT utan att använda registrerade rutiner. Finns denna dll som tydligen ska funka (enligt vad som sägs, själv så har jag ingen erfarenhet av den) även med NT.

Sen när du fått till ett vettigt anrop, tänk på att inte hålla programmet låst vid en port, utan släpp processen till contex switchern med exempelvis Sleep (windows.h). Annars blir det lätt låsning om man exempelvis håller en resurs i en loop.

Medlem sedan juni 20022 599 inlägg
#3

Om det är en 32-bitarsapplikation vi talar om så skulle jag rekommendera något av de här libben:

http://www.internals.com (WinIO)

http://www.driverlinx.com/DownLoad/dnload.htm#Windows 95/NT Port I/O Driver

för att få parallellportsaccess på XP.

outport.dll i PeWs länk är från 1990(!) och fungerar bara om den anropas från 16-bitarskod (och då är den dessutom helt onödig. Den är egentligen avsedd för VB som saknar inp/outp-funktioner.)

Medlem sedan juni 200010 432 inlägg
#4

Ja där ser man. Jag sa inte att den var bra men däremot att den fanns ;)

Medlem sedan juli 20037 inlägg
#5

Ja det hela verkar ju fint, men hur får man igång tröskverket? Vilka filer ska läggas vart och så? Kan säkert ta mig igenom det själv men det är ju lättare att fråga folk som kan.

P.

Medlem sedan juli 20037 inlägg
#6

Jag laddade hem WinIO alltså.

P.

Medlem sedan juni 200010 432 inlägg
#7

Det följer med en hjälpfil under katalogen 'help'. Läs den! Den verkar ta upp allt du behöver veta, steg för steg.

Medlem sedan juli 20037 inlägg
#8

Ja, jo den har jag ju sett. Jag jobbar i Borland C (inte builder)och det står inget om hur man gör i det. Det som jag har lurat ut har inte funkat. Är det ngn som verkligen vet hur man ska göra (kanske tom har gjort det själv) och kan förklara det på ett bra och pedagågiskt sätt här på denna sida?

Medlem sedan juni 20022 599 inlägg
#9

Killen som gjort lib:et skriver lite om Borland på sin sida: http://www.internals.com/faq_main.htm.

Vad han alltså rekommenderar är att man inte inkluderar libbet vid länkningen utan istället använder explicit länkning via LoadLibrary/GetProcAddress under run-time.

En helt annan lösning om du inte får rätt på det kan vara denna: http://home.online.no/~jensts/Satellite/dvb2000/how_to_install_totalio.htm.

Totalio ger total port-access till samtliga appar på NT, 2000 och XP (tror jag) vilket gör att inp, outp och outport (antar jag) kommer att funka lika bra som på en Win9x:a. Se bara till att följa instruktionerna och se till att ha Totalio laddat bara är du behöver.

Och så en fråga: Du skriver att din kod fungerar ibland. ÄR det en 16-bitarsapplikation du skriver? Annars låter det väldigt konstigt.

Medlem sedan juli 20037 inlägg
#10

Jag började med att skriva en vanlig dos-applikation som ska köras från ett JAVA prog. Det är lätt med grafiken i JAVA men svårt med hårdvaran tyckte jag. Så ett vanligt dos anrop från java med lite parametrar var mitt mål när jag började. Nu är jag inte så säker längre. Men ska kolla länkaran och se vart det leder.

Hur funkar explicit länkning (och vad är det)?

P.

Medlem sedan juni 200010 432 inlägg
#11

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_link_explicitly.asp

Visserligen visualstudio men principen framgår ju.

Medlem sedan juni 20022 599 inlägg
#12

Jag började med att skriva en vanlig dos-applikation

Om du med dos-applikation menar en "ren" 16-bitars DOS-applikation så har du ingen nytta av några lib i det här fallet. Från en 16-bitarsapp så ska det gå att läsa och skriva till parallellporten ändå. Så isåf är det nåt annat som är fel.

Det är lätt med grafiken i JAVA men svårt med hårdvaran tyckte jag.

Ja, det är det nog, fast parallellporten går att komma åt via Suns Comm API. Det följer med ett exempel när man laddar ner den som heter ParallelBlackBox.

Medlem sedan juli 20037 inlägg
#13

Jag menar att när jag startar mitt projekt i Borland C++ så väljer jag:
Target Type: Application [.exe]
Platform: DOS [Standard] (inte DOS [overlay] alltså)
Frameworks: Class Library
Math Support: Emulation
Sen väljer jag att det ska tolkas som C kod och inte C++ kod och sen klickar jag på OK.
Det menar jag med en DOS-applikation.

Medlem sedan juni 200010 432 inlägg
#14

Om du kollar i target-expert ska du (om jag inte minns fel) kunna ange i en liten rullist om det ska vara DOS-16 eller DOS-32.

Medlem sedan juli 20037 inlägg
#15

Du minns nog fel. Men man kan välja storlek på projektet och det verkar som att det har ngt med det att göra. Jag har valt rätt (enl vad jag kan få ut av hjälpen). Om WinIO.h är en C++ grejj. Kan jag använda den ialla fall då eller är det ngt som inte går?
Jag får ordentliga kompileringsfel när jag gör ngt som bara ser ut så här:
"#include<stdio.h>
#include<conio.h>
#include<winio.h>

int main (void){
return 0;
}
"
Det är när den kompilerar winio.h som det kommer en massa fel.

Medlem sedan juni 20022 599 inlägg
#16

Ett enkelt experiment:

Dra ut en genväg till en till en exe-fil som du lyckats kompilera. Högerklicka på genvägen och välj Properties, om rutan Run in separate memory space INTE är dimmad så är det en 16-bitarsapp du skriver.

Och isåf har du sannolikt ingen som helst nytta av WinIO eftersom du redan borde ha portaccess. Problemet ligger då alltså nånannanstans. Var vet jag inte eftersom jag aldrig använt outport (eller Borland öht).

Medlem sedan juni 200010 432 inlägg
#17

funkstar skrev:

Du minns nog fel. Men man kan välja storlek på projektet och det verkar som att det har ngt med det att göra. Jag har valt rätt (enl vad jag kan få ut av hjälpen). Om WinIO.h är en C++ grejj. Kan jag använda den ialla fall då eller är det ngt som inte går?
Jag får ordentliga kompileringsfel när jag gör ngt som bara ser ut så här:
"#include<stdio.h>
#include<conio.h>
#include<winio.h>

int main (void){
return 0;
}
"
Det är när den kompilerar winio.h som det kommer en massa fel.

Det jag tänkte på står det om här ...

Posta dina kompileringsfel :)

270 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)