Comment obtenir la valeur réelle de SP
s'enregistrer?GCC ARM: obtenir la valeur réelle du registre SP
Je souhaite remplir toute la mémoire SRAM avec certaines valeurs initiales, mais je n'ai pas voulu remplacer le contenu réel de la pile.
mon code de démarrage (qui remplace également le contenu réel de la pile):
void RESET_handler() {
unsigned *src, *dst;
// initialize memory
// .....
// fill SRAM
dst = &_bss_end;
while (dst < &_stacktop) {
*dst++ = 0x55555555;
}
}
_bss_end
est fin de mémoire utilisée pour les variables statiques et _stacktop
pointe vers la fin de la mémoire SRAM ou également en haut de la pile.
Bien que cette fonction soit réinitialisée, le gestionnaire gcc la rend sûre et commence par pousser certains registres dans la pile (more info). Oui à ce stade, le contenu réel de la pile n'est pas pertinent et l'écrasement est sûr, mais pour l'autorisation je voudrais arrêter de remplir avant la pile en remplaçant &_stacktop
par la valeur réelle de SP.
Toutes les autres idées sont également les bienvenues sauf suggestion de réécrire le code de démarrage en assembleur.
Les personnes défendant les normes C ne seront pas aimées votre question et mon commentaire. Qu'en est-il de 'char * approximativeStackTop (char x) {return (&x);}'? – Marian
Je me demande quel est le but de tout l'exercice? Vous essayez de déboguer des problèmes de mémoire de cette façon? –
@Felix pendant le développement est agréable de voir à quelle hauteur est la pile en cours, combien de mémoire libre avez-vous, est mieux que le calcul ou toute analyse statique – vlk