🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #10057

Re: seriële communicatie

#10057
From: Philip Paeps
Date: Sat, 30 Mar 2002 20:27
67 lines
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-mail
References: <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