Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Bibliothèques, systèmes et outils
Bibliothèques, systèmes et outils Forum d'entraide sur les bibliothèques, la programmation système et les outils en C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/09/2012, 16h38   #1
Careinet
Invité de passage
 
Inscription : septembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : septembre 2012
Messages : 6
Points : 0
Points : 0
Par défaut Fonction delay(), sleep(), wait() en C ?

Bonjour,

Je travaille sur Matlab où je crée une S-function en C avec compilateur basique (lcc-win32) et j'essaye d'intégrer une fonction d'attente mais ça ne fonctionne pas.

Quand je mets le header <windows.h>, j'ai le message d'erreur :
could not open source file "win.h"
#include <win.h>


Je précise le header <win.h> et j'ai un autre message d'erreur plus important :
(I) C0161-D; "C:\Program Files\MATLAB\R2007b\sys\lcc\include\win.h", line 8 pos 9; unrecognized #pragma
#pragma pack(push,1)
^
(E) C0018; "C:\Program Files\MATLAB\R2007b\sys\lcc\include\win.h", line 413 pos 23; expected a ")"
typedef int (CALLBACK *BFFCALLBACK) (HWND,UINT,LPARAM,LPARAM);
^
(E) C0018; "C:\Program Files\MATLAB\R2007b\sys\lcc\include\win.h", line 414 pos 24; expected a ")"
typedef UINT (CALLBACK *LPCCHOOKPROC) (HWND,UINT,WPARAM,LPARAM);
...
Error limit reached.
Compilation terminated.

20 Errors 4 Warnings 1 Informational


Je ne sais donc pas comment faire pour m'en sortir, toutes ces histoires d'erreurs qui n'en finissent pas me découragent. Quelqu'un aurait une idée ?
Careinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2012, 16h42   #2
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 704
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 704
Points : 4 171
Points : 4 171
Essaye de mettre #include <windows.h> pour voir.

Pourquoi utiliser lcc-win32 ? D'après Wikipedia, la dernière version stable a 9 ans ! Je ne pourrais que te conseiller d'utiliser un compilateur plus récent, comme MinGW qui est libre, et supporte les #praga pack et <windows.h> sans soucis.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/09/2012, 08h26   #3
Careinet
Invité de passage
 
Inscription : septembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : septembre 2012
Messages : 6
Points : 0
Points : 0
Je n'utilisais que ce compilateur car c'est le seul que l'ordi possédait (un Windows XP de 2002) et jusqu'à présent je n'avais eu aucun problème.
Je vais essayer de voir alors en changeant de compilateur.

En fait, je ne peux utiliser que ces compilateurs :
http://www.mathworks.fr/support/compilers/release2007b/
Je vais essayer via l'installation de Borland, aucun n'étant déjà installé
Careinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 09h30   #4
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 704
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 704
Points : 4 171
Points : 4 171
Pas GG sur ce coup, TheMathWorks...

As-tu essayé avec lcc-win32 mais en utilisant l'en-tête que je t'indique ?
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 09h43   #5
Careinet
Invité de passage
 
Inscription : septembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : septembre 2012
Messages : 6
Points : 0
Points : 0
J'ai évidemment essayé avec .
Ca m'indique ce message d'erreur :
could not open source file "windows.h"
#include <windows.h>

Quand je le regarde de plus près, je le trouve étrangement vide alors que je n'y ai jamais touché. Voici son contenu :
Code :
1
2
3
4
5
/* $Revision: 1.2 $ */
#ifndef _GNU_H_WIN32Headers
#define _GNU_H_WIN32Headers
#include <win.h>
#endif
Careinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 10h27   #6
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 704
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 704
Points : 4 171
Points : 4 171
Effectivement, c'est louche. A titre de comparaison, voici celui que me propose MinGW (portage de GCC pour Windows) :

Code :
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
	windows.h - main header file for the Win32 API
 
	Written by Anders Norlander <anorland@hem2.passagen.se>
 
	This file is part of a free library for the Win32 API.
 
	This library is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
*/
#ifndef _WINDOWS_H
#define _WINDOWS_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
 
/* translate GCC target defines to MS equivalents. Keep this synchronized
   with winnt.h. */
