Πρόσβαση στην παράλληλη θύρα
Chameleon
cham_gss at hotmail.com
Fri Apr 28 01:49:33 EEST 2006
Giorgos Keramidas wrote:
> On 2006-04-28 00:54, Chameleon <cham_gss at hotmail.com> wrote:
>> Έχουμε φτιάξει ένα CNC μηχάνημα το οποίο το χειριζόμαστε μέσω παράλληλης
>> θύρας.
>>
>> Δυστηχώς είμαστε εντελώς άσχετοι στο να φτιάξουμε ένα driver για Windows
>> κι έτσι τη χειριζόμαστε μέσω των εντολών assembly IN και OUT από DOS.
>>
>> Επειδή το DOS είναι λίγο deprecated πλέον, (για να μην πω και η
>> παράλληλη θύρα) αποφασίσαμε να κάνουμε τον driver σε ένα ζωντανό
>> λειτουργικό που είναι ή τα Windows ή το Linux.
>>
>> Η γενική ιδέα οτι όλες οι συσκευές είναι αρχεία και μπορούμε να γράφουμε
>> και να διαβάζουμε απο αυτές μας ενθουσίασε. Αποφασίσαμε λοιπόν Linux.
>> (Αλλωστε δεν χρειάζεται να ξέρουμε και πολλά. Ξέρουμε SDL, wxWidgets,
>> C++ αυτά φτάνουν, συν οτι μαθαίνω Qt)
>>
>> Επειδή είδα οτι πολλοί ξέρουν να προγραμματίζουν εδώ μέσα σε Linux, θα
>> παρακαλούσα αν κάποιος ξέρει να μου πει τι πρέπει να κάνω για να στέλνω
>> με μια δειγματοληψία *ακριβώς* 50000bytes/sec στην παράλληλη θύρα.
>
> Για να τρέχει κάποιο κομμάτι από το πρόγραμμά σου σε τακτά χρονικά
> διαστήματα, χρειάζεσαι -- λογικά -- ένα high-precision timer, όπως
> π.χ. αυτά που μπορεί να σου δώσει η κλήση setitimer() με ITIMER_REAL
> τύπο, και ένα καλό signal handler για να προλαβαίνεις όλα αυτά τα
> SIGALRM.
>
> Εναλλακτικά, ένα polling loop με nanosleep(), μπορεί να είναι πιο καλό
> αν μόνο αυτό θες να κάνει το πρόγραμμα.
>
> Για να γράψεις στην παράλληλη, αρκεί να έχεις δικαιώματα/permissions στο
> κατάλληλο device node και να ανοίξεις για γράψιμο το "/dev/lp0",
> "/dev/lp1" ή όποια άλλη παράλληλη θύρα θέλεις.
to "lp0" loipon! Telika to linux einai gamato!
den 3erw pws 8a htan autos o driver se Windows, alla fantazomai oti 8a
h8ele poly prama!
o root sigoura exei dikaiwma prosbashs.
efoson einai ena aplo arxeio, na ypo8esw oti isxyoyn ta dikaiwmata
owner/omadas/all?
(an kai o PentiumI pou 8a trexei to driver 8a einai embedded sto CNC
opote den yparxei problhma an to trexoyme san root)
> Ο κώδικας για γράψιμο δε θα πρεπε να είναι ιδιαίτερα πιο περίπλοκος από
> κάτι σαν:
>
> 1 #include <sys/types.h>
> 2 #include <sys/stat.h>
> 3
> 4 #include <errno.h>
> 5 #include <fcntl.h>
> 6 #include <stdio.h>
> 7 #include <string.h>
> 8 #include <sysexits.h>
> 9 #include <unistd.h>
> 10
> 11 #ifndef PARALLEL_PORT
> 12 #define PARALLEL_PORT "/dev/lp0"
> 13 #endif
> 14
> 15 int
> 16 main(void)
> 17 {
> 18 unsigned char buf[256];
> 19 size_t k;
> 20 int fd;
> 21
> + 22 fd = open(PARALLEL_PORT, O_RDWR, S_IREAD | S_IWRITE);
> + 23 if (fd == -1) {
> + 24 fprintf(stderr,
> + 25 "error: open: %s: %s\n",
> + 26 PARALLEL_PORT, strerror(errno));
> + 27 fflush(stderr);
> + 28 return EX_OSFILE;
> + 29 }
> 30
> 31 for (k = 0; k < sizeof(buf); k++)
> 32 buf[k] = (unsigned char)(k % 0xff);
> 33
> + 34 if (write(fd, buf, sizeof(buf)) == -1) {
> + 35 fprintf(stderr,
> + 36 "error: open: %s: %s\n",
> + 37 PARALLEL_PORT, strerror(errno));
> + 38 fflush(stderr);
> + 39 return EX_IOERR;
> + 40 }
> 41
> + 42 (void) close(fd);
> 43 return 0;
> 44 }
>
> Οι πιο σημαντικές γραμμές είναι σημειωμένες με '+'.
blepw oti xrhsimopoieis tis
open anti fopen
write anti fwrite
close anti fclose
yparxei skopimothta na mhn xrhsimopoieis tis default biblio8hkes ths C?
(autes einai oi POSIX klhseis pou h blammenh microsoft exei balei
mprosta to "_" gia na 3exwrizei h hli8iothta ths kai na ftynoyn aima oi
programmatistes sta #define)
eyxaristw poly...
pio poly apo oti fantazesai...
mexri ta Windows Me 3ereis, mporouses anoigontas ena arxeio "lpt1:" na
ekanes sta Windows akribws to idio (apo DOS 3.1 akoma). Meta omws me ta
Windows 2000 kai meta phrame to boulo. Xairomai poy sto linux den alla3e
tipota.
More information about the Linux-greek-users
mailing list