Arduino Forum

International => Français => Topic started by: pierrot10 on Sep 02, 2013, 02:49 pm

Title: Comment puis-je inclure une partie de mon code
Post by: pierrot10 on Sep 02, 2013, 02:49 pm
Bonjour,

Mon code etant plus large que 32720byte, je dois faire du menage, mais il n'y a rien que je souhaite supprimer.

En revanche j'ai une fonction que je souhaite sortie du code et l'utiliser comme une librairire

Comment puis je le mettre dans un fichier externe et l'inclure dans mon code, comme une fonction.

Dois-je créer une librairie? Cependant, je en sais pas le faire.
Pourrez-vous me donner un exemple simple.
Title: Re: Comment puis-je inclure une partie de mon code
Post by: bricoleau on Sep 02, 2013, 04:03 pm
Pour ce qui est de structurer ton code en bibliothèques (ou librairies), je t'invite à peu de lecture ici :
http://www.siteduzero.com/informatique/tutoriels/apprenez-a-programmer-en-c/la-programmation-modulaire

Par contre, cela ne changera pas la taille de ton exécutable : tout le code utile est agrégé au moment de la compilation, pour produire un exécutable unique chargé en mémoire flash de l'arduino, avec la contrainte de taille maxi à 32kb.

Pour réduire la taille de ton exécutable, il n'y a pas 15 solutions :
1) revoir ton code pour le factoriser au maximum
2) éventuellement : éviter l'utilisation de librairies trop lourdes. Souvent elles embarquent tout un tas de fonctions ou propriétés, pour répondre à tous les cas d'utilisation, alors que ton besoin est plus restreint. Il m'arrive d'en prendre une "standard", et de la désosser pour ne conserver que ce dont j'ai besoin. Mais il faut déjà un bon niveau de maîtrise de la programmation. Et vu ta question sur les librairies, je ne suis pas sûr que ce soit une voie à privilégier.

Sinon ben faut passer à l'arduino mega (256 kb)

Maintenant, 32kb ce n'est pas rien.
As-tu identifié ce qui "pèse lourd" dans ton code ?
Title: Re: Comment puis-je inclure une partie de mon code
Post by: skywodd on Sep 02, 2013, 06:33 pm
Bonjour,

1) Programmation modulaire :
http://arduino.cc/en/Hacking/LibraryTutorial

2) Cherche les poids "lourd" de ton code
String, tableaux, ...

3) Optimise tes types, boucles, etc ...
http://skyduino.wordpress.com/2012/10/04/optimiser-son-code-source-c-pour-avr-gcc/
(ce dernier poids peut faire gagner une place folle mais demande du temps pour ne pas tout planter)

Donne nous un aperçu de ton code, 32K de programme compilé c'est un sacré morceau !
Title: Re: Comment puis-je inclure une partie de mon code
Post by: pierrot10 on Sep 02, 2013, 07:22 pm
En fait, en gros, si j'ai bien compris,
faire une librairie pour "ecarter" un bout de code, ne m'aidera pas.

J'ai un peu d'ordre mais je n'arrive pas descendre en dessous de 29350k

Faut que je cherche encore

Je vais voir comment répondre au mieux a vos questions...
Title: Re: Comment puis-je inclure une partie de mon code
Post by: pierrot10 on Sep 03, 2013, 07:50 pm
hello,
Je suis vraiment embeté, je n'arrive pas a descendre en dessous de 32520 depuis que je doive utiliser la librairie SD.h.

Es-ce que de changer d'IDE ca peut aider?
Pourriez-vous me recommander un autre IDE que Arduino?

C'est peut etre vrai que mon code est gros, il a 702 ligne en comptant les espaces et les commentaires mais j'ai besoin de toutes les fonctionnalités codées. J'ai meme commenté des functions moins utiles, pour libérer de la taille

Voici le code:
http://www.hello-web.net/temp/forum.html (http://www.hello-web.net/temp/forum.html)
Title: Re: Comment puis-je inclure une partie de mon code
Post by: skywodd on Sep 03, 2013, 11:18 pm

Es-ce que de changer d'IDE ca peut aider?

Manifestement tu n'as pas compris un truc essentiel : LA MÉMOIRE ÇA N'EST PAS INFINIE (et les compilateurs ne font pas de miracles).
Changer de compilateur (et non pas d'ide) ne rendra pas ton code plus léger, ou du moins pas de beaucoup.


Pourriez-vous me recommander un autre IDE que Arduino?

AVR Studio, en oubliant Arduino et toutes les librairies toutes prêtes.
Mais même en codant en bas niveau les miracles ça n'existe pas.


C'est peut etre vrai que mon code est gros, il a 702 ligne en comptant les espaces et les commentaires mais j'ai besoin de toutes les fonctionnalités codées. J'ai meme commenté des functions moins utiles, pour libérer de la taille

702 lignes de code utilisateur, ok, mais soit conscient que derrière :
Code: [Select]
#include <MemoryFree.h>
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "inetGSM.h"
#include "sms.h"
//#include "call.h"
#include "gps.h"
#include <SD.h>
#include <string.h>
#include <stdio.h>
//#include <stdlib.h>
//#include <math.h>

Ce cache facilement +5000 lignes de codes dans les divers librairies.

Les miracles ça n'existe pas, ton programme ne passera pas dans une UNO quoi que tu fasses.