[RÉSOLU] Erreur compilation : relocation truncated to fit: R_AVR_13_PCREL

Bonjour à tous,

Je viens vous demander un peu d'aide concernant cette erreur de compil :

d:/programmes/arduino-1.0.2/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr6/crtm2560.o: In function `__vector_default':
(.vectors+0x1c): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_7' defined in .text.__vector_7 section in core.a(WInterrupts.c.o)

Il y a à peine 20 minutes j'étais tout content d'avoir réussi à faire marcher mon programme quand tout à coup j'ai eu ce message quand j'ai réordonné mon code pour qu'il soit à peu près lisible après mes multiples tests ^^ Et puis juste à bouger les lignes de place (les prototypes de fonctions principalement) j'ai eu cette erreur. Google n'a pas été capable de me dire ce que j'ai fait de mal... Et le moteur de recherche d'Arduino non plus.

Quelqu'un saurait me dire sur quel bouton j'aurais pas du appuyer ? XD

Ne sachant pas quoi vous donner comme code au vue de l'erreur j'ai tout mis dans un ptit rar en pièce jointe.

Merci d'avance,

Arduino2.rar (11.1 KB)

Personne n'a eu ce problème et à trouvé la solution ?

Bonne journée,

Bonjour,

Vu la gueule de l'erreur c'est une fonction d'interruption dans la table de vecteurs qui passe pas.

Déja :

  • quelle version de l'ide arduino ?
  • quelle carte ?

Juste pour info :

Ps: la librairie Wire officielle (pour l'I2C) fait exactement la même chose que ta librairie "I2C" qui n'est qu'un clone ...

Merci d'avoir répondu !

La crius All In One Pro, elle utilise un ATMEGA 2560
J'utilise Arduino pour windows 1.0.2 sur windows 7 64bits à jour.

Dans ton lien je vois que pour lui c'était dû à trop de variable globale, j'ai souvent vu ça sur google. Je n'ai qu'un tableau de 5 cases... Si jamais c'est ça le problème je vois mal comment terminer mon projet... Ce qui est étonnant c'est que ça soit depuis que j'ai déplacé mes prototypes...

La dernière version est la 1.0.3, essaye on ne sait jamais tu as peu être un bug isolé.

Sinon donne un coup de ccleaner pour virer les fichiers temporaires de ton ordi, ferme l'ide, re-ouvre ton projet et tente de recompiler le tout.
Ce n'est pas un tableau de 5 éléments qui va empêcher une table d'interruptions de passer en RAM :grin:

J'ai donc passé Ccleaner et installé le 1.0.4
et toujours cette belle erreur :

d:/programmes/arduino-1.0.4/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr6/crtm2560.o: In function `__vector_default':
(.vectors+0x1c): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_7' defined in .text.__vector_7 section in core.a(WInterrupts.c.o)

Reynosa:
J'ai donc ...... ....... et installé le 1.0.4

Mise à jour faite, merci.

Essaye d'utiliser la librairie Wire pour mettre de côté tout bug "externe" à ton code.
Si ça marche toujours pas fait un zip (pas un rar svp) de ton nouveau code que je test avec un compilateur plus récent (on sait jamais).

Tu as raison le problème provient bien de la librairie I2C que j'utilise... plus précisément le problème vient de la méthode "read()"

Je vais donc être obligé de repartir sur la lib de base :frowning:

Merci de ton aide !

Reynosa:
Je vais donc être obligé de repartir sur la lib de base :frowning:

Et c'est quoi le soucis avec la librairie de base ?
Elle fait exactement la même chose ...

À la fin oui normalement (pas tout à fait si tu as vu mon mp)
D'après la description de lib c'est une amélioration de la lib de base en terme de performance et de logique.
Mais pour moi c'est surtout la simplicité d'utilisation en une ligne avec un simple read je récupère 6 registres différent de mon gyroscope avec ou sans bit de stop. alors qu'avec la lib de base... c'est toute une épopée et c'est moins clair à la relecture du code, ça prend énormément plus de place... bref j'aime moins la lib de base, mais je vais être obligé de l'utiliser vu les problèmes causés par l'autre

Reynosa:
À la fin oui normalement (pas tout à fait si tu as vu mon mp)

Actuellement j'ai une trentaine d'onglets et 3 googledoc d'ouvert, ton Mp est quelque pars dans ce bordel :sweat_smile:

Reynosa:
D'après la description de lib c'est une amélioration de la lib de base en terme de performance et de logique.
Mais pour moi c'est surtout la simplicité d'utilisation en une ligne avec un simple read je récupère 6 registres différent de mon gyroscope avec ou sans bit de stop. alors qu'avec la lib de base... c'est toute une épopée et c'est moins clair à la relecture du code, ça prend énormément plus de place... bref j'aime moins la lib de base, mais je vais être obligé de l'utiliser vu les problèmes causés par l'autre

Je vois mal quelles optimisations (de manière vraiment significative j'entends) pourrait être faites vu que l'I2C est géré par le hardware.
A par virer toutes la partie qui gère les fonctions avancé (print(), println(), readBytesUntil(), ...) ya pas grand chose à faire.

La lib Wire de base est pas super compliqué :
Wire.requestFrom() pour demander les données
boucle sur Wire.available() pour attendre les données
Wire.read() ou Wire.readBytes(buf, len) pour lire les données

Oui mais entre deux il y a tous les write qui servent à choisir le registre ensuite les requestFrom les boucles et les read pour 6 registres.. je passe d'une ligne à 30. m'enfin ça encore je m'en fous ce n'est qu'un problème de présentation, tant que ça marche je prend moi ^^ mais actuellement ça déconne dans le vent pour rien et ça commence à me les geler... mon code marchait auparavant

Actuellement j'ai une trentaine d'onglets et 3 googledoc d'ouvert, ton Mp est quelque pars dans ce bordel :sweat_smile:

Ma Moman m'a toujours dit de faire une chose après l'autre : XD