Problema al incluir una librería en code blocks

Iniciado por jose_j, 28 Diciembre 2017, 15:06 PM

0 Miembros y 1 Visitante están viendo este tema.

jose_j

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.

Gallu

Tiene pinta de que las dependencias se están pegando de ostias, si te fijas el mensaje parece claro

/* 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:

#elif defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
#include <avr/iom328p.h>
#elif defined (__AVR_ATmega329__) || defined (__AVR_ATmega329A__)



Espero que te sirva.

Saludos
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.

jose_j

Cita de: 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

/* 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:

#elif defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
#include <avr/iom328p.h>
#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.

Gallu

#3
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
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.

MAFUS

Incluye el define para el uP que estás usando antes de la librería:
#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.

jose_j

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!!!