Dans le cadre de mon projet tutoré, je dois développer une application sous mingw en C qui pilote une carte d'acquisition. pour cela j'aurais besoin des fonction permettant de piloter le port serie.
Merci d'avance pour vos réponses.
Dans le cadre de mon projet tutoré, je dois développer une application sous mingw en C qui pilote une carte d'acquisition. pour cela j'aurais besoin des fonction permettant de piloter le port serie.
Merci d'avance pour vos réponses.
Mingw est un compilateur pour Windows. On ne peut plus bricoler les I/O sous Windows. Il faut passer par des fonctions systèmes comme OpenFIle(), WriteFile() etc.Envoyé par etudiantgeii
Il y a des exemples sur le Web et dans MSDN.
Pas de Wi-Fi à la maison : CPL
Merci pour l'info, je vais aller me renseigner.
Cela dit nous developpons sous windows 98, les I/O y sont elles vérouillées également ?
Je ne sais pas, mais en tout cas, qu'une application aille bricoler directement dans la machine, c'est de la mauvaise pratique. Les systèmes évoluent vers plus de sécurité et tendent à interdire ces pratiques douteuses. Il y a des drivers pour ça...Envoyé par etudiantgeii
Pas de Wi-Fi à la maison : CPL
Ok on va regarder ca, merci pour la réponse.
Les I/O ne sont pas verrouillées sous 98. Sous visual 6, les fonctions pour les utiliser étaient déclarées dans <conio.h>.
Si tu dois, comme un de mes condisciples en BTS récupérer des données sur une carte faite à la do-it-yourself, il te faudra justement passer par les IO.
Par contre, si c'est une carte connue possédant un driver, ben il serait mieux d'utiliser celui-ci...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
En fait on a des routines (avec point c et tout) mais notre prof veut que l'on utilise MingW, or probleme les routines utilisent outportb(), fonction qui n'est pas reconnu par MingW. Donc on a cherché des fonctions semblables mais qui soit reconnu par MingW.
On a trouvé outp, on va verifier (des qu on pourra acceder au pc ) ces fonctions. On vous tiendra au courant si ca marche (évidemment si vous en avez rien a faire faut le dire XD)
A+
Il me semble que MingW utilise msvcrt.dll, tu peux donc tenter d'utiliser _inp/_outp de cette lib (qui est celle de VC++).
http://msdn.microsoft.com/library/en-us/vclib/html/_crt__inp.2c_._inpw.2c_._inpd.asp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #if defined(__cplusplus) extern "C" { #endif int __cdecl _inp(unsigned short); unsigned short __cdecl _inpw(unsigned short); unsigned long __cdecl _inpd(unsigned short); int __cdecl _outp(unsigned short, int); unsigned short __cdecl _outpw(unsigned short, unsigned short); unsigned long __cdecl _outpd(unsigned short, unsigned long); #if defined(__cplusplus) } #endif
http://msdn.microsoft.com/library/en-us/vclib/html/_crt__outp.2c_._outpw.2c_._outpd.asp
mais bon... faudrait peut être mieux se les coder (fonctions assembleur en ligne), ou mieux comme ça été éviqué : utiliser l'API Win32 (CreateFile...).
Vous la pilotez comment votre carte d'acquisition ?
En fait on pilote la carte d'acqui par port serie ISA, Je suis en train d'utiliser createFile etc mais j'ai un soucis le premier parametre de cette fonction demande un char* or outport prenait un short vu que j'aimerais faire quelque chose d'assez ressemblant, comment faire ?
Ca n'a rien à voir. Avec in/out tu attaques directement le hardware, en modifiant les I/O ports.
Avec CreateFile, tu manipules ton port comme si c'était un fichier. CreateFile pour l'ouvrir, ReadFile / WriteFile pour lire / écrire dedans, CloseHandle pour fermer. Et ça marche aussi en C avec fopen / fread / fwrite / fclose, sauf que tu peux pas faire de réglages (SetCommState ...).
Donc le nom à donner c'est celui du fichier associé au port, soit "COM1" ou "COM2" par exemple.
http://msdn.microsoft.com/library/en-us/dnfiles/html/msdn_serial.asp
http://c.developpez.com/faq/vc/?page...WithSerialPort
Le principe consiste donc à écrire dans ce fichier pour envoyer des caractères sur le port.
Je vais utiliser, avec MinGW, CloseHandle()...
Le seul problème est que, la seule donnée pour accéder au port que l'on a, est une adresse hexa et non un nom du type COM1...
Donc, ta carte n'a pas de driver?
Dans ce cas pas le choix, il faut utilier les fonctions de conio.h (inp/outp)
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Bah si elle a des drivers... enfin on a des point c et point h, mais le soucis c'est que mingw devellopper studio accepte pas outport.
Donc dans un premier temps on a pensé a utilise outp et inp, comme tu l'as dit, mais il semblerait qu'il marche pas non plus (ou alors c'est moi qui suis totalement con) donc la je suis parti sur CloseHandle(), CreateFile() etc mais c'est pas super simple et je me demande surtout si je peux filer a CreateFile une adresse hexa pour le port car c'est tous ce que j'ai concernant le port
voila
Tu ne peux pas ouvrir un port avec une adresse Hexa.
CreateFile() ne peut ouvrir que des fichiers (ou plus vraissemblablement des tubes nommés) mis à leur disposition par les drivers.
Ils montrent quel genre de fonction, tes .c/.h ?
Et pourquoi mingW ne les accepte pas ? Tu es sûr que ces fichiers source et header sont compilables sous Win32, au moins? (si ce sont des sources et headers pour DOS, c'est mort pour mingW)
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je t'ai expliqué que l'adresse hexa n'intervient pas du tout, à aucun moment, avec CreateFile. C'est caché, ça n'a rien à voir. L'approche est totalement différente.
Si c'est vu comme un port COM, tu as forcément un fichier virtuel de type COM1/COM2/COMx qui existe. Trouve celui associé à ta carte. Tu peux utiliser winobj:
http://www.sysinternals.com/Utilities/WinObj.html
et regarder dans le répertoire "GLOBAL??", tu auras la liste des fichiers associés aux périph (CdRom0, COM1, COM2, ...).
Sinon, garde ton approche inp / outp. Je t'ai donné le code pour déclarer ces fonctions dans devcpp...
Ok je vais essayer ton code avant de me lancer dans les createfile qui de toute maniere ne répondrons pas a la demande de notre professeur.
Je vous dirai si ca marche, il ne devrait pas y avoir de raison.
Si tu pouvais m'expliqer ce que cela fait car je ne comprend pas bien tout.
En plus Mingw n'accepte pas les fonctions disable,enable, interrupt (utiliser pour les interruptions du timer de la carte acquisition). Connaissez vous des fonctions capable de les remplacer ou encore un moyen de les utiliser.
Merci
Bonjour,
Voici une DLL écrite en VS6 que j'ai trouvé sur le WEB et que j'utilise avec avec DEV C++ (mingw) pour piloter une carte I/O.
Si tu le souhaites je peux te transmettre sources + DLL par mail ...
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 // FILE: 8255.cpp // AUTH: P.OH // DATE: 07/01/98 // DESC: C source file for 8255 DLL - compiled with Microsoft Visual C++ 5.0 #include <stdio.h> #include <conio.h> // contains Visual C++'s inp and out functions // ------------------------------------------------------ // FUNC: Out8255 // DESC: uses Microsoft's Visual C++ _outp() function // to output a PortData to PortAddress // ------------------------------------------------------ extern "C" __declspec(dllexport) short _stdcall Out8255( int PortAddress, int PortData ) { short Dummy; // Need Dummy since _outp officially returns int // short is a 16-bit integer in Win32 C++ // whereas int is 32-bit integer Win32 C++ // use (short) to force returning 16-bit integer // back to VB Dummy = (short)(_outp( PortAddress, PortData )); return(Dummy); }; // end of Out8255 // ---------------------------------------------------- // FUNC: In8255 // DESC: uses Microsoft's Visual C++ _inp() function // to read PortAddress // ---------------------------------------------------- extern "C" __declspec(dllexport) short _stdcall In8255( int PortAddress ) { short PortData; // short is a 16-bit integer in Win32 C++ // whereas int is 32-bit integer in Win32 C++ // use (short) to force returning 16-bit integer // back to VB PortData = (short)(_inp( PortAddress )); return( PortData ); }; /* end of In8255 */
Cette dll ne fait rien d'autre que renommer _outp en Out8255 et _inp en In8255. Je vois pas trop ce que tu en attends.
Pour disable,enable, interrupt, il n'y a aucun équivalent dans le monde de la programmation 32 bits.
en faite au moment ou j ai tapé ce message je ne savais pas vraiement qu'il n'y existait pas d'equivalent donc .... dsl de ne pas avoir editer ... ^^
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager