sistemas los ingenieria industria embebidos ejemplos diversidad consumo bajo c embedded libc freertos

los - Pequeño libc para sistemas embebidos.



sistemas embebidos en la industria (7)

Estoy buscando una pequeña libc para uso integrado con freertos en un microcontrolador ARM7. He visto newlib, pero es un poco demasiado complejo para mis necesidades. Newlib llama a malloc () en una serie de funciones (por ejemplo, printf ()), lo que no es bueno para pequeños sistemas de tiempo real incrustados.

¿Alguien sabe de una implementación libc de código abierto, pequeña y portátil que se ajuste a mi aplicación?



Puede consultar el LGPL µClibc , que se supone está cerca de glibc pero es mucho más adecuado para sistemas integrados.

También tiene una page referencia a otras bibliotecas de código abierto de C, incluidas newlib y eCos , que pueden ser más adecuadas para entornos que no sean Linux.


Si usa newlib y no implementa sbrk syscall, entonces cualquier función que use que requiera malloc generará un error de enlace, lo que evitará que use inadvertidamente una llamada que requiera memoria dinámica. Por lo tanto, le sugiero que lo haga y, a continuación, simplemente evite las funciones que causan el error del vinculador. Puede modificar o anular cualquier función de biblioteca que no desee utilizar.


Tenía necesidades similares y encontré que klibc encajaba bastante bien. El único inconveniente (para uso comercial) es que la distribución incluye algunos archivos con licencia GPL, aunque la mayoría de ellos tiene licencia BSD. He hackeado una versión mínima de esto here .

Esto es incluso más limitado que PDCLib, y es adecuado si solo necesita algunas funciones básicas como printf y strtok. Compila a solo 4kB con todas las funciones incluidas.


PDCLib podría satisfacer sus necesidades. Sin embargo , aún está incompleto [enlace roto] , y probablemente necesite muchas más pruebas del mundo real. Su autor va por DevSolar aquí en SO.

actualización 2012-11-01: A partir de 2012-08-14, el desarrollo fue asumido por Owen Shepherd, completo con una nueva página de inicio y repositorio de bitbucket [enlace roto, use este ] .

actualización 2015-10-31: el sitio web dedicado parece estar muerto, pero el código todavía se puede encontrar en bitbucket . El último compromiso con ese repositorio ocurrió el 2014-11-24.

actualización 2016-07-12: el sitio web está respaldado y DevSolar comenzó a comprometerse nuevamente el 2016-03-01.


¡printf () no es bueno para pequeños sistemas en tiempo real incrustados!

En realidad es peor que malloc en muchos sentidos. Listas de argumentos variables, formato muy complejo, soporte de número flotante cuando no lo necesita, etc. printf () tiene una sobrecarga enorme, y el compilador no podrá reducirlo, ya que cada parámetro que se le pasa se evalúa en tiempo de ejecución

Printf () quizás esté bien para aficionados y principiantes que aún aprenden C. Pero si usted es un programador profesional, realmente debería escribir su propio monitor de serie / rutinas LCD. Mejorará dramáticamente el rendimiento del programa y el consumo de flash.


Utilizo newlib en mi Cortex_M3 con 32kB de RAM, y para eliminar el malloc() puede usar siprintf() o sniprintf() .

Pro: No más llamadas a malloc() .

Contras: no es compatible con el formato float y double , y no es realmente portátil de esta manera.