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 :

[PIC] Débutant question sur "unsigned char"


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut [PIC] Débutant question sur "unsigned char"
    Bonjour

    J'utilise le compilateur C Microchip C18 pour PIC et je cherche stocker une chaine ascii appelée 'hour_event' dans une eeprom avec la fonction suivante :

    Visiblement la fonction XEEWrite attend un unsigned char, cependant je 'hour event' est déclaré avec char, que dois je faire pour transformer

    char hour_event[3]; en unsigned char ?

    Actuellement le compilateur m'indique un Warning : suspicious pointer conversion ...

    Est ce qu'un unsigned char c'est BYTE ?

    Je vous remercie de votre aide,

    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
    /******************************************************************************
     * Function:        XEE_RESULT XEEWrite(unsigned char val)
     * PreCondition:    XEEInit() && XEEBeginWrite() are already called.
     * Input:           val - Byte to be written
     * Output:          XEE_SUCCESS
     * Side Effects:    None
     * Overview:        Adds a byte to the current page to be writen when
     *                  XEEEndWrite() is called.
     * Note:            Page boundary cannot be exceeded or the byte
     *                  to be written will be looped back to the
     *                  beginning of the page.
     ******************************************************************************/
    XEE_RESULT XE0Write(unsigned char val, unsigned char EEpromNumber)
    {
        *EEPROMBufferPtr++ = val;
     
        if( EEPROMBufferPtr == EEPROMBuffer + EEPROM_BUFFER_SIZE )
        {
            DoWrite(EEpromNumber);
        }
     
        return XEE_SUCCESS;
    }
    Mon code est le suivant :

    Déclaration en tête de programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char hour_event[3];
    char eeprom_hour[3] = {'-'};
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        XE2BeginWrite(EEPROM_CONTROL, 0x000000);
        XE2Write(hour_event);
        XE2EndWrite();
     
    	// Lit l'EEPROM n°2 à l'adresse location 0x000000 et copies le contenu dans un buffer appelé "eeprom_hour"
    	XE2ReadArray(0, 0x000000, eeprom_hour, 0x02);
    	eeprom_hour[3] = 0;		// Ajoute un "0" en fin de chaine pour pouvoir utiliser la fonction httpgetvar

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par lcoulon Voir le message
    Est ce qu'un unsigned char c'est BYTE ?
    BYTE n'est pas un type de base en C (contrairement à char et unsigned char).
    Il doit être définit dans un des fichiers .h de ta plateforme.

    en général, on trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef unsigned char BYTE;
    ou
    EDIT : si XEEWrite attend un char ou un unsigned char, il faut lui donner les éléments de hour_event les uns à la suite des autres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int count, i;
    count = sizeof hour_event / sizeof *hour_event;
     
    XE2BeginWrite(EEPROM_CONTROL, 0x000000);
    for(i = 0; i < count; ++i) {
        XE2Write(hour_event[i]);
    }
    XE2EndWrite();
    Cela dit, dans la mesur où il existe un XEEReadArray, il existe peut-être un XEEWriteArray, non ?

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    Après, je ne comprends plus, tu parles de XEEWrite, tu montres le code de XE0Write, mais tu appelles XE2Write...
    Le code est capable de reconnaitre le chiffre après XE et en fonction de celui ci , il s'adresse à la bonne EEPROM.

    La fonction XE2Write fonctionne bien dans mon programme, mon pb c'est que la fonction XExWrite n'accepte que des unsigned char .

    je ne sais pas comment transformer un char en unsigned char et inversement .
    Ceci fait, je pense que la fonction d'ecriture dans mon eeprom fonctionnera ...

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par lcoulon Voir le message
    Le code est capable de reconnaitre le chiffre après XE et en fonction de celui ci , il s'adresse à la bonne EEPROM.

    La fonction XE2Write fonctionne bien dans mon programme, mon pb c'est que la fonction XExWrite n'accepte que des unsigned char .

    je ne sais pas comment transformer un char en unsigned char et inversement .
    Ceci fait, je pense que la fonction d'ecriture dans mon eeprom fonctionnera ...
    Oui, j'ai fini par comprendre mieux ton problème, j'ai édité mon premier post.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    Je suis dans un case, donc ton code me renvoi une erreur de syntaxe.

    Est il possible créer une static void pour ensuite appeler cette fonction qui me permettrait de stocker une donnée 'char' dans mon eeprom ?

    Je te remercie de ton aide,

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par lcoulon Voir le message
    Je suis dans un case, donc ton code me renvoi une erreur de syntaxe.
    Alors il suffit de créer un bloc :

    interdit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    switch(...) {
        case 0:
           int i = 0;
           printf("i = %d\n", i);
        break;
    }
    autorisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch(...) {
        case 0:
           {
               int i = 0;
               printf("i = %d\n", i);
           }
        break;
    }
    dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    {
        int count, i;
        count = sizeof hour_event / sizeof *hour_event;
        XE2BeginWrite(EEPROM_CONTROL, 0x000000);
        for(i = 0; i < count; ++i) {
            XE2Write(hour_event[i]);
        }
        XE2EndWrite();
    }
    Citation Envoyé par lcoulon Voir le message
    Est il possible créer une static void pour ensuite appeler cette fonction qui me permettrait de stocker une donnée 'char' dans mon eeprom ?
    Oui et d'ailleurs c'est plus propre que d'ajouter des bloc dans un case.

Discussions similaires

  1. [débutant] Questions sur le Transact-SQL
    Par nagty dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 05/07/2005, 17h43
  2. [parseur] [Débutant] Question sur les parseurs
    Par steph-n dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 02/05/2005, 19h17
  3. [Débutant] questions sur Visibroker
    Par Man Dak dans le forum CORBA
    Réponses: 1
    Dernier message: 29/06/2004, 23h02
  4. [débutant] question sur les #
    Par Ultros dans le forum C
    Réponses: 3
    Dernier message: 29/04/2004, 12h30

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