Question : L'indicateur de fonction a corrompu/a compensé une fois passé à la fonction

Ainsi j'ai plus d'amusement avec mon AT91SAM9261.  J'essaye d'initialiser une interruption de système pour installer un traiteur à un temporisateur perioidic d'interruption. Je suis joli beaucoup copiant le code d'exemple pour faire ceci.   J'obtiens à différents résultats bizarres quand je cours mon code, de l'échantillon code.

On le bon ordre dans le projet d'échantillon qui est venu avec IAR EWARM, il appelle :

IRQ_ConfigureIT (AT91C_ID_SYS, AT91C_AIC_PRIOR_LOWEST, ISR_Pit) ; le
where AT91C_ID_SYS=1 (interruption de système), et l'ISR_Pit est une fonction avec le

and du prototype

void ISR_Pit à l'endroit de mémoire 0x200011B8.  le

And je trace l'appel de fonction par ce qui suit :

void IRQ_ConfigureIT (source non signée d'international, mode non signé de
international, vide de
(*handler) (vide))
{débronchement de
// le first
d'interruption AT91C_BASE_AIC->AIC_IDCR = 1 << source ; le

// configurent le mode et le handler
AT91C_BASE_AIC->AIC_SMR [source] = mode ;
AT91C_BASE_AIC->AIC_SVR [source] = (international non signé) traiteur ; interrupt
du

// AT91C_BASE_AIC->AIC_ICCR = 1 << source ;


and du
} sur le line

AT91C_BASE_AIC->AIC_SVR [source] = (international non signé) traiteur ; le

I voient le changement du registre AIC_SVR_1 à 0x200011B8, qui est tout le

On de *** de good.

au mauvais ordre.  Quand je fais le même appel à partir de mon programme (j'avoir le coupé-collé la même initialisation et des routines d'ISR) :

IRQ_ConfigureIT (AT91C_ID_SYS, AT91C_AIC_PRIOR_LOWEST, ISR_Pit) ; le

I vérifient qu'AT91C_ID_SYS est valeur 1, et ISR_Pit est une fonction du prototype

void ISR_Pit (vide) à l'adresse 0x200000A4

And alors que je la trace dans le

void IRQ_ConfigureIT2 (source non signée d'international, mode non signé de
international, vide de
(*handler) (vide) d'appel)
{débronchement de
// le first
d'interruption AT91C_BASE_AIC->AIC_IDCR = 1 << source ; le

// configurent le mode et le handler
AT91C_BASE_AIC->AIC_SMR [source] = mode ;
AT91C_BASE_AIC->AIC_SVR [source] = (international non signé) traiteur ; interrupt
du

// AT91C_BASE_AIC->AIC_ICCR = 1 << source ; le

And du
} j'inspecte la valeur du « traiteur » et c'est l'adresse 0x200000A5 (! ! !), un byte plus que l'indicateur passé.  Et je vois le registre changer en la valeur incorrecte 0x200000A5, quand je veux qu'elle se dirige à mon adresse d'ISR_Pit du

So de *** de 0x20000A4.

que mon indicateur de fonction obtenu a poussé par un quand j'ai appelé la fonction.  Ainsi mes deux questions sont :

1) que ce qui vous des experts ferait en termes de dépanner même cette observation bizarre ?  Qu'a pu expliquer ceci ?  Ma pile est-elle battu ?  Plus d'issues d'alignement de mémoire ?
2) que ce qui peut je faire pour apaiser les dieux incorporés, que j'ai clairement fâchés ?

Thanks infiniment pour tout thoughts.
class= de

Réponse : L'indicateur de fonction a corrompu/a compensé une fois passé à la fonction

Vérifier toujours le dossier de carte pour voir les excentrages corrects.
À part de cela, fait-ils les travaux de code ?
En outre, comment AT91C_BASE_AIC et AIC_SVR est-il défini ? est-il défini en tant que composé volatil ?
Pouvez-vous reproduire le problème en enlevant le code tout non convenable, pour vous exclure avoir un mauvais indicateur incrémenter votre registre ?
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us