bonjour a toutes et a tous, je vient vous voir aprés de nombreuse recherche et donc en désespoir de cause.
depuis quelque mois je me penche sur un projet de robot cartésien (j'avais d'ailleur fait un post a se sujet dans la section "Projets électroniques")
toujours est il que pour le contrôlé, je comptait utilisé un microcontroleur pic 18f4520
que je programmerais avec sdcc, mes premiers teste s'avérère concluant ( http://fr.youtube.com/watch?v=9JG7MIbUNzw pour ceux que ça intéresse )
toujours est il que je suis rendu compte d'un comportement etrange de la part de sdcc en voulant m'amusé avec un afficheur lcd ( notamment parce que c'est plus simple pour deboguer avec la possibilité d'afficher des variable).
c'est là que j'ai rencontré mes premiers soucis j'utilise une fonction simple pour afficher mes caracter (je pilote l'afficheur en 8 bits pour l'instant) elle mes les donne sur le port et envoie une impulsion sur la broche intéréssé. cela fonction sans aucun soucis tant que je n'essai pas de jouer avec les tableau de char dans un contexte dynamique, je m'explique est vais présenté différents teste auquel je me suis livré.
dans un premier temps le teste de base:
affiche parfaitement "yyy".Code:int main(void) { initLcd(); for (i = 0; i < 3; i++) { DATA = 'y'; // on envoie y sur afficheur enable=1; delay10tcy(90); enable=0; delay10tcy(90); } while(1); }
un second teste qui marche :
j'obtient bien "ttt"Code:int main(void) { char chaine[6]; // Tableau de 6 char, j'ai tenté d'allouer le tableau avec le racourcis syntaxique, aucun changement. int i; chaine[0] = 'S'; chaine[1] = 'a'; chaine[2] = 'l'; chaine[3] = 'u'; chaine[4] = 't'; chaine[5] = '\0'; initLcd(); for (i = 0; i < 3; i++) { DATA = chaine[4]; enable=1; delay10tcy(90); enable=0; delay10tcy(90); } while(1); }
par contre, le teste qui ne marche pas est le suivant:
ici obtient 3 fois caractère aléatoire(le même : dépendant du programme tapé avant et de la position de la stack).Code:int main(void) { char chaine[6]; // Tableau de 6 char, j'ai tenté d'allouer le tableau avec le racourcis syntaxique, aucun changement. int i; chaine[0] = 'S'; chaine[1] = 'a'; chaine[2] = 'l'; chaine[3] = 'u'; chaine[4] = 't'; chaine[5] = '\0'; initLcd(); for (i = 0; i < 3; i++) { DATA = chaine[i]; enable=1; delay10tcy(90); enable=0; delay10tcy(90); } while(1); }
je pense qu'il s'agit d'une erreur de ma part, peut etre dans la configuration? (même si j'ai essayer de changé les seuls chose qui me parraissé pouvoir avoir une influence)
voila, j'ai essayer de mettre tout les elements que j'ai, si vous pensé a d'autre testes dite le moi, je m'y livrerais volontiers.
PS: j'ai testé avec différentes version ( la 2.6,2.7,2.8, snapshoot) et demandé a un ami de compilé chez lui et de m'envoiller le .hex, avec le même résultat.
-----