Jump to content

Programmation sur PIC


Recommended Posts

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) :eeek2:). 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 :p ).

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 :craint:

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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 :francais: , non mais vous avez vu les pavés qu'il a sorti ?? :cartonrouge: )

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...