Pages: [1]   Go Down
Author Topic: Problème de multi-fichier  (Read 403 times)
0 Members and 1 Guest are viewing this topic.
Grenoble
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Je débute sur l'Arduino, ayant déjà quelques mois de programmation en C, je me suis dit que c'en était assez proche pour que je l'utilise afin de programmer un micro-contrôleur. Bon, partant sur mes bases, j'ai débuté mon code, en faisant académiquement une segmentation de mon programme dans différents fichiers.

Je suis donc parti sur 3 fichiers :
  - sources.ino qui servirait de code principal,
  - constantes_et_VG.h et son .c associé :
     .h) le .h servirait à définir les constantes et variables globales, ainsi que le prototype des fonctions du .c
     .c) le .c contient pour l'instant une seule fonction qui met à jour les variables globales à partir des entrées du µC.

Pourtant, le codage à la mode programmation en C ne semble pas fonctionner.

J'ai déjà regardé les posts suivant
   - Un post parlant de renommer les fichiers sources afin que l'IDE s'y compile dans le bon ordre . J'ai donc essayé de tester cette solution, j'ai renommer constantes_et_VG.c et *.h en xconstantes_et_VG.c et *.h, néanmoins, ça n'a pas eu d'effet.
   - Un post parlant de déclarer toutes les variables globales dans le .ino et ensuite de les redéfinir dans les .h en plaçant extern devant. Néanmoins, le programme refuse toujours de compiler, mais cette fois à cause d'une double définition des variables globales.

Merci pour le coup de main, je vous joins ci dessous les codes sources et les messages d'erreurs du compilateur

Code:
//Fichier sources.c
#include "constantes_et_VG.h"



//////////////////////////////////////////////////////////
//////////////////      DEBUT DU CODE     ////////////////
//////////////////////////////////////////////////////////

void setup() {
  // initialise le port série à 9600 bauds
  Serial.begin(9600);
}

void loop() {

input_analog();// Fonction qui met a jour les variables globales
  
input_analog();
}


Code:
//Fichier constantes_et_VG.c

#include "Arduino.h"
#include "constantes_et_VG.h"

void input_analog()
{
  Accx = GAIN_ACCELEROMETRE * (analogRead(BROCHE_ACCX) - TENSION_ACCELEROMETRE_ACCX0);
  Accy = GAIN_ACCELEROMETRE * (analogRead(BROCHE_ACCY) - TENSION_ACCELEROMETRE_ACCY0);

  t_micro = micros();
  t_milli = millis();/* A priori, on n'aura pas besoin de cette valeur,
                     mais sait-on jamais, ça dépend pendant combien
                     de temps durera l'experience...*/
//
}


Code:
//Fichier constantes_et_VG.h

#ifndef CONSTANTES_ET_VG__H
#define CONSTANTES_ET_VG__H

///////////////////// Constantes////////////////////////
#define GAIN_ACCELEROMETRE 1
#define TENSION_ACCELEROMETRE_ACCX0 2.5
#define TENSION_ACCELEROMETRE_ACCY0 2.5
#define BROCHE_ACCX 0
#define BROCHE_ACCY 1


///////////////////////Variables globales/////////////////////
int Accx = 0;
int Accy = 0;
long int t_micro = 0;
long int t_milli = 0;


///////////////////////      Fonctions     /////////////////////
void input_analog();





#endif


Quote from: log du compilateur
sources.cpp.o: In function `loop':
/Applications/sources.ino:27: multiple definition of `Accx'
constantes_et_VG.c.o:constantes_et_VG.c:6: first defined here
sources.cpp.o: In function `loop':
/Applications/sources.ino:27: multiple definition of `Accy'
constantes_et_VG.c.o:constantes_et_VG.c:6: first defined here
sources.cpp.o: In function `loop':
/Applications/sources.ino:27: multiple definition of `t_micro'
constantes_et_VG.c.o:constantes_et_VG.c:6: first defined here
sources.cpp.o: In function `loop':
/Applications/sources.ino:27: multiple definition of `t_milli'
constantes_et_VG.c.o:constantes_et_VG.c:6: first defined here
sources.cpp.o: In function `loop':
sources.cpp:(.text.loop+0x0): undefined reference to `input_analog()'
sources.cpp:(.text.loop+0x4): undefined reference to `input_analog()'
« Last Edit: January 26, 2013, 10:45:08 am by Xian4 » Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Code:
int Accx = 0;
int Accy = 0;
long int t_micro = 0;
long int t_milli = 0;
-> à mettre dans le .c

Code:
extern int Accx;
extern int Accy;
extern long int t_micro;
extern long int t_milli;
-> à mettre dans le .h
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Grenoble
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai fais cela, et du coup, il me reste un message d'erreur. Visiblement, quelque chose cloche avec le prototype de la fonction déclaré dans le .h :

Code:
#ifndef CONSTANTES_ET_VG__H
#define CONSTANTES_ET_VG__H


/////////////////////    Constantes    ////////////////////////
#define GAIN_ACCELEROMETRE 1
#define TENSION_ACCELEROMETRE_ACCX0 2.5
#define TENSION_ACCELEROMETRE_ACCY0 2.5
#define BROCHE_ACCX 0
#define BROCHE_ACCY 1

///////////////////////Variables globales/////////////////////
extern int Accx;
extern int Accy;
extern long int t_micro;
extern long int t_milli;

///////////////////////      Fonctions     /////////////////////
void input_analog();





#endif

Ce que me ressort le compilateur, c'est :
Quote
sources.cpp.o: In function `loop':
/Applications/sources.ino:30: undefined reference to `input_analog()'
/Applications/sources.ino:32: undefined reference to `input_analog()'
« Last Edit: January 26, 2013, 12:54:45 pm by Xian4 » Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Essaye de renommer le fichier .c en .cpp je ne me rappelle plus qu'elles extensions l'ide inclut lors de la compilation.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Grenoble
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

exact, c'était ça...

Mais pourquoi le compilateur refuse de compiler du .c ?

Je croyais qu'il faisait le c et le c++...

J'suis désolé, j'aimerais comprendre...
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mais pourquoi le compilateur refuse de compiler du .c ?
Je croyais qu'il faisait le c et le c++...

J'suis désolé, j'aimerais comprendre...
Le compilateur compile du C, du C++ et même de l'assembleur.
Le problème c'est que l'ide arduino est codé bizarrement ... il ne reconnait pas certaines extensions comme .hpp alors qu'il reconnait .cpp ...
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1]   Go Up
Jump to: