Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Invité de passage
    Profil pro
    Inscrit en
    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 ?

  2. #2
    Modérateur
    Avatar de Bktero
    Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    2 642
    Détails du profil
    Informations personnelles :
    Âge : 27
    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 : 2 642
    Points : 6 297
    Points
    6 297

    Par défaut

    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é !

  3. #3
    Invité de passage
    Profil pro
    Inscrit en
    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

    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é

  4. #4
    Modérateur
    Avatar de Bktero
    Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    2 642
    Détails du profil
    Informations personnelles :
    Âge : 27
    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 : 2 642
    Points : 6 297
    Points
    6 297

    Par défaut

    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é !

  5. #5
    Invité de passage
    Profil pro
    Inscrit en
    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

    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

  6. #6
    Modérateur
    Avatar de Bktero
    Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    2 642
    Détails du profil
    Informations personnelles :
    Âge : 27
    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 : 2 642
    Points : 6 297
    Points
    6 297

    Par défaut

    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é !

  7. #7
    Invité de passage
    Profil pro
    Inscrit en
    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

    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*/

  8. #8
    Modérateur
    Avatar de Bktero
    Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    2 642
    Détails du profil
    Informations personnelles :
    Âge : 27
    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 : 2 642
    Points : 6 297
    Points
    6 297

    Par défaut

    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é !

  9. #9
    Invité de passage
    Profil pro
    Inscrit en
    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

    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.

  10. #10
    Modérateur
    Avatar de Bktero
    Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    2 642
    Détails du profil
    Informations personnelles :
    Âge : 27
    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 : 2 642
    Points : 6 297
    Points
    6 297

    Par défaut

    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é !

  11. #11
    Invité de passage
    Profil pro
    Inscrit en
    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

    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...

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •