Bonjour,
Voici plusieurs heures que j'effectue des recherches sur ces deux types de pointeur contenus dans des registres spécifiques.
J'ai l'impression que la stack pointer n'est quelque chose de pas clair car j'ai deux significations. Soit il pointe sur le sommet de de pile, soit sur le prochain emplacement mémoire libre de la pile (c'est à dire, souvent vers les adresses basses selon les µP).
Le frame pointer, disponible selon les microprocesseurs, pointe sur une fenêtre, d'une certaine taille dans la pile, correspondant à différentes données et informations pour un appel de fonction.
En fait, j'aurais voulu savoir si vous auriez des informations complémentaires à m'apporter, ou clarifier un peu plus la chose.
Je bosse sur un mpc8560, e500 core, le gpr1 (General purpose register1) représente le stack frame pointer...C'est quoi en fait? stack pointer? frame pointer? ou le sp pointant sur une adresse dans la frame en cours?
Puis impossible de trouver une data sheet complète sur le net afin d'expliquer et nommer le rôle des différents registres pour ce mpc8560. Je compte accéder notamment au fp et sp à l'aide d'un code assembleur dans mon c comme suit:
En fait, si je prends le sp disponible dans la structure regset, apparemment j'ai le sommet de la pile de la tâche spécifiée, la fonction GetSP() disponible sous vxworks, fourni une aute valeur plus basse dans les adresses, le fonction GetFP ne donne pas le même résulat de frame pointer que le GPR1. Alors que choisir?! De plus, pour chaque tâche différente, je trouve bizarre que la différence entre le SP et FP fourni par les fontions Get donne le même écart d'octet (0x138).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 TaskInfoBuf[indexBuf].taskId = taskNameToId(oldTcbPtr->name);//taskIdSelf(); if (taskRegsGet (TaskInfoBuf[indexBuf].taskId, ®Set) != ERROR){ TaskInfoBuf[indexBuf].registers = regSet; TaskInfoBuf[indexBuf].TaskFP = (int)GetFP(); TaskInfoBuf[indexBuf].TaskSP = (int)GetSP(); asm( "mr %0,1 " :"=r" (TaskInfoBuf[indexBuf].TaskSP2)); //GPR1 }
Si vous avez suggestions, idées etc... elles seront les bienvenues.
Merci ;o)
Nicolas
Partager