#if defined(__i686__) && !defined(_M_IX86)
#define _M_IX86 600
#elif defined(__i586__) && !defined(_M_IX86)
#define _M_IX86 500
#elif defined(__i486__) && !defined(_M_IX86)
#define _M_IX86 400
#elif defined(__i386__) && !defined(_M_IX86)
#define _M_IX86 300
#endif
#if defined(_M_IX86) && !defined(_X86_)
#define _X86_
#elif defined(_M_ALPHA) && !defined(_ALPHA_)
#define _ALPHA_
#elif defined(_M_PPC) && !defined(_PPC_)
#define _PPC_
#elif defined(_M_MRX000) && !defined(_MIPS_)
#define _MIPS_
#elif defined(_M_M68K) && !defined(_68K_)
#define _68K_
#endif
 
#ifdef RC_INVOKED
/* winresrc.h includes the necessary headers */
#include <winresrc.h>
#else
 
#include <stdarg.h>
#include <windef.h>
#include <wincon.h>
#include <winbase.h>
#if !(defined NOGDI || defined  _WINGDI_H)
#include <wingdi.h>
#endif
#ifndef _WINUSER_H
#include <winuser.h>
#endif
#ifndef _WINNLS_H
#include <winnls.h>
#endif
#ifndef _WINVER_H
#include <winver.h>
#endif
#ifndef _WINNETWK_H
#include <winnetwk.h>
#endif
#ifndef _WINREG_H
#include <winreg.h>
#endif
#ifndef _WINSVC_H
#include <winsvc.h>
#endif
 
#ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h>
#include <dde.h>
#include <ddeml.h>
#include <dlgs.h>
#include <imm.h>
#include <lzexpand.h>
#include <mmsystem.h>
#include <nb30.h>
#include <rpc.h>
#include <shellapi.h>
#include <winperf.h>
#ifndef NOGDI
#include <commdlg.h>
#include <winspool.h>
#endif
#if defined(Win32_Winsock)
#warning "The  Win32_Winsock macro name is deprecated.\
    Please use __USE_W32_SOCKETS instead"
#ifndef __USE_W32_SOCKETS
#define __USE_W32_SOCKETS
#endif
#endif
#if defined(__USE_W32_SOCKETS) || !(defined(__CYGWIN__) || defined(__MSYS__) || defined(_UWIN))
#if (_WIN32_WINNT >= 0x0400)
#include <winsock2.h>
/*
 * MS likes to include mswsock.h here as well,
 * but that can cause undefined symbols if
 * winsock2.h is included before windows.h
 */
#else
#include <winsock.h>
#endif /*  (_WIN32_WINNT >= 0x0400) */
#endif
#ifndef NOGDI
/* In older versions we disallowed COM declarations in __OBJC__
   because of conflicts with @interface directive.  Define _OBJC_NO_COM
   to keep this behaviour.  */ 
#if !defined (_OBJC_NO_COM) 
#if (__GNUC__ >= 3) || defined (__WATCOMC__)
#include <ole2.h>
#endif
#endif /* _OBJC_NO_COM */
#endif
 
#endif /* WIN32_LEAN_AND_MEAN */
 
#endif /* RC_INVOKED */
 
#ifdef __OBJC__
/* FIXME: Not undefining BOOL here causes all BOOLs to be WINBOOL (int),
   but undefining it causes trouble as well if a file is included after
   windows.h
*/
#undef BOOL
#endif
 
#endif
Ce qui est louche aussi, c'est que le message d'erreur laisse à penser qu'il n'a pas trouvé le fichier.

Tu peux essayer avec Borland C++, bien qu'il te faudra peut-être une version ancienne comme indiquée dans ta page.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/09/2012, 13h34   #7
Careinet
Invité de passage
 
Inscription : septembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : septembre 2012
Messages : 6
Points : 0
Points : 0
Nouvel essai mais avec Borland, je mets #include <windows.h> et j'ai de nouveau
could not open source file "windows.h"
#include <windows.h>


