2016-06-21 2 views
0

Je joue avec l'exemple USBMem pour la carte MCB214x. À l'aide d'un éditeur hexadécimal, j'ai trouvé le décalage (0x800) de la zone de données sur la RAM et j'ai écrit le code suivant pour modifier les données dans le fichier readme.txt.LPC2148 Exemple USBMem: modification du contenu du fichier readme.txt

J'ai créé une variable de compteur et elle s'incrémente lorsque j'appuie sur le commutateur sw1. Je veux stocker sa valeur dans le fichier chaque fois que je pousse l'interrupteur.

variables de classe

U8 * offset = &Memory[0x800]; 
int counter=0; 

maintenant à l'intérieur la fonction principale I écrit le code suivant

PINSEL0 = PINSEL0|(0<<15); 
IO0DIR = (0<<15); 

while (1){ 
    if(!SW1){ 
     counter = counter+1; 
     LED_On(1<<16); 

     *offset = counter;   //line 1 
     offset +=4;    // line 2 
    } else {LED_Off(1<<16);} 
}; 

Le problème est que lorsque je lance le code sur le bord du voyant reste allumé après avoir appuyé sur le bouton et le périphérique USB devient accessible! Cependant, lorsque je commente les lignes "ligne 1" et "ligne 2" et exécutez le code, la led s'allume et s'éteint parfaitement bien! Est-ce que quelqu'un peut m'expliquer ce qui se passe mal ici?

+0

Quelle est la définition de 'Memory' ici? – Notlikethat

+0

La mémoire fait référence au stockage RAM sur la carte. Vous pouvez télécharger l'exemple de projet ici [link] (http://www.keil.com/download/docs/307.asp) –

+1

OK, donc je dois aller télécharger un projet, passer au crible des dizaines de fichiers pour que ça marche il semble dépendre des définitions 'extern' de Dieu sait ce que BSP, être assez chanceux qu'il y a quelques artefacts de construction là-dedans, décocher des symboles du fichier de carte, aller télécharger le TRM pour ce micro et corréler tout juste pour établir cela l'adresse en question est à mi-chemin de la RAM? Non; ne peut pas être dérangé. Considérez ce que vous faites à chaque itération de cette boucle, et combien de milliers d'itérations s'exécutent pendant les dizaines/centaines de millisecondes pour lesquelles le commutateur est pressé. – Notlikethat

Répondre

1

Votre problème est "ligne 2". Juste ajouter 4 fera offset courir à la fin de la RAM très rapide. Accéder au-delà de la fin va probablement déclencher une erreur. Gardez à l'esprit que même une pression courte sur un bouton sera de l'ordre de plusieurs ms, et que la boucle n'a pas de retard et ne dure que quelques instructions.

+0

Merci pour la suggestion !! –