Petite libc pour les systèmes embarqués
Je suis à la recherche d'un petit libc pour l'utilisation embarquée avec freertos sur un microcontrôleur ARM7.
J'ai regardé newlib, mais il est un peu trop complexe pour mes besoins. Newlib appels à malloc() dans
un certain nombre de fonctions (par exemple, printf()), ce qui n'est pas bon pour les petites embarqués en temps réel des systèmes.
Personne ne sait de une petite, portable, open source, mise en œuvre de la libc qui correspondent à ma demande?
- Quel OS/noyau que vous utilisez? C'est la clé pour déterminer quels sont vos choix.
- Je suis l'aide de freertos - freertos.org
InformationsquelleAutor GT. | 2011-02-07
Vous devez vous connecter pour publier un commentaire.
PDCLib pourrait s'adapter à vos besoins. C'est toujours incomplètes [lien brisé], cependant, et probablement dans le besoin de beaucoup plus d'essais réels. Son auteur va par DevSolar ici DONC.
mise à jour 2012-11-01: de 2012-08-14, le développement a été repris par Owen Berger, avec une nouvelle page d'accueil et dépôt bitbucket [lien brisé, l'utilisation cette une].
mise à jour 2015-10-31: Le site dédié semble être mort, mais le code peut être trouvé sur bitbucket. Le dernier commit de ce référentiel qui s'est passé 2014-11-24.
mise à jour 2016-07-12: Le site est de retour, et DevSolar commencé à commettre de nouveau sur 2016-03-01.
- Je utiliser newlib sur mon Cortex_M3 avec 32 ko de RAM, et d'éliminer la
malloc()
vous pouvez utilisersiprintf()
ousniprintf()
.Pro: plus d'appels à
malloc()
.Con: Il n'a pas de suport mise en forme float et double, et n'est pas vraiment portable de cette façon.
Si vous utilisez newlib et de ne pas mettre en œuvre la sbrk syscall, alors toute fonction que vous utilisez et qui nécessite malloc va générer une erreur de l'éditeur de liens, qui vous empêchera de vous, par inadvertance, à l'aide d'un appel qui nécessite de la mémoire dynamique . Donc, je voudrais vous suggérer de le faire, et puis tout simplement éviter ces fonctions qui provoquent l'erreur de l'éditeur de liens. Vous pouvez modifier ou de remplacer toutes les fonctions de la bibliothèque vous ne souhaitez pas utiliser.
printf() n'est pas bon pour les petites embarqués en temps réel des systèmes!
En fait c'est pire que de malloc dans de nombreuses façons. Listes d'arguments Variable, mise en page très complexe, nombre à virgule en charge lorsque vous n'en avez pas besoin, etc etc. printf() est livré avec une énorme surcharge, et le compilateur ne sera pas en mesure de le réduire, comme chaque paramètre passé à elle est évaluée au moment de l'exécution.
printf() est peut-être ok pour les amateurs et les débutants encore en apprentissage C. Mais si vous êtes un programmeur professionnel, vous devriez vraiment écrire votre propre série du moniteur /LCD routines. Vous permettra d'améliorer considérablement la performance du programme, et le flash de la consommation.
printf
dans les systèmes embarqués. Il y a quelque chose de mal avecprintf
des implémentations d'appelmalloc
et de faire toutes sortes de choses inutiles. Un simpleprintf
mise en œuvre sans virgule flottante (ou qui ne tient pas compte de la précision des problèmes lors de l'impression à virgule flottante) et sans POSIX i18n%n$
argument prescripteurs, peut être mis en œuvre dans environ 2k de code, et permet à l'appelant demande à être beaucoup plus petit et plus simple que si c'était à doubleprintf
-comme la fonctionnalité de tous sur la place.wchar_t
commechar
de sorte que lel
modificateur peut être ignoré, et omettre la virgule flottante, et ne pas bidouiller quoi que ce soit pour les performances, je parie que vous pouvez obtenirprintf
beaucoup plus petit que 2k. Peut-être moins de 0,5 k même.J'avais des besoins similaires et a constaté que klibc adapter assez bien. Le seul inconvénient (pour une utilisation commerciale), c'est que la distribution comprend un peu de sous GPL fichiers, même si la plupart de c'est sous licence BSD. J'ai hacké une version minimale de ici.
C'est encore plus limité que PDCLib, et si vous avez juste besoin de quelques fonctions de base telles que printf et strtok. Compile à seulement 4 ko avec toutes les fonctions incluses.
Vous pouvez vérifier la LGPL µClibc, qui est censé être proche de
glibc
mais beaucoup plus adapté aux systèmes embarqués.Il dispose également d'un page référence à d'autres open source C de bibliothèques, y compris newlib et eCos, qui peut être plus adapté pour les non-environnements Linux.
Regarder dans uClibc et EGLIBC, peut-être.