Article View: be.comp.programming
Article #10057Re: seriële communicatie
From: Philip Paeps
Date: Sat, 30 Mar 2002 20:27
Date: Sat, 30 Mar 2002 20:27
67 lines
3368 bytes
3368 bytes
Bart Vandewoestyne <Bart.Vandewoestyne@pandora.be> wrote:
> Voor een schoolproject dien ik twee PC's te laten communiceren over de
> seri�le poort. De volledige opgave staat op
> http://mc303.ulyssis.org/downloads/Opgave2.jpg
Aah, toffe opdracht :-) Ga je even je werk aan hebben, denk ik. Wel lief van
de proffen dat ze de algo's erbij zetten, niet? :-)
> E�n ding staat vast, en dat is dat ik het project onder linux doe.
> Qua programmeertaal mogen we echter kiezen, en ik vroeg me af wat voor
> jullie zowat de beste programmeertaal leek om dit te doen?
Seriele communicatie in C is enorm makkelijk, vooral als je zelf volledige
controle hebt over de implementatie van de zender en de ontvanger. Je kunt
het ook in C++ of Java doen, maar ik denk dat je met C eigenlijk al goed zit:
het is een wat meer 'basic' taal die uitermate geschikt is voor het aansturen
van hardware.
> Ik dacht normaalgezien aan C (kernel module schrijven en dan userspace
> programma die module laten aanspreken).
Da's overkill. Gebruik gewoon wat je al hebt. Niet vergeten dat *alles*
(bijna alles) onder un*x een file is, en dat je gewoon je poort kunt openen
met open(2).
Ik ben bij mijn projectjes regelmatig verder geholpen door het document
_Serial Programming Guide for POSIX Operating Systems_ van Michael Sweet. Te
vinden in verschillende (open) formaten op deze website:
<http://www.easysw.com/~mike/serial/>
Het volgende voorbeeld uit dat document demonstreert waarom een kernel module
overkill is:
| int
| open_port(void)
| {
| int fd;
|
| fd = open("/dev/ttyf1", O_RDWR | O_NOCTTY | O_NDELAY);
| if (fd == 1)
| {
| /* couldn't open the port */
| perror("open_port: Unable to open /dev/ttyf1 - ");
| }
| else
| fcntl(fd, F_SETFL, 0);
|
| return (fd);
| }
De juiste fcntl(2) flags kun je vinden in de manpage, die durven soms wat te
verschillen van OS tot OS. Normaal zijn ze conform POSIX (onder FreeBSD zijn
ze dat).
> Iemand die voor dit soort stuff een andere programmeertaal zou kiezen
> en waarom?
Naah, keep it simple, use C.
- Philip
--
Philip Paeps philip@paeps.cx
The feasibility of an operation is not the best
indiciation for its performance.
Technical Details
Message-ID:
<Zcpp8.40705$DE4.5461@afrodite.telenet-ops.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news1.google.com!sn-xit-02!sn-xit-03!supernews.com!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<3CA5E4F0.D91DD602@pandora.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII
X-Google-Thread: fcea4,942e997e4d61238f
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2002-03-30 12:34:45 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news1.google.com!sn-xit-02!sn-xit-03!supernews.com!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
From: Philip Paeps <philip@paeps.cx>
Subject: Re: seriële communicatie
Newsgroups: be.comp.programming
References: <3CA5E4F0.D91DD602@pandora.be>
User-Agent: tin/1.5.12-20020323 ("Sugar") (UNIX) (FreeBSD/4.5-STABLE (i386))
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: 8bit
Lines: 67
Message-ID: <Zcpp8.40705$DE4.5461@afrodite.telenet-ops.be>
Date: Sat, 30 Mar 2002 20:27:37 GMT
NNTP-Posting-Host: 213.118.135.125
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1017520057 213.118.135.125 (Sat, 30 Mar 2002 21:27:37 MET)
NNTP-Posting-Date: Sat, 30 Mar 2002 21:27:37 MET
Organization: Telenet Internet