Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jose_j en 28 Diciembre 2017, 15:06 pm



Título: Problema al incluir una librería en code blocks
Publicado por: jose_j en 28 Diciembre 2017, 15:06 pm
Hola gente, soy nuevo en el foro   , espero que me puedan ayudar,ahh también soy nuevo en la programación , el tema es que estoy programando los micros atmel el atmega328p lo hago el Linux con code blocks, para el tema de entradas y salida se incluye la librería io, include <avr/io.h>, ahora necesito incluir la librería para la comunicación serial la cual es include<avr/iom328p.h>, pero me da error al compilar, me sale una pestaña de iom328p.h  marcando el error que dice # error "include <avr/io.h> instead of this file", y en un comentario (que está en esa pestaña que se abrió) dice : this file should only be included from <avr/io.h>, never directly. O sea dice  que este archivo sólo debe incluirse desde <avr/io.h>, nunca directamente. Ese es el problema, como lo incluyo desde avr/io.h? Gracias y Saludos.


Título: Re: Problema al incluir una librería en code blocks
Publicado por: Gallu en 28 Diciembre 2017, 15:56 pm
Tiene pinta de que las dependencias se están pegando de ostias, si te fijas el mensaje parece claro

Código
  1. /* This file should only be included from <avr/io.h>, never directly. */

Es posible que tal y como indica el mensaje, si incluyes io.h ya puedas acceder a las funciones de iom328p.h ??

Desde luego, si revisas el fuente de io.h te encuentras algo como esto:

Código
  1. #elif defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
  2. #include <avr/iom328p.h>
  3. #elif defined (__AVR_ATmega329__) || defined (__AVR_ATmega329A__)


Espero que te sirva.

Saludos


Título: Re: Problema al incluir una librería en code blocks
Publicado por: jose_j en 28 Diciembre 2017, 18:27 pm
Tiene pinta de que las dependencias se están pegando de ostias, si te fijas el mensaje parece claro

Código
  1. /* This file should only be included from <avr/io.h>, never directly. */

Es posible que tal y como indica el mensaje, si incluyes io.h ya puedas acceder a las funciones de iom328p.h ??

Desde luego, si revisas el fuente de io.h te encuentras algo como esto:

Código
  1. #elif defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
  2. #include <avr/iom328p.h>
  3. #elif defined (__AVR_ATmega329__) || defined (__AVR_ATmega329A__)


Espero que te sirva.

Saludos
gracias por tu respuesta, y vi la fuente de io.h y si, esta lo que decis, pero al incluir solo la io.h no puedo usar los registro de la comunicación serial,  cuando incluyo el include<avr/iom328p.h> , el code blocks me va completando los nombres de los registros,  o sea me da nombre de los registro que puedo usar,cosa que si uso solo el io.h me da error, no se si me explico bien, un ejemplo
para usar el regitro UCSR0A con io.h me da error, pero si le agrego include<avr/iom328p.h> me reconoce ese registro.


Título: Re: Problema al incluir una librería en code blocks
Publicado por: Gallu en 28 Diciembre 2017, 20:45 pm
Pues no se estará incluyendo por la condición elif.

Echando un ojo por encima, veo que para que se cumpla esa condición y se incluya la librería iom328p al incluir io.h, es posible que tengas que añadir alguna directiva al compilador, no estoy seguro de esto eso si, te doy una idea para que lo investigues.

échale un ojo a esto

http://www.atmel.com/webdoc/avrlibcreferencemanual/using_tools_1using_avr_gcc_mach_opt.html


Por curiosidad, qué estás programando ?

Saludos


Título: Re: Problema al incluir una librería en code blocks
Publicado por: MAFUS en 28 Diciembre 2017, 22:35 pm
Incluye el define para el uP que estás usando antes de la librería:
Código:
#define __AVR_ATmega328P__
#include <avr/io.h>

Aunque también puedes hacerlo desde la línea de comandos. Mira la documentación de tu compilador.


Título: Re: Problema al incluir una librería en code blocks
Publicado por: jose_j en 29 Diciembre 2017, 03:08 am
gracias por sus respuestas, voy a intentar programarlo con eclipse, no le pude hacer andar  con code blocks :-( , lo que estoy queriendo hacer es poder comunicar el micro con el puerto usb, por ahora solo eso, ya que lo veo lejos no pense para que jajaja vamos a ver que sale. gracias nuevamente por sus respuestas. saludos!!!