Question

Quel est le meilleur moyen de réinitialiser un Pic18 en utilisant le code C Avec le compilateur HiTech Pic18 C

Modifier:

Je suis en train d'utiliser

void reset()
{
#asm 
  reset
#endasm
}

mais il doit y avoir un meilleur moyen

Était-ce utile?

La solution

Il existe une FAQ ici .

Q: Comment réinitialiser le micro?

  

Une solution consiste à réinitialiser toutes les variables à   leurs valeurs par défaut, comme indiqué dans le PIC   Manuel. Ensuite, utilisez le langage d'assemblage   pour aller à l'emplacement 0x0000 dans le   micro.

     

#asm ljmp 0x0000

     

#endasme

     

Ceci est assez sûr à utiliser, même lorsque   appelé dans les interruptions ou   procédures. Les micros de la série PIC 16x   avoir 8 niveaux de pile. Chaque fois un   la procédure est appelée, un niveau de pile   est utilisé pour l'adresse de retour. Il   est un tampon circulaire, donc même si le   micro est de 7 niveaux de procédure profonds et   dans une interruption quand une réinitialisation est   appelé, c’est le nouveau départ de la   tampon de pile, et la volonté micro   continuer comme d'habitude.

     

Une autre méthode consiste à configurer le chien de garde   minuterie lorsque la puce est programmée, et   utilisez les instructions CLRWDT () tout au long de   le code. Quand vous voulez que le micro   réinitialiser, arrêter d'effacer le bit de chien de garde   et le micro sera réinitialisé après environ   18ms à 2 secondes selon le   prescaler.

Autres conseils

Les compilateurs ont généralement leur propre fonction reset (), mais ils font exactement ce que fait votre fonction, et le nom réel peut varier d'un compilateur à l'autre.

Vous le faites déjà de la meilleure façon possible.

Votre réponse est la meilleure façon que je connaisse. La clé est que vous avez l'instruction d'assemblage dans un appel de fonction, tout seul.   Le compilateur n'optimisera pas une fonction comportant un assemblage inline. Par conséquent, si vous incluez l'instruction de réinitialisation inline à une fonction très volumineuse, le compilateur n'optimisera pas le code de cette fonction. Vous avez évité cela en mettant Reset dans sa propre fonction. Le code de cette fonction ne sera pas optimisé, mais peu importe, vu que c'est une si petite fonction.

Sauf s'il existe une fonction de bibliothèque définie par la bibliothèque d'exécution du fournisseur du compilateur (si une telle bibliothèque existe même dans le monde des microcontrôleurs ... mais ce devrait être le cas), alors non. C lui-même ne vous aidera certainement pas à faire une "réinitialisation". est beaucoup trop un problème spécifique à la plate-forme pour que C puisse le couvrir.

J'utilise le compilateur ccsinfo.com, qui a un appel d'API similaire pour réinitialiser le PIC, mais je penserais que la solution du compilateur ferait bien les choses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top