Étape 4: Autre Hardware / Software astuces
Il y a quelques autres trucs passe dans le code source que j’ai fournis dans le présent instructible qui est à noter.
Date / Time Code :
Pour calculer date / temps j’ai utilisé les fonctions de bibliothèque clib. Cette ia un peu délicat car clib utilise malloc pour saisir mandrins de mémoire. Cela pose des problèmes à un RTOS qu’il faut au commutateur de tâche. La solution est d’obtenir clib d’utiliser les fonctions malloc dans l’OS au lieu des fonctions malloc dans la bibliothèque. Heureusement, certains mec sympa sur Internet il triés et apporté une solution. Voir le site web de Michal Demin pour plus d’informations.
Ainsi, le matériel utilise le cristal de 32,768 kHz externe pour garder une incrémentation de compteur 32 bits une fois par seconde. Le compteur est sauvegarde sur batterie (cellule de pièce de monnaie) et ne se réinitialise pas jamais. Réinitialisation matérielle, le débogage, ou flashage ne réinitialise pas le compteur ! Le compteur peut être défini via le logiciel, cependant. Si la valeur pour le nombre de secondes depuis le 1er janvier 1970 rend clib heureux. Une fois réglée, il y a un tas de fonctions clib pour calculer le temps. Remarque, une date / heure / fuseau horaire, clib peut inverser calculer le nombre de secondes pour vous.
Une fois que clib connaît le fuseau horaire, la date / d’heure est prêts à aller. La date / heure sur l’écran LCD est bon quel que soit l’heure d’été, les années bissextiles ou tout autres cochonneries que je ne comprends pas. En effet, une fois définie, la date / heure doit être bonne année pour les années (autres que la dérive).
Pour régler la date / heure, j’ai décommenter une section de code (regardez dans ctime.c vers le haut) qui effectue le calcul du temps inversé. Le compteur 32 bits est mises à jour et le programme se poursuit. Puis, j’ai en commentaire la date / time code qui définit l’heure et reflasher le micro. C’est un hack méchant - mais, j’ai juste manqué de piratage de jus pour écrire du code de bouton pour régler l’heure / date. N’hésitez pas.
Console de débogage :
Je viens de commencer à écrire du code pour ajouter une console de débogage. L’idée est, prendre l’un des canaux UART inutilisés et l’utiliser pour les messages de débogage d’application. La console peut aussi être interactive afin que des messages répétitifs peuvent être basculés sur et en dehors. J’ai utilisé ce donc je peux regarder les valeurs analogiques défiler. Il est agréable de pouvoir à son tour ce sur et en dehors.
Caractéristiques de la console de débogage comprennent :
- Debug console s’exécute comme une tâche distincte - la tâche de priorité le plus bas. Conçu pour être à faible impact sur le système.
- Autres tâches peuvent appeler « vDebugPrintf() » pour envoyer un message mis en forme sur le débogage de port série.
- Les messages formatés sont chargés dans une file FIFO de l’OS.
- La tâche déboguer transfère continuellement le caractère hors de la file d’attente FIFO et sur le port série.
- Le code source léger de vDebugPrintf est fournit donc vous pouvez ajouter vos propres trucs spéciaux.
Sortie automatique RC PWM :
Deux broches ont été mis en place avec une sortie PWM de 50Hz. L’idée est que ces broches seront utilisés pour piloter les moteurs servo RC à l’avenir. Avec une écriture simple sur un registre micro que le facteur de marche de la sortie PWM peut être modifiée, un moteur servo RC connectés répondrait alors mon déménagement vers la nouvelle position.
Encore une fois, c’est dire combien il est facile d’installation et contrôle le matériel. Générer une sortie PWM avec micro seconde résolution sans quelque assistance matérielle serait un souci majeur. Le matériel de bras, c’est tout à facile.
Automatique analogique/numériques Conversions :
Partie de mon matériel lors de l’initialisation comprend la mise en place quelques canaux circonstancielle. Droit maintenant, j’ai quatre paramètres de canaux qui utilisent un autre canal DMA. Après qu’une conversion est terminée, le canal DMA copie la valeur dans un buffer RAM automatiquement. Le convertisseur analogique à numérique que se déplace sur l’autre broche automatiquement. L’ensemble du processus se répète maintes et maintes fois sans toute surcharge du processeur.
Par conséquent, le tampon de RAM a toujours l’analogue plus tard (plus haut à ce jour) à des valeurs numériques. Utilisation simple, les valeurs de la mémoire RAM de la mémoire tampon et savent qu’ils sont les plus fraîches. Garder les valeurs de la RAM à jour est terminée sans aucune interruption du micro !
Compteur inactivité de l’UC :
Lorsque l’OS n’a aucun travail à faire (toutes les tâches sont dans un état d’inactivité) le système d’exploitation appelle une autre fonction de rappel d’utilisateur appelée « vApplicationIdleHook() ». J’ai programmé cette fonction simplement incrémenter un compteur 32 bits.
Après qu’une seconde écoulé (100 graduations OS) la valeur du compteur peut être imprimée dans la console de débogage. Le compteur est alors remis à zéro et le processus se répète.
En regardant l’imprimé de console de débogage de l’inactivité à crochet, nous pouvons voir combien temps d’inactivité il est dans l’OS. Un peu comme regarder le graphique de charge CPU sur un PC.
Même avec tout ce qui se passe dans le système d’exploitation, transferts de données LCD, analogue à la conversion numérique, sorties de PWM RC, LED se tourner, les grilles de crochet ralenti jusqu'à plus de 350 000 impulsions par seconde ! Tout simplement incroyable, il y a certains beaucoup chevaux surplus Considérant combien le CPU est déjà fait. Ce bébé a des jambes !