«

»

Gestion des Banks des PIC16

• Adopter une règle de nommage des définitions des registres de travail. En effet, pour éviter d’accéder depuis un mauvais bank à un registre SFR (Special Function Register) ou à un registre propre, il est conseillé de les (re)nommer en les préfixant d’une information indiquant leur appartenance à un bank donné ou accessible à partir de plusieurs banks.

Exemples de préfixes:

SFR_0_ Registre SFR accessible depuis le Bank0 uniquement
SFR_0_PORTA
SFR_1_ Registre SFR accessible depuis le Bank1 uniquement  SFR_1_TRISA
SFR_1_3_ Registre SFR accessible depuis les Bank1 et Bank3 SFR_1_3_OPTION
SFR_ Registre SFR accessible depuis tous les Banks SFR_INDF
R_0_ Registre accessible depuis le Bank0 uniquement
R_0_STATES
R_ Registre accessible depuis tous les Banks R_SAVE_WREG
FLG_1_ Flag accessible depuis le Bank1 uniquement
FLG_1_ERROR

Ainsi, leur emploi s’en trouve facilité aussi bien en écriture qu’en lecture du code du programme. De plus, cette méthode évite d’utiliser avant l’accès au registre, la directive « banksel <nom du registre> » qui est très couteuse en code [inutilement] généré comme le montre l’exemple suivant:

bcf   0x3, 0x5      banksel  SFR_0_RCSTA        ; Accès à RCSTA (BANK0)
bcf   0x3, 0x6
movlw 0x90          movlw    0x90
movf  0x18, f       movf     SFR_0_RCSTA
bsf   0x3, 0x5      banksel  SFR_1_OPTION_REG   ; Accès à OPTION_REG (BANK1)
bcf   0x3, 0x6                                  ; Le bit RP1 est déjà à 0 !
movlw 0xc1          movlw    B’11000001′
movf  0x1, f        movf     SFR_1_OPTION_REG

 

Notice

Cette implémentation de code est celle générée par les compilateurs C comme  sdcc si aucune option d’optimisation n’est précisée.