7 votos

Estrategias para gestionar el tamaño del código - PIC18 XC8

Soy nuevo en el desarrollo de C embebido y estoy buscando algunos principios/guías generales para gestionar el tamaño del código generado.

En mi ejemplo específico estoy usando XC8 en un PIC18F4550. Mi código hasta ahora utiliza alrededor del 13% del espacio. ¡Una vez que uso "time.h" y 1/2 funciones de él, el uso salta al 45%! Me doy cuenta de que el compilador gratuito de XC8 no optimiza, pero todavía estoy muy sorprendido de ver cuánto espacio se utiliza.

Lo que estoy buscando es un consejo / puntos de vista a lo largo de las líneas de

  • Alternativas a las bibliotecas estándar que implementan en pequeños subconjuntos específicos de la funcionalidad. Por ejemplo, una librería de fecha/hora. Es decir, ¿hay reposiciones de las que pueda obtener rutinas útiles?
  • Cómo ver lo que está utilizando todo el espacio. (Archivos de listados/mapas - y consejos para analizarlos)
  • Cualquier otro consejo o recurso.

EDITAR : He encontrado una buena implementación sin usar stdlib aquí: https://codereview.stackexchange.com/questions/38275/convert-between-date-time-and-time-stamp-without-using-std-library-routines

Sin embargo, la pregunta general sigue en pie. ¿Existen directrices, buenas fuentes de repositorios, etc.?

3voto

Jeeter Puntos 118

He buscado un poco y estos son los consejos que he encontrado

  1. Escriba un código mejor. El tamaño del código y la velocidad deben ser considerados en cada paso del camino.
  2. El compilador/enlazador de C sólo utilizará las funciones que realmente se usan. Por lo tanto, incluir un .h no debería aumentar el tamaño del código (mucho)
  3. Sin embargo, las funciones estándar suelen ser más genéricas de lo que usted necesita. Es posible escribir versiones más pequeñas que sólo hagan lo que usted necesita
  4. Cadenas compartidas según la respuesta de @BrianK

A continuación, hay algunas alternativas que no abordan el problema principal del tamaño del código, pero que pueden ser consideradas si todo lo demás falla

  1. Utilizar un PIC con más espacio
  2. Utilizar un compilador de optimización, por ejemplo, MPLAB Pro
  3. Utilizar el ensamblador para una parte o la totalidad del código

Todavía me gustaría una manera fácil de ver qué funciones y funciones incluidas están utilizando la mayor parte del espacio. Actualizaré aquí si encuentro una forma fácil de hacerlo.

2voto

Sean Chambers Puntos 3159

Implementar su propia versión de las funciones estándar en lugar de incluir toda la biblioteca puede ayudar. Hay un millón de optimizaciones más pequeñas y específicas que puedes hacer, pero una buena colección de referencia de ese tipo de trucos es el libro El placer del hacker . Es muy práctico (sobre todo para juguetear con los bits como se suele hacer en un microcontrolador) y lo recomiendo.

2voto

Buu Nguyen Puntos 19391

Estas son algunas de las cosas que he hecho al utilizar el compilador C18 de Microchips. Quizás los conceptos se apliquen a tu compilador: - declarar cada cadena una vez. Poner en un archivo .c separado y usar un archivo .h para referenciarlas. En otras palabras, no duplique los mensajes de visualización varias veces. - declare las cadenas para que vayan en rom. Esto no le ayudará con la ROM (espacio de código) pero le ahorrará memoria. - escriba código ajustado. Si se duplican varias líneas de código, póngalas en una función. Copiar / pegar no es necesariamente el mejor amigo de los programadores embebidos. - como ya pensaste, implementa tus propias funciones en lugar de incluir una librería. Una vez ahorré una tonelada de espacio creando mi propia función itoa(). Intenta no usar printf.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X