flash

index
index principal

Description

Permet l'accès à des données stockées dans la mémoire flash du MCU.
Pour protéger le système l'écriture n'est autorisée qu'à partir de l'adresse
0x8000. Une image de la mémoire RAM utilisateur peut-être sauvegardée dans la
mémoire flash du MCU avec le mot IMGSAVE.
Cette image est automatiquement récupérée au démarrage du sytème. De plus si
cette image contient une définition appellée AUTORUN celle-ci sera exécutée au
au démarrage de l'ordinateur ou suite à une commande REBOOT.
La taille d'une image étant limitée par la RAM utilistateur disponible à 27912 octets
le reste de la mémoire flash peut-être utilisée pour stocker des données.
Il n'y pas de risque d'endommager une image si on enregistre des données à partir
de l'adresse 0xF000 jusqu'à 0x557FE.
REF:
Pour plus d'information sur la programmation en runtime de la mémoire flash
consultez les documents de référence Microchip: DS70609D et DS70000613D
index principal

FBUFFER ( -- a-addr )

Réservation d'un bloc de mémoire dynamique pour écriture d'une rangée flash MCU.
Pour modifier une rangée on la lit dans ce tampon et lorsque les modifications sont
complétée, la rangée est effacée et reprogrammée avec le contenu de ce tampon.
Ce bloc de mémoire dynamique peut-être libéré après usage en utilisant FREE il est
donc important de conserver une copie de son adresse.

arguments:
aucun   
retourne:
a-addr   Adresse du premier octet de donnée du tampon.
index
haut
index principal

F@ ( ud1 -- u )

Lecture d'un mot de 16 bits dans la mémoire FLASH.
Si ud1 est pair utilise l'instruction machine TBLRDL pour retourner les bits 15:0
Si ud1 est impair utilise l'instruction machine TBLRDH pour retourner les bits 32:16
les bit 32:24 sont à zéro puisque cet octet n'est pas implémenté dans le MCU.

arguments:
ud1   entier double, adresse dans la mémmoire flash du MCU.
retourne:
u   Valeur lue à l'adresse ud1.
index
haut
index principal

FC@L ( ud1 -- c )

Lecture d'un octet dans la partie basse de l'instruction.
Utilise l'instruction machine TBLRDL.B
Si ud1 est impair les bits 15:8 sont retournés, sinon les bits 7:0 sont retournés.

arguments:
ud1   Entier double, adresse en mémoire flash.
retourne:
c   Si impair(ud1) c=bits{15:8} sinon c=bits{7:0}
index
haut
index principal

FC@H ( ud1 -- c )

Lecture d'un octet dans la mémoire flash du mot fort de l'instruction.
Utilise l'instruction machine TBLRDH.B
Si ud1 est impair retourne la valeur 0, sinon retourne les bits 23:16 de l'instruction.

arguments:
ud1   Entier double, Adresse en mémoire flash.
retourne:
c   Valeur lue à l'adresse ud1. c représente les bits 23..16 de l'instruction.
index
haut
index principal

I@ ( ud -- u1 u2 u3 )

Lit 1 instruction de la mémoire FLASH du MCU. L'instrucion est séparée en
3 octets. Accès à la mémoire flash en utilisant les instructions machine TBLRDL et TBLRDH .

arguments:
ud   Entier double, adresse en mémoire flash.
retourne:
u1   Bits 16:23
u2   Bits 8:15
u3   Bits 0:7
index
haut
index principal

IC@ ( ud u -- c )

Lit 1 octet dans la mémoire flash à l'adresse d'instruction 'ud' et à la position
désignée par 'u'. 'u' est dans l'intervalle {0..2}
0 retourne l'octet faible, bits 7:0
1 retourne l'octet du milieu, bits 15:8
2 retourne l'octet fort, bits 23:16

arguments:
ud   Entier double, adresse de l'instruction. ud doit-être un nombre pair.
u   Entier dans l'intervalle {0..2} indiquant quel octet de l'instruction doit-être lu.
retourne:
c   Octet lu dans la mémoire flash.
index
haut
index principal

