Réinitialisation d'un Pic18 à partir de C
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
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.