Himura Posté(e) le 17 mai 2005 Partager Posté(e) le 17 mai 2005 Salut. Je suis en train de porter un programme sur un pic 16F876A, mais malheureusement mplab me sort qu'il bouffe trop de mémoire et que la bank 0 est trop "petite" (forcément j'utilise un tableau 9x9 (tableau de type char) ). Alors j'ai voulu stocker des données dans les autres bank, mais j'y arrive pas; j'ai d'abord essayé de "stocker" mon prog dans la bank 0 puis mon tableau dans la bank 2, mais à la compilation, mplab me dit: Fixup overflow in expression (loc 0x850 (0x828+40), size 1, value 0x110) Pareil si je mets le tableau dans la bank 3. Ensuite j'ai essayé de mettre mon tableau dans la bank 0 puis le reste du programme dans la bank 1 (la bank 1 ne fait que 80 octets, c'est trop petit pour mon tableau de 81 octets). Seulement je sais pas comment, en C, on se place dans telle ou telle banque (je déclare mes variables comme ça: static bankx type variable , ou x est le numéro de la bank - quoique si je mets 2 ou 3 ca couille, comme dit plus haut). Donc pour le moment, mon tableau est "stocké" dans la bank 0, mes variables dans la bank 1 et apparemment mon prog "tourne" dans la bank0 (oui je débute la dedans ). Bon si vous avez rien compris, déjà de savoir comment se "mettre" dans une bank m'aiderait (j'ai comme l'impression que les bank 0 et 1 marchent ensemble et que les 2 et 3 aussi). Merci bien Lien vers le commentaire Partager sur d’autres sites More sharing options...
njoyard Posté(e) le 17 mai 2005 Partager Posté(e) le 17 mai 2005 je ne sais pas si quelqu'un ici saura répondre a ta question, essaie donc de la poser sur un forum du style www.lelectronique.com tu auras plus de chances de trouver ton bonheur je pense ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chimayscripteur Posté(e) le 17 mai 2005 Partager Posté(e) le 17 mai 2005 Désolé de ne pouvoir t'aider pour le C car j'ai programmé cette année sur un pic 16F847 mais seulement en Assembleur! Comme tu l'as dis, les banques 0/1 et 2/3 sont liées. En fait, le passage d'une bank à l'autre nécessite 2bits (vu qu'il y a 4 possiibilités). Ce sont les bits nommés RP0 et RP1 du registre STATUS (RP0= N°5, RP1= N°6 si je me souviens bien) RP1 RP0 0 0 Bank0 0 1 Bank1 1 0 Bank2 1 1 Bank3 Donc, le point commun entre Bank0 et Bank1 est que RP1 est à zéro Pour Bank2 et Bank3, il est à 1 Je ne sais pas commun tu peux modifier ses bits via C, mais c'est le principe de fonctionnement: Pour passer d'une banque à l'autre, tu modifie les bits RP0 et/ou RP1. Si tu veux + d'info, tu peux télécharger le cours de Bigonoff, c'est pour programmer en assembleur mais ca devrait quand même t'aider! Cours Bigonoff Ce cours traite du 16F84 mais le 16F87 à la même base donc no stress pour ton prob! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Himura Posté(e) le 18 mai 2005 Auteur Partager Posté(e) le 18 mai 2005 Merci pour vos réponses. En fait je sais pas comment modifier ces fameux bits RP0 et RP1 (et l'IRP il sert à quoi ?). Pour le cours de bigonoff, je les ai déjà récupéré, mais ca n'a pas résolu mon problème (d'ailleurs c'est un fou ce bigonoff , non mais vous avez vu les pavés qu'il a sorti ?? ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chimayscripteur Posté(e) le 18 mai 2005 Partager Posté(e) le 18 mai 2005 Je sais, j'ai du me taper la lecture des 2 en cours! Mais faut avouer qu'il explique bien les différents concepts là-dedans! Le bit IRP n'est pas utilisé dans la famille des 16F8XX donc ne cherche pas dans cette direction. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lars.Macer Posté(e) le 20 mai 2005 Partager Posté(e) le 20 mai 2005 Essaye de déclarer un pointeur dans le bon bank memoire, puis, fais une allocation dynamique. C'est la seule réponse que je vois pour l'instant. Sinon, consulte la doc du compilateur, il doit y avoir une instruction spéciale qui marche pour toi. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.