Avr-gcc me dice que el compilador no está optimizado

Bueno, se me dio por probar el compilador de avr que brinda gcc para empezar a trabajar con sistemas GNU y cambiar un poco a las poco prácticas herramientas que brinda windows pero más que nada porque la inclución de sistemas GNU en sistemas enbebidos amerita a tener práctica en estas herramientas.

Realicé un simple programita en C para el atmega328p incluyendo la librería delay.h que la API de atmel ofrece. Efectivamente dicha librería se encuentra en el path correspondiente

/usr/lib/avr/include/util

incluyendo en la siguiente sentencia en el programa

#include <util/delay.h>


Pero primeramente no entiendo que me quiere decir la siguiente salida del proceso de compilación
#warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed" [-Wcpp]
# warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"

efectivamente la optimización del compilador está deshabilitada ¿cómo se habilita? pero para empezar ¿por qué está deshabilitada?

Saludos.
 

Adjuntos

  • Captura de pantalla de 2016-09-12 16:53:24.jpg
    Captura de pantalla de 2016-09-12 16:53:24.jpg
    92.4 KB · Visitas: 8
efectivamente la optimización del compilador está deshabilitada ¿cómo se habilita? pero para empezar ¿por qué está deshabilitada?

¿Quizás ese error se va compilando con algún nivel de optimización distinto de -O0? (o, cero).
Tratá de compilar con -O2 a ver que pasa.

La optimización está deshabilitada por default al parecer, tiene lógica, porque durante el desarrollo uno quiere que el compilador no cambie el orden de las instrucciones, ni se ponga a hacer loop unrolling o a inlinear (que verbo que invente) funciones para salvar espacio de código y/o hacer que corra más rápido.

Si hay una relación simple entre código escrito y código objeto generado entonces es más fácil encontrar bugs, depurar, corregir... hasta tener una versión un poco más sólida y después sí se puede optimizar y corregir los errores nuevos que introduce la optimización (no haber declarado variables volatile cuando son usadas por interrupción, ejecución fuera de orden, etc).
 
Y el problema persiste. Igualmente se menciona que la función delay de la librería delay.h no funcionará como está designada.

Claro... lo que podría pasar es que la función delay tarde más de lo que uno esperaría. No debería ser algo catastrófico a no ser que se precise un timing muy preciso.
Pero si es esperar a que pase cierto tiempo mínimo, y esperar un poco demás no afecta al resto del programa, sería irrelevante.
 
El archivo objeto es creado, por lo tanto es un aviso. Realmente es de consideración que el compilador tenga una salida con una recomendación con respecto a la implementación de un código y que en la documentación se recomiende que si es de precisión utiliza ensamblador. Es algo que hace robusto al sistema, tanto al avr como al toolchain de su programación.

Saludos.
 
hola
El archivo objeto es creado, por lo tanto es un aviso. Realmente es de consideración que el compilador tenga una salida con una recomendación con respecto a la implementación de un código y que en la documentación se recomiende que si es de precisión utiliza ensamblador. Es algo que hace robusto al sistema, tanto al avr como al toolchain de su programación.

Saludos.
Los datos que proporcionas son inpresisos o nulos​
por favor ., una captura de pantalla del compilador con el error​
tambien que vercion de compilador usascomo asi tambien el modo que armas el proyecto en AVRstudio​
 
Última edición:
Al código no lo escribo en un ide sino con nano. El compilador es gcc-avr 4.8.2 que corre en un sistema ubuntu 16.04 y la captura con el error que arroja el compilador está adjuntado en el primer comentario.

Es un simple código con una sentencia _delay_ms() que la puedo compilar en atmelstudio y no tengo problema, es más todos los códigos para avr los compilo en atmelstudio, pero esta vez quise probar la herramienta del daemon gcc que corre en ubuntu.
 
Última edición:
hola
Al código no lo escribo en un ide sino con nano. El compilador es gcc-avr 4.8.2 que corre en un sistema ubuntu 16.04 y la captura con el error que arroja el compilador está adjuntado en el primer comentario.

Es un simple código con una sentencia _delay_ms() que la puedo compilar en atmelstudio y no tengo problema, es más todos los códigos para avr los compilo en atmelstudio, pero esta vez quise probar la herramienta del daemon gcc que corre en ubuntu.
la captura de pantalla es de la pagina de atmel​
alli se nota claro que no es el AVR studio​
sea linux o window ., la ventana que te tiene que aparecer es igual a esta​
capture_09132016_203008.jpg
el AVR-GCC es parte del AVRstudio ., si programas arduino te recomiendo la ultima vercion ., esa trae para programar IDE arduino (las anteriores NO)​
para la optimisacion de codigo ., ya sea ASM o C ., se hace desde esta ventana​
alli se coloca el micro que usas ., el cristal y por supuesto ., la optimisacion del codigo ., la ventana es esta​
capture_09132016_202740.jpg
 
Última edición:
Atrás
Arriba