IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Question sur le C sur MicroControleur ?


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut Question sur le C sur MicroControleur ?
    Salut à tous,

    j'ai le message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning[000] D:\Travail\DEV2004 PROJECT\Dev2004 asm\12864.c 101 : function declared implicit int
    Quant j'utilise la petite fonction sscanf qui permet de passer d'une chaine de charactére à un entier comme le montre l'exemple dans la Faq C http://lfe.developpez.com/FAQ/C/?pag...RINGS_numtostr

    j'ai fait un gros copier/coller dans mon code de l'exemple fournis par Developpez.com ! et j'ai ajouté en entête



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include<string.h>
    #include <stdio.h>
    pouvez vous me dire si cette fonction fonctionne sur micro controleur ou non ? j'utilise un PIC (compilateur HItech) pour les electronicien du forum !

    au fait, ce n'est pas uniquement un warning car ensuite ça ne se compile plus !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Error[000] C:\progra~1\HT-PIC\LIB\pic412-c.lib(sscanf.obj) 9 : signatures do not match: _sscanf (C:\progra~1\HT-PIC\LIB\pic412-c.lib: sscanf.obj): 0x1242/0x42
    Error[000]   : Can't find 0x17A words for psect rbss_0 in segment BANK0
    Error[000]   : Can't find 0xC words for psect temp in segment BANK0
    Error[000]   : Can't find 0x2 words (0x2 withtotal) for psect code_ptr in segment BANK0
    Error[000]   : undefined symbol:
    Error[000]   : _getche (C:\progra~1\HT-PIC\LIB\pic412-c.lib: cgets.obj)
    BUILD FAILED: Wed Jun 02 10:06:57 2004
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Pourriez-vous fournir le code du prototype de sscanf dans le fichier stdio.h de votre compilateur PIC ?
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Il faut te référer à la documentation de ton compilateur.
    Je ne crois pas que les fonctions d'IO soient disponibles vu qu'un microcontroleur n'a pas d'écran, de clavier, de système de fichier...

  4. #4
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Je travaille sur MicroControlleur (pas sur PIC) et la fonction sscanf() est disponible.
    Quant à scanf(), il est possible d'adapter getch() ou getchar().
    Ce n'est peut être pas forcément le cas ici.
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    La fonction sprintf fonctionne elle, je me suit dis que sscanf(buf, "%d", &n); devait fonctionner ! mais peut être pas, je vais voir la doc de 1000000000 mile page du compilateur PICC !

    ha ha !

    5.15 Standard I/O Functions and Serial I/OA number of the standard I/O functions are provided in the C library with the compiler, specifically those functions intended to read and write formatted text on standard output and input. A list of the available functions is in Table 5 - 11. More details of these functions are in the Library Functions chapter. Table 5 - 11 Supported STDIO FunctionsFunction namePurposeprintf(const char * s, ...)Formatted printing to stdoutsprintf(char * buf, const char * s, ...)Writes formatted text to buf
    Features and Runtime Environment
    180
    5
    Before any characters can be written or read using these functions, the putch() and getch() functions must be written. Other routines which may be required include getche() and kbhit().You will find samples of serial code which implements the putch() and getch() functions in the file serial.c in the SAMPLES directory.
    Apperement sprintf à été implementée ! par contre je ne trouve rien sur sscanf
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    j'ai trouvé, je test

    Description The atoi() function scans the character string passed to it, skipping leading blanks and reading an optional sign. It then converts an ASCII representation of a decimal number to an integer. Example #include*<stdlib.h>
    #include*<stdio.h>
    void*
    main*(void)
    {
    char*buf[80];
    int*i;
    gets(buf);
    i*=*atoi(buf);
    printf("Read*%s:*converted*to*%d\n",*buf,*i);
    }
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Regarde si la fonction "strtol" est implémentée, elle est plus pratique :
    long strtol( const char *nptr, char **endptr, int base );

    Parameters
    nptr
    Null-terminated string to convert
    endptr
    Pointer to character that stops scan
    base
    Number base to use
    Libraries
    All versions of the C run-time libraries.

    Return Value
    strtol returns the value represented in the string nptr, except when the representation would cause an overflow, in which case it returns LONG_MAX or LONG_MIN. strtol returns 0 if no conversion can be performed.
    Remarks
    The strtol function converts nptr to a long. strtol stops reading the string nptr at the first character it cannot recognize as part of a number. This may be the terminating null character, or it may be the first numeric character greater than or equal to base.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    ça marche

    merci à tous pour l'eguillage 8)
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Question sur le C sur MicroControleur ?
    Citation Envoyé par altahir007
    j'ai le message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning[000] D:\Travail\DEV2004 PROJECT\Dev2004 asm\12864.c 101 : function declared implicit int
    Quant j'utilise la petite fonction sscanf qui permet de passer d'une chaine de charactére à un entier comme le montre l'exemple dans la Faq C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include<string.h>
    #include <stdio.h>
    pouvez vous me dire si cette fonction fonctionne sur micro controleur ou non ? j'utilise un PIC (compilateur HItech) pour les electronicien du forum !
    Tu utilises ça http://www.htsoft.com/products/picccompiler.php ?

    Ce compilateur prétend être ANSI C :
    Citation Envoyé par HItech
    Compiler

    Features of the compiler include:

    * ANSI C, full featured and portable, supporting all standard data types (IEEE floating point, long data types, etc...)
    Il doit donc supporter sscanf() qui est une fonction standard. Mais, comme c'est une fonction lourde et compliquée (préférer strtol(), strtoul(), strtod()), elle n'est peut être pas accessible par défaut, et nécessite peut être l'activation quelques flags globaux. Ca devrait être expliqué en détails dans la doc.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    non j'utilise pas le compilateur pour dsp mais celui pour PIC16

    http://www.htsoft.com/products/picccompiler.php

    la fonction xtoi fonctionne à merveille j'ai cependant un autre problème toujours avec le même compilateur ! mais je vais essayer d'y remedier seul comme un grand

    merci pour l'info sur le ANSI C que je ne connaissait pas
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par altahir007
    non j'utilise pas le compilateur pour dsp mais celui pour PIC16

    http://www.htsoft.com/products/picccompiler.php
    OK. J'ai corrigé mon post (pour les archives!) (tu peux mettre le tien à jour)
    la fonction xtoi fonctionne à merveille j'ai cependant un autre problème toujours avec le même compilateur ! mais je vais essayer d'y remedier seul comme un grand

    merci pour l'info sur le ANSI C que je ne connaissais pas
    xtoi() n'est pas standard.
    atoi() est standard mais dépréciée depuis 1989. Lui préférer strtol().
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    tu peux m'aiguiller sur le transtypage ?

    j'ai deux variable de type unsigned int qui fonctionnent sur 2 octets si j'ai bien apris ma leçon : Test_Diametre et Test_Tmp

    j'ai un #define PI 3.1415926535 en début de programme pour simplifier les calculs dans la suite de mon code !

    Si j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test_Tmp = (unsigned int)(PI*Test_Diametre);
    ça fonctionne très bien par contre si j'introduit une seconde variable dans le calcul par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test_Tmp = (unsigned int)(PI*Test_Diametre*Test_AutreVariable);
    j'ai un message d'erreur à la C#$*ù :


    Error[000] : Can't find 0x2 words (0x2 withtotal) for psect code_ptr in segment BANK0
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par altahir007
    tu peux m'aiguiller sur le transtypage ?

    j'ai deux variable de type unsigned int qui fonctionnent sur 2 octets si j'ai bien apris ma leçon : Test_Diametre et Test_Tmp

    j'ai un #define PI 3.1415926535 en début de programme pour simplifier les calculs dans la suite de mon code !
    Quelquefois, <math.h> définit la constante M_PI. Mais ce n'est pas dans la norme du C (on ne sait pas pourquoi).
    Si j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test_Tmp = (unsigned int)(PI*Test_Diametre);
    Le calcul est fait en flottant, puis le resultat est converti en unsigned int. Le transtypage, n'est pas nécessaire, mais si il fait taire le compilateur, pourquoi pas.
    ça fonctionne très bien par contre si j'introduit une seconde variable dans le calcul par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test_Tmp = (unsigned int)(PI*Test_Diametre*Test_AutreVariable);
    j'ai un message d'erreur à la c**
    Error[000] : Can't find 0x2 words (0x2 withtotal) for psect code_ptr in segment BANK0
    C'est une question qui n'a rien à voir avec le langage C, mais avec le linker. Visiblement, ton segment de données en banque 0 est plein. Détails dans la doc du compilateur/linker.
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    simple question tu fais quoi dans la vie Emmanuel Delahaye ?
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par altahir007
    simple question tu fais quoi dans la vie Emmanuel Delahaye ?
    Que dit mon profil ?
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    Le calcul est fait en flottant, puis le resultat est converti en unsigned int. Le transtypage, n'est pas nécessaire, mais si il fait taire le compilateur, pourquoi pas.
    effectivement si je ne rajoute pas le transtypage j'ai juste un warning:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning[000] D:\Travail\DEV2004 PROJECT\Dev2004 asm\12864.c 151 : implicit conversion of float to integer
    C'est une question qui n'a rien à voir avec le langage C, mais avec le linker. Visiblement, ton segment de données en banque 0 est plein. Détails dans la doc du compilateur/linker.
    plus explicitement ? je suis un peu perdu là [/code]
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par altahir007
    simple question tu fais quoi dans la vie Emmanuel Delahaye ?
    Que dit mon profil ?
    Effectivement ...
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    j'ai trouvé la réponse là : Strange problem Can't find 0x2 words
    c'est le forum en anglais du compilateur ! c'est surement plus approprié pour poser ce genre de question mais je suis pas un killer en anglais alors je viens sur developpez.com comme d'habitude pour le C++ ou Delphi !

    apperement il y a plusieur BANK mémoire et je peux devant mes variables globales definir dans quel BANK je les places !!!! et hop un petit test pour voir :
    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
    Memory Usage Map:
     
    Program ROM   $0000 - $02EC  $02ED (   749) words
    Program ROM   $02EE - $0831  $0544 (  1348) words
    Program ROM   $0B99 - $0FFF  $0467 (  1127) words
                                 $0C98 (  3224) words total Program ROM 
     
    Bank 0 RAM    $0021 - $007F  $005F (    95) bytes total Bank 0 RAM  
    Bank 1 RAM    $00A0 - $00A0  $0001 (     1) bytes total Bank 1 RAM  
    Bank 0 Bits   $0100 - $0100  $0001 (     1) bits  total Bank 0 Bits 
     
     
    Program statistics:
     
    Total ROM used     3224 words (39.4%)
    Total RAM used       97 bytes (26.4%)
     
    Loaded D:\Travail\DEV2004 PROJECT\Dev2004 asm\128x64.hex
    BUILD SUCCEEDED: Wed Jun 02 15:32:37 2004
    Merci Emmanuel pour ton aide ! je note ton nom car je developpe un appareil embarqué à base de PIC & d'instrumentation pour tester des regards de canalisation (plaque d'egout) à l'eau ! et je risque d'avoir encore besoin d'un expert en Micro
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    c'est le forum en anglais du compilateur ! c'est surement plus approprié pour poser ce genre de question
    Oui!
    Merci Emmanuel pour ton aide ! je note ton nom car je developpe un appareil embarqué à base de PIC & d'instrumentation pour tester des regards de canalisation (plaque d'egout) à l'eau ! et je risque d'avoir encore besoin d'un expert en Micro
    Je ne suis pas expert en Micro 8 bits (J'ai fait 3 ans de 8051 en assembleur pur, dans les années 90). Depuis. je fais plutôt du 32 bits. Par contre, je peux aider sur le langage C que je connais assez bien (on ne sait jamais tout).
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Salut, j'ai le même problème de manque de place dans la bank0. J'ai donc mis une variable globale dans bank 2 pour tester.

    main()
    {
    double ano,eps,decl,JJ,T;
    bank2 double lo;
    lo=1; // crée le problème

    Il compile, mais si je veux utiliser la variable, il y a un message failed:

    Error[000] C:\PIC\main.obj 50 : Fixup overflow in expression (loc 0xBE6 (0xBB6+48), size 1, value 0x133)
    Error[000] C:\PIC\main.obj 50 : Fixup overflow in expression (loc 0xBEA (0xBB6+52), size 1, value 0x134)
    Error[000] C:\PIC\main.obj 50 : Fixup overflow in expression (loc 0xBEE (0xBB6+56), size 1, value 0x135)
    Error[000] main.rlf 2305 : Fixup overflow in expression (loc 0x76 (0x76+0), size 1, value 0x133)
    Error[000] main.rlf 2311 : Fixup overflow in expression (loc 0x76 (0x76+0), size 1, value 0x134)
    Error[000] main.rlf 2317 : Fixup overflow in expression (loc 0x76 (0x76+0), size 1, value 0x135)
    BUILD FAILED: Fri Apr 29 14:07:41 2005

    D'avance merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question d'ordre général sur les macros sur excel
    Par tzehani dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 29/08/2007, 05h16
  2. Réponses: 11
    Dernier message: 06/03/2007, 19h18
  3. Réponses: 3
    Dernier message: 16/02/2007, 12h35
  4. question sur les droits sur un tablespace à la création
    Par black_code dans le forum Oracle
    Réponses: 6
    Dernier message: 03/12/2005, 13h13
  5. question (peut-être idiote) sur les vues
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2003, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo