Sur un PIC, vous ne passeriez pas nécessairement directement de quelque chose d'aussi simple que des boucles d'attente occupée à quelque chose d'aussi compliqué que des bibliothèques multithread, comme proposé dans certains commentaires. Supposons que vous clignotiez votre LED chaque seconde dans une boucle - Cela donne du code dans cette boucle (ou appelé depuis l'intérieur de cette boucle) presque 1 seconde pour exécuter quelque chose de différent. Si vous pouvez découper ces tâches en tranches si petites qu'elles rentrent dans l'intervalle "quand vous avez besoin d'être de retour" pour faire clignoter la LED, c'est un début. De toute évidence, si vous exécutez du code arbitraire dans la boucle clignotante, la fréquence de vos clignotements sera affectée par le temps que prennent ces autres parties du code et vous ne pourrez plus utiliser le CPU comme base de temps - Vous avez besoin de quelque chose de différent pour vérifier si le clignotement est dû. La plupart des microcontrôleurs disposent d'une minuterie qui vous permet de le faire. Lire une minuterie libre pour vérifier si vous "devez clignoter" serait la première étape simple. Voir ci-dessous pseudo-code:
while (1){
if (((time = readTimer()) - oldTime) > INTERVAL){
/* Timer run-around ignored for reasons of simplicity */
oldTime = time;
blink();
}
else
doSomethingElse();
}
Notez le somethingElse()
doit être terminé dans le moins de temps possible comme temps courir affecte la précision de votre clignements.
Si vous souhaitez toujours que le clignotement soit à des intervalles exacts, vous devez rechercher les routines de service d'interruption. Découvrez comment vous déclenchez une interruption avec la fréquence de clignotement de la minuterie et faites clignoter la routine de service d'interruption. Cela libère votre boucle principale de faire cela et vous pouvez faire toutes les tâches de longue durée que vous voulez là-bas. La minuterie déclenchera une interruption à la fréquence voulue, et la routine de service d'interruption allumera les lumières.
Regardez dans l'obtention d'un environnement de développement intégré (IDE). Peut-être que Visual Studio aurait déjà une fonctionnalité qui répond à vos besoins (et ils ont aussi une version gratuite). –
Connaissez-vous le multi-threading? –
Sur quel système d'exploitation exécutez-vous le programme? – user3386109