C pour 8051 la question - Passage d'arguments à partir de code C à l'ASM

M

mcoster

Guest
Salut,

Je suis l'élaboration d'un programme et j'ai décidé de construire l'interface utilisateur en C, car il est plus facile, et le code principal de l'ASM, car il est temps critique.

Maintenant je suis face à un problème!Je ne sais pas comment passer un formulaire de l'argument de la partie du code C pour la partie de code ASM.

Par exemple, je veux mettre une valeur dans un des registres ou d'une partie de la mémoire en C, puis obtenir cette valeur à l'aide de l'ASM.

Faire la part ASM est facile, il est juste un couple de commandes MOV, mais la façon de stocker une valeur dans la RAM ou un registre en utilisant C est la partie je ne peux pas comprendre!
Quelqu'un peut-il m'aider?

exemple de code

main ()
(
code qui stockent les 0xC0 valeur R0
)

# pragma ASM

MOV P0, R0

# pragma ENDASMMerci!

 
C'est compilateur spécifique.Certains compilateurs de passer des paramètres sur la pile, certains le font dans des registres.Vous avez le contrôle de la documentation du compilateur que vous utilisez.

Il ya une autre façon de vérifier cela aussi.Vous pouvez écrire en C comme funciton

ASMfunction extern void (unsigned char);

puis appeler cela de C

ASMfunction (paramètre);

Ensuite, vous pouvez vérifier le code asm généré par le compilateur C pour voir comment le paramètre est passé

 
Regardez l'exemple http://www.keil.com/support/man/docs/c51/c51_ap_at.htm
; /* array at xdata 0xE000 */

Texte xdata char [256] _at_ 0xe000;
tableau * / à xdata 0xe000 * /

intérieur de la fonction principale:texte [0] = 'a';Plus tard dans votre partie du code ASM que vous pouvez faire ceci:DPTR MOV, # E000h

;Acc now get the 'a' wrote in C

MOVX A, @ DPTR;
Acc maintenant obtenir le «a» écrit en C

J'ai essayé de suivre la procédure même mise en page que vous avez mentionnés à titre d'exemple.Comme vous avez écrit:
"Comment passer un argument de la partie de code C à la partie de code ASM"
et
"Comment faire pour stocker une valeur dans la RAM ou un registre en utilisant C"

Pour une explication plus en profondeur lire Cx51 le guide de l'utilisateur:
http://www.keil.com/support/man/docs/c51/c51_ap_ctoasm.htm

 
Vous ne pouvez pas accéder aux registres directement en langage C. Vous pouvez cependant le faire en utilisant des pointeurs.Direct RAM accès est également prévu avec des pointeurs.Mais l'accès aux registres par des pointeurs est dangereux.

Ke * il a une bonne documentation assez de passer paramétrée.Je pense qu'il va comme ça.Pour un seul octet, il est fait par R7 et ainsi de suite.

 

Welcome to EDABoard.com

Sponsor

Back
Top