NOUVEAU et une information correcte
La référence pour le se trouve le jeu d'instructions here.
Pour émuler un verrou, il est suggéré dans la documentation que les interruptions soient désactivées.
Example ; Make the operation ”VarC = VarA + VarB” atomic:
DINT ; Disable interrupts (INTM = 1)
MOVL ACC,@VarA ; ACC = VarA
ADDL ACC,@VarB ; ACC = ACC + VarB
MOVL @VarC,ACC ; Store result into VarC
EINT ; Enable interrupts (INTM = 0)
- pointeurs algorithme -
boucle principale interrompt préempter et apparemment des opérations atomiques n'existent pas. Votre boucle principale doit désactiver les interruptions pendant qu'elle éclate. Puisque la désactivation des interruptions revient à posséder un verrou dans ce contexte, vous pouvez implémenter la file d'attente en tant que mémoire contiguë ou sur un slop. La première consiste à copier la mémoire vers la pile de la boucle principale sur pop, qui peut être plus lente - cependant, à condition que votre FIFO ait assez de mémoire, vous ne devriez pas avoir à allouer des nœuds slist à partir d'un tas. . Bien sûr, les maux de tête de gestion de la mémoire n'existeront pas si les nœuds Slist ont une taille uniforme. Donc, pour un bruit, vous devez désactiver les interruptions et supprimer l'élément. Une fois cela fait, réactivez l'interruption. Pour les vecteurs d'interruption, c'est comme d'habitude (vous devrez peut-être désactiver les interruptions pendant le traitement vectoriel interrompu - ceci dépend du contrôleur).
Le DSP est-il en mesure de commander à nouveau des charges et des stocks? Avez-vous des opérations atomiques disponibles? Est-ce qu'il fait des barrières de mémoire peut-être? –
Portez une attention particulière au mot-clé «volatile» dans cet article. Si vous ne savez pas ce qu'il fait, vous devez apprendre. – Robert
Est-ce que ce DSP a une comparaison et un échange contigus à double mot? –