2011-04-11 4 views
2

Hey, im en utilisant WinAVR et programmant une ATMEGA32 en C.
Fondamentalement, je veux lier mon programme C à Asm via:Essayer de définir des variables à des emplacements de mémoire spécifiques

asm(" ") command.

Im essayant de définir emplacements de mémoire dans C à des emplacements de mémoire exacte afin que je puisse alors les accéder dans la ligne de commande asm.

J'ai 5 variables:

unsigned char var1, var2, var3, var4, var5;

Je sais que je pourrais utiliser des pointeurs vers un emplacement de mémoire, mais im ne savez pas comment faire.
Toute aide serait appréciée.
Merci,
Oliver.

Répondre

3

Cette méthode est complètement compilateur indépendant, simple et directe:

#define var1 (*(volatile unsigned char *)0xDEADBEEF) 
#define var2 (*(volatile unsigned char *)0xDECAFBAD) 
#define var3 (*(volatile unsigned char *)0xBADC0DE) 

etc.

+1

Vous devez utiliser 'volatile char' non signé au lieu de' char' non signé. Cela garantira que le compilateur n'optimise pas les lectures/écritures de/vers les emplacements de mémoire. –

+0

D'accord. Merci, je vais le réparer. –

+0

J'ai défini ces instructions; maintenant Im essayant d'accéder à la variable dans mon programme C: var1 = new_key. Cela renvoie une erreur de syntaxe, j'ai essayé de jouer avec des pointeurs tels que * var1 = new_key mais en vain ... – Ospho

3

Vous pouvez accéder aux emplacements de mémoire par leur nom de variable C avec l'assembleur en ligne à l'aide de GCC. Veuillez vous référer au AVR-GCC Inline Assembler Cookbook pour plus d'informations. Vous pouvez également placer des variables C à des emplacements de mémoire précis à l'aide d'extensions de compilateur ou de scripts d'éditeur de liens. Cependant, le but des compilateurs et des assembleurs est de ne pas avoir à gérer de tels détails fastidieux.

Questions connexes