pour printf()
, puts()
etc fonctionne sur une plate-forme intégrée, vous devez implémenter quelques hooks qui fonctionnent avec la bibliothèque C. Cela dépend généralement des bibliothèques C fournies avec votre compilateur, donc dépend probablement du compilateur. Mais dans de nombreux cas, la bibliothèque vous demande simplement de fournir une fonction (ou un nom similaire) qui prend un caractère (généré par la fonction de bibliothèque printf()
) et l'envoie à votre périphérique de sortie choisi. Cela pourrait être un tampon mémoire, un port série, un message USB, peu importe.
Du point de vue de la bibliothèque C, la fonction putc()
serait exécuté à la fin, il est à vous si vous le mettre en œuvre pour être une simple fonction de blocage (en attente jusqu'à ce que le port série est libre et l'envoi du caractère), ou non-bloquant (le mettre dans un tampon, pour être envoyé par une tâche d'interruption en arrière-plan, mais le tampon peut se remplir si vous produisez assez d'octets assez vite, et vous devez bloquer ou supprimer les caractères). Vous pouvez également le faire fonctionner correctement avec votre RTOS si vous en avez un, en implémentant une écriture bloquante qui dort sur un sémaphore jusqu'à ce que le port série soit disponible.
Donc, en résumé, lisez la documentation de votre compilateur et sa bibliothèque C, et il devrait vous dire ce que vous devez faire pour printf()
travail.
liens Exemple pour AVR micro avec le compilateur GCC:
ARM compilateur GCC à l'aide de la bibliothèque newlib C:
Vous aurez probablement besoin de fournir plus d'informations pour obtenir une réponse: (a) Quel microcontrôleur, exactement? "ARM" spécifie simplement le jeu d'instructions. (b) Pourquoi le code ci-dessus est-il "manifestement" incorrect? Il y a beaucoup de pièces qui travaillent ensemble pour faire 'printf()' travail, l'initialisation du port série est juste l'un d'eux. Savez-vous * que c'est la mauvaise partie? (c) Avez-vous un exemple de code qui fonctionne, peut-être fourni par le fabricant? (d) Avez-vous un oscilloscope? –
Par exemple microcontrôleur LPC213x. Ce code est incorrect car il ne fonctionne pas avec printf. Ne pas avoir de code qui fonctionne. –