L'allocation de mémoire Flash pour les données de l'utilisateur (STM32F4 HAL)
Je suis en train d'utiliser le flash interne de l'STM32F405 pour stocker un tas de paramétrables octets qui restent après le redémarrage.
Je suis en utilisant:
uint8_t userConfig[64] __attribute__((at(0x0800C000)));
d'allouer de la mémoire pour les données je veux stocker.
Lorsque le programme démarre, je vérifie pour voir si le premier octet est défini à 0x42
, si ce n'est, je l'ai installé à l'aide de:
HAL_FLASH_Unlock();
HAL_FLASH_Program(TYPEPROGRAM_BYTE, &userConfig[0], 0x42);
HAL_FLASH_Lock();
Après que j'ai vérifier la valeur dans userConfig[0]
et je vois 0x42
... Génial!
Quand j'appuie sur reset, cependant, et de regarder à nouveau l'emplacement, il n'est pas 0x42
plus...
Une idée d'où je vais mal? J'ai aussi essayé:
#pragma location = 0x0800C00
volatile const uint8_t userConfig[64]
mais j'obtiens le même résultat..
OriginalL'auteur HammerFet | 2015-02-13
Vous devez vous connecter pour publier un commentaire.
Bon j'ai trouvé une réponse sur la ST forums grâce à
clive1
. Cet exemple fonctionne pour un STM32F405xG.Nous avons d'abord besoin de modifier la disposition de la mémoire dans l'éditeur de liens fichier de script (.ld fichier)
Modifier le FLASH existant et ajouter une nouvelle ligne pour les DONNÉES. Ici, j'ai alloué tous
section 11
.Manuel pour l'édition de l'éditeur de liens de fichiers sur le sourceware site web
Dans le même fichier, il faut ajouter:
Cela crée un
section
appelé.user_data
que nous pouvons adresse dans le code du programme.Enfin, dans votre .c fichier ajouter:
Cela indique que nous voulons pour stocker les
userConfig
variable dans le.user_data
section etconst
permet de s'assurer de l'adresse deuserConfig
est gardé statique.Maintenant, à écrire dans cette zone de flash en cours d'exécution, vous pouvez utiliser le stm32f4 stdlib ou HAL flash pilote.
Avant de pouvoir écrire sur le flash, il doit être effacé (tous les octets mis à 0xFF) Les instructions pour le HAL de la bibliothèque de ne rien dire à ce sujet pour une raison...
OriginalL'auteur HammerFet