?FLIMITS ( ud -- ud f )

Vérifie si l'adresse 24 bits représsentée par 'ud' est dans la plage
valide et retourne un indicateur booléen.

arguments:
ud   Adresse 24 bits à contrôler.
retourne:
ud   Adresse contrôlée.
f   Indicateur Booléen, faux si cette adresse n'est pas valide.
index
haut
index principal

ROW>FADR ( u -- ud )

Convertie un numéro de rangée en adresse FLASH 24 bits.
La plus petite plage de mémoire flash qui peut-être effacée est appellée rangée ou page.
Pour le PIC24EP512GP202 une rangée représente 1024 instructions machine
soit 2048 adresses PC ou 3072 octets.
donc ud=2048*u

arguments:
u   Numéro de rangée.
retourne:
ud   Entier double, adresse 24 bits de la rangée.
index
haut
index principal

FERASE ( u -- )

Efface une rangée de mémoire FLASH MCU
Une rangée correspond à 1024 instructions.
Les instructions étant codées sur 24 bits, 1 rangée correspond à 3072 octets.
Le compteur d'instruction du MCU incrémente par 2 et pointe toujours sur une adresse paire.
Voir ROW>FADR

arguments:
u   numéro de la rangée.
retourne:
rien   
index
haut
index principal

RAM>FLASH ( c-addr n ud -- )

Écris en mémoire flash un bloc de données en RAM.
Si n n'est pas un multiple de 6, jusqu'à 5 octets au delà du tampon seront copiés en FLASH.
Au besoin remplir les octets excédentaires avec la valeur 0xFF.

arguments:
c-addr   Adresse début données en RAM.
n   Nombre d'octets à écrire.
ud   Entier double, addresse 24 bits en mémoire FLASH.
retourne:
rien  
index
haut
index principal

FLASH>RAM ( c-addr n ud -- )

Lecture d'un bloc FLASH dans un tampon en mémoire RAM.

arguments:
c-addr   Adresse 16 bits début RAM.
n   Nombre d'octets à lire.
ud   Entier double, adresse début plage FLASH.
retourne:
rien  
index
haut
index principal

?IMG ( -- f )

Vérifie s'il y a une image disponible en mémoire flash et retourne
un indicateur Booléen vrai|faux.

arguments:
aucun  
retourne:
f   Indicateur booléen vrai|faux
index
haut
index principal

IMGSAVE ( -- )

Sauvegarde une image de la RAM dans la mémoire flash du MCU.
Les données à partir de l'adresse DP0 jusqu'à l'adresse DP-1 sont
sauvegardées dans cette image, ainsi que les valeurs des variables
systèmes LATEST et DP.
Si le MCU est reprogrammé l'image est perdue et devra être resauvegardée.
l'image est sauvegardée à l'adresse flash 0x8000. Les 8 premiers octets sont
une structure de données utilisé par IMGLOAD. Cette structure est la suivante.

offsetdescription
0
signature 0x55AA
2
valeur de la variable LATEST pour cette image.
4
valeur de la variable DP pour cette image.
6
grandeur du data en octets.

arguments:
aucun   
retourne:
rien  
index
haut
index principal

IMGLOAD ( -- )

Charge une image système RAM à partir de la mémoire flash du MCU.
Au démarrage de l'ordinateur IMGLOAD est appellé et s'il y a une image
système en mémoire flash celle-ci est chargée en mémoire RAM.
S'il n'y a pas d'image disponible le message "No boot image in flash."
est affiché à l'écran.
Si l'image chargée en RAM contient une définition AUTORUN dans son dictionnaire
ce mot est exécuté.
IMGLOAD peut-être appellé manuellement pour restaurer l'état système à l'état
initial au démarrage, dans ce cas AUTORUN n'est pas exécuté.

arguments:
aucun   
retourne:
rien  
index
haut
index principal

Index


haut
index principal