Instanciation avec "new" et plantage de code

Bonjour la communauté,

J'ai des petits souci en utilisant des objets dynamique (déclaration avec pointeur). Le code compile sans erreur mais à l’exécution ça plante. Pourtant je suis loin de faire un overflow car grâce à la fonction freeRam() , il me reste 1500 octets de libre. Ma class à été testée en static et fonctionne très bien.

LineOffsetMonoColor * Ligne1;

void setup(){
  Ligne1 = new LineOffsetMonoColor(strip);//Code planté
}

void loop(){


}

Si qqun à déjà rencontré ce problème...

oui le compilo livré avec arduino est buggé sur la geston dynamique

il faut récupéré la dernière version de WinAVR 2010-01-10 (si tu es sur pc) et patcher arduino/hardware/tools/avr avec

J'ai recement eu de gros problème avec une lib qui utilisait beaucoup de strings et qui partait dans les choux.

J'en parle ici : http://arduino.cc/forum/index.php/topic,129562.msg979344.html#msg979344

bon ba rien y fait j'ai essayé plusieurs fois de tout réinstaller mais ça marche pas. pourtant j'ai suivie un tuto à cette adresse qui parlait aussi de l'Avr

http://skyduino.wordpress.com/2012/07/07/hack-utiliser-teensyduino-avec-une-carte-arduino-leonardo-ou-compatible-leonardo/

Qu'est-ce qui coince ? Regarde dans le sujet que j'ai cité, j'y décris aussi la procédure.

J'ai fait des testes avec un code super épuré, et j'ai constaté que certaine instance d'objet avec l'opérateur "new" fonctionne mais pas toutes! Et dans le cas de ma class que je souhaite utiliser le mode dynamique et bah... ca fonctionne pas! Enfaite faut dire que ma class fait référence à a des objet deja crée et gere aussi des tableau dynamique. Je me demande si c'est pas le faite qu'il y est tout ce bazzard que ça plante... Franchement la je sais pas quoi faire!

Je voulais dire : qu'est-ce qui se passe mal pour faire la mise à jour de WinAVR ?

Les plantages, je le conçoit bien, j'ai eu le même problème pendant 2 jours avant de me décider à faire la mise à jour. Même la fonction freeMemory() s'envoyait en l'air, preuve que la mémoire dynamique était corrompu.

ba juste quand le micro-controleur exécute cette ligne:

Ligne1 = new LineOffsetMonoColor(strip);

bah , il ce fige et plus rien marche. Mais ça compile très bien!

As tu fait la mise à jour de WinAVR ? Tant que cette mise à jour n'est pas faite, oublie l'allocation dynamique : le compilateur fournit avec Arduino est buggé.

Depuis que j'ai faite la mise à jour, plus de problème.

Donc je répète ma question : as tu des problèmes sur la procédure de mise à jour ?

A oui oui je l'avais avant de faire mes essai!! tout est à jour!! j'ai bien suivie tout ce que tu as dit! Mais avec cette mise à jour, certaine instanciation fonctionne toujours pas comme celle que j'ai citée plus haut

ok. Donc ca n'a pas tout reglé ?

J'ai pas plus d'idée à part que WinAVR est finalement assez ancien (2010) et que le compilo a encore évolué depuis

Je viens de tomber sur cette page d'un gars qui a compilé pour Windows la version d'avril 2012. Je n'ai pas encore essayé. A toi de voir si tu veux tenter le coup. http://andybrown.me.uk/wk/2012/04/28/avr-gcc-4-7-0-and-avr-libc-1-8-0-compiled-for-windows/

EDIT: Je viens de lire l'article en détails. Apparemment c'est pas immédiat d'appliquer ses modifs. Donc pas forcément une bonne idée de faire ca à chaud

J’ai essayer cette AVR, mais malheureusement il génère d’autre erreurs, et je ne suis pas sur qu’il fonctionne bien! En tout cas merci de t’y etre interessé.

Bonjour,

Outre le problème de gestion de la mémoire il faut aussi ce rappeler qu'un ATmega328p (cœur de l'arduino) n'as que 2*Ko* de RAM. Faire des new / delete c'est se tirer une balle dans le pied à coup sûr (les alloc dynamique en arduino c'est LE truc à éviter de base).