error: called object '1' is not a function
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

error: called object '1' is not a function



  1. #1
    Different

    error: called object '1' is not a function


    ------

    Bonjour,

    j'essaye de commencer la configuration d'une liaison I²C sur un µ ATmega16 cependant j'ai une erreur que je ne comprends pas.

    Pourriez vous m'aider?

    Code:
    #include <avr\io.h>
    #include <util\delay.h>  
    #include <avr/iom16.h>
    #include <avr/interrupt.h>
    #include <avr/SBIT.h>
    #include <avr/delay_basic.h>
    #include <util/twi.h>
    
    #define F_CPU 16000000UL  // 16 MHz
    
    
    unsigned char i2c_start(unsigned char slave_address){
    	// send START condition
    	TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    	// Wait for TWINT Flag set. This indicates that the START condition has been transmitted
    	while (!(TWCR & (1<<TWINT)));
    	//Check value of TWI Status Register. Mask prescaler bits. If status different from START return 1
    	if ((TWSR & 0xF8) != TWSTA)
    		return 1
    	// Load slave_address into TWDR Register. Clear TWINT bit in TWCR to start transmission of address
    	TWDR = slave_address;
    	TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    	//Wait for TWINT Flag set. This indicates that the SLA+W has been transmitted, and ACK/NACK has been received.
    	while (!(TWCR & (1<<TWINT)));
    	//Check value of TWI Status Register. Mask prescaler bits. If status different from TW_MT_SLA_ACK or TW_MR_SLA_ACK return 1
    	if  ((TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK))
    		return 1;
    	return 0;
    
    }
    
    int main (void){
    	
    	unsigned char address = 0x02;
    	i2c_start(address);
    	return 0;
    
    }
    L'adresse que j'essaye d'envoyer est prise aléatoirement mais je ne penses pas que ce soit la le probleme.

    Le message d'erreur est le suivant:

    ../I2C.c:21: error: called object '1' is not a function

    Pourriez vous m'aider?

    Merci par avance,
    Cordialement,
    Différent

    -----

  2. #2
    ftorama

    Re : error: called object '1' is not a function

    "return(1);" .... et non "return 1;"

  3. #3
    Different

    Smile Re : error: called object '1' is not a function

    Merci beaucoup!!

  4. #4
    Aurélien

    Re : error: called object '1' is not a function

    Citation Envoyé par ftorama Voir le message
    "return(1);" .... et non "return 1;"
    Je crois surtout que c'est le return 1 sans point virgule qui pose probleme, la parenthese ma parait inutile

  5. A voir en vidéo sur Futura
  6. #5
    Different

    Re : error: called object '1' is not a function

    Oui je crois bien, j'ai vu ca en mettant la parenthèse.

    Merci quand même!

    Par contre j'ai un nouveau problème.

    Je suis sous AVR Studio et je peux voir les registres (simulés) du mega16 et lorsque je lance la simulation le TWINT ne se met pas à 1 mais reste à 0.

    J'ai rajouté la fonction sei(); dans le main pour autoriser toutes les interruptions.

    Quelqu'un saurait pourquoi?

  7. #6
    Aurélien

    Re : error: called object '1' is not a function

    Je sais pas, je simule jamais, sinon ça sert à quoi d'acheter un debugger

  8. #7
    Different

    Re : error: called object '1' is not a function

    En fait je réalise un projet pour mon école et je ne peux bosser que sur le logiciel pour l'instant.

    Mais selon vous le code est correct?

  9. #8
    Aurélien

    Re : error: called object '1' is not a function

    J'en sais trop rien, ça fait longtemps que j'ai pas utilisé l'I²C (que j'execre, soit dit en passant) via les registres, je me contente des librairies haut niveau de mon compilo codevision

  10. #9
    Different

    Re : error: called object '1' is not a function

    Arf...

    Par contre je crois ne pas comprendre la ligne (prise dans la datasheet du µ:

    Code:
    (TWSR & 0xF8)
    Que fait-elle?

  11. #10
    Jack
    Modérateur

    Re : error: called object '1' is not a function

    Ça met les 3 bits de poids faible de TWSR à 0.

    A+

  12. #11
    Aurélien

    Re : error: called object '1' is not a function

    Dans le contexte du programme, il y a un "if ((TWSR & 0xF8) != TWSTA)", et le 0xF8 agit comme un masque (la valeur de TWSR n'est pas modifiée, mais c'est sa valeur masquée par 0xF8 qui est comparée à TWSTA.

    Aurélien

  13. #12
    Different

    Re : error: called object '1' is not a function

    Ah ok, ce la veut donc dire que les trois bits de poids faibles ne sont pas pris en compte dans la comparaison?

    Merci de vos réponses

  14. #13
    Jack
    Modérateur

    Re : error: called object '1' is not a function

    Citation Envoyé par Different Voir le message
    Ah ok, ce la veut donc dire que les trois bits de poids faibles ne sont pas pris en compte dans la comparaison?

    Merci de vos réponses
    Tout dépend de ce que représente TWSTA.

    A+

  15. #14
    Different

    Re : error: called object '1' is not a function

    Oui justement car TWSTA est un bit d'un registre tandis que TWSR est un registre de 8 bit...

    Ma condition n'est donc jamais remplie.

    P.S: Cette ligne de code est tirée de la datasheet du µ.

    Après le fait que la condition ne soit pas pas remplie vient peut etre du faut que je n'ai pas de réel connection et que je simule juste.

  16. #15
    Jack
    Modérateur

    Re : error: called object '1' is not a function

    Trouve voir la définition de TWSTA. Tu doit avoir un #define TWSTA ... quelques part.

    Si ton IDE est bien foutu, un clic droit sur TWSTA doit t'afficher un truc du genre "rechercher la définition" ou autre.

    A+

  17. #16
    Different

    Re : error: called object '1' is not a function

    Alors selon la datasheet du µ, TWSTA sert à envoyé un bit START. (Ce qui est préférable pour commencer l'envoi de données.

    The application writes the TWSTA bit to one when it desires to become a Master on the Twowire
    Serial Bus. The TWI hardware checks if the bus is available, and generates a START condition
    on the bus if it is free. However, if the bus is not free, the TWI waits until a STOP condition is detected, and then generates a new START condition to claim the bus Master status. TWSTA
    must be cleared by software when the START condition has been transmitted.
    Et TWSR c'est le status register de la liaison Two Wire.

    Mais je comprends trop car quand je fais:

    Code:
    TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWEA);
    le status register n'est pas modifié.
    D'ou le fait que je sorte de ma boucle...

  18. #17
    Jack
    Modérateur

    Re : error: called object '1' is not a function

    Mais je comprends trop car quand je fais:

    Code:
     TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWEA);
    le status register n'est pas modifié.
    Pourquoi le status register devrait-il être modifié après avoir configuré le control register?
    A+

  19. #18
    Different

    Re : error: called object '1' is not a function

    Bon maintenant j'ai la carte de développement et ca marche nickel.
    Je me rends compte que simuler ne sert pas à grand chose.

    Merci pour vos réponses!!!

    ++

Discussions similaires

  1. Sentir les molecules called CO2
    Par BioBen dans le forum Science ludique : la science en s'amusant
    Réponses: 3
    Dernier message: 29/09/2007, 14h16
  2. Object-oriented programming en fortran
    Par PHENIXian dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 16/10/2006, 03h02
  3. Object coincé dans tambour Brandt WTD1071F
    Par invitea2a868df dans le forum Dépannage
    Réponses: 5
    Dernier message: 27/03/2006, 18h39
  4. JDO et le mapping object relationnal ?
    Par flyingman dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 01/02/2006, 11h03
Découvrez nos comparatifs produits sur l'informatique et les technologies.