Je copie ce fichier dans le dossier avec mes autres fichiers et voilà un nouveau message d'erreur :
(E) C1326; "..\windows.h", line 28 pos 30; unimplemented target "c"
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
Careinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 14h14   #8
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 704
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 704
Points : 4 171
Points : 4 171
As-tu crée ou récupéré ce code ? Si 1 : pourquoi avoir mis de pragma ? Si 2Où as-tu récupéré le code ? Quel compilateur avait été utilisé pour le faire marcher ?
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 14h40   #9
Careinet
Invité de passage
 
Inscription : septembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : septembre 2012
Messages : 6
Points : 0
Points : 0
Je ne touche jamais aux codes des headers.
J'ai juste un problème : à chaque fois, mon compilateur n'a pas l'impression de connaître la localisation des headers, alors qu'ils sont dans son propre dossier, dans Include.
A chaque fois, pour qu'il les reconnaisse, je dois copier le fichier header à l'endroit où sont les autres fichiers de ma S-function (le fichier .c, le modèle simulink et C-MEX file).

En fait j'ai deux compilations à faire : celle pour transformer le fichier .c en C-mex file qui se déroule sans problème, puis celle pour lancer la simulation, là où les problèmes arrivent.
Careinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 15h03   #10
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 704
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 704
Points : 4 171
Points : 4 171
Par défaut, ton compilateur ne va pas chercher dans un sous-dossier Includes, c'est pour ça que tu dois mettre les headers dans le même dossier que les fichiers sources.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/09/2012, 09h24   #11
Careinet
Invité de passage
 
Inscription : septembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : septembre 2012
Messages : 6
Points : 0
Points : 0
J'ai résolu une partie du problème.
Ce n'est pas le compilateur de Matlab qui pose problème, mais le compilateur de la carte de simulation qui lui est propre.

J'ai fouillé ses headers pour y trouver des fonctions ressemblant à sleep(), delay() ou wait().
J'ai trouvé une fonction dans un header que j'ai ajouté :
Code :
_STLP_IMPORT_DECLSPEC void _STLP_STDCALL Sleep(unsigned long);
Au final de nouvelles erreurs quand j'essaye de l'utiliser :

(I) C0007-D; "C:\PPCTools33\inc\stlport\config\stl_mri.h", line 217 pos 52; unrecognized token
# define _STLP_NATIVE_HEADER(header) STRINGIFY(..\##header)
^
(I) C0007-D; "C:\PPCTools33\inc\stlport\config\stl_mri.h", line 218 pos 54; unrecognized token
# define _STLP_NATIVE_C_HEADER(header) STRINGIFY(..\##header)
^
(I) C0007-D; "C:\PPCTools33\inc\stlport\config\stl_mri.h", line 219 pos 64; unrecognized token
# define _STLP_NATIVE_CPP_RUNTIME_HEADER(header) STRINGIFY(..\##header)
^
(I) C0007-D; "C:\PPCTools33\inc\stlport\config\stl_mri.h", line 220 pos 64; unrecognized token
# define _STLP_NATIVE_OLD_STREAMS_HEADER(header) STRINGIFY(..\##header)
^
(E) C0020; "C:\PPCTools33\inc\stlport\stl\_config.h", line 566 pos 1; identifier "namespace" is undefined
_STLP_BEGIN_NAMESPACE _STLP_END_NAMESPACE
^
(E) C0065; "C:\PPCTools33\inc\stlport\stl\_config.h", line 566 pos 1; expected a ";"
_STLP_BEGIN_NAMESPACE _STLP_END_NAMESPACE
^
(I) C0007-D; "C:\PPCTools33\inc\stlport\cstddef", line 46 pos 12; unrecognized token
# include _STLP_NATIVE_C_HEADER(stddef.h)
^
(F) C0005; "C:\PPCTools33\inc\stlport\cstddef", line 46 pos 43; could not open source file "..\stddef.h"
# include _STLP_NATIVE_C_HEADER(stddef.h)
^
Compilation terminated.

2 Errors 5 Informationals


La ligne 566 qui pose problème affiche :
_STLP_BEGIN_NAMESPACE _STLP_END_NAMESPACE

Je ne sais plus comment faire...
Careinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h17.


 
 
 
 
Partenaires

Hébergement Web