Autor Tema: Cursillo en C18 para PICS DESDE CERO  (Leído 300083 veces)

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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #300 en: 17 de Marzo de 2011, 17:52:22 »
Tengo un problema con la definicion y declaracion de variables en los .c y .h, tengo entendido que:

fileA.h:
extern char variable;

fileA.c:
#include "fileA.h"
char variable;

fileB.c
#include "fileA.h"
variable=50;

hasta ahi todo bien, pero si quiero usar la misma variable en otro archivo .c no puedo hacerlo...

como se hace? es todo un rollo esto de los .c y .h, alguien conoce una guia para saber q se hace y que no con estos archivos?

Lo q nose hacer es crear una variable en un archivo C, y este se incluya en un archivo B y el archivo B se incluya en el archivo A, por tanto A tendrá las variables de B y C. como hacer?

gracias.
No, no es así, sería de la siguiente manera:

fileA.h:
Nada

fileA.c:
#include "fileA.h"
char variable;

fileB.c
#include "fileA.h"
extern char variable;
variable=50;


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #301 en: 17 de Marzo de 2011, 17:56:53 »
ok muchas gracias por la pronta respuesta.

que es lo que se coloca en los .h entonces?

como hago para tener la misma varible en 3 o más .c??
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #302 en: 17 de Marzo de 2011, 18:00:46 »
ok muchas gracias por la pronta respuesta.

que es lo que se coloca en los .h entonces?

como hago para tener la misma varible en 3 o más .c??

En el .h se incluyen otras librerías necesarias para el .c, se realizan los defines, los typedef, ect.

En el .c que quieras usar una variable externa a él debes declararla como extern. Otra opción es crear funciones que escriban o lean sobre la variable, y solo te dedicas a llamar dichas funciones, pero es mucho menos eficaz en el sentido de tiempo de ejecución.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #303 en: 17 de Marzo de 2011, 18:39:33 »
como harías tu para tener una variable global para tres o mas archivos .c?

y para definir constantes, sería la misma idea?
« Última modificación: 17 de Marzo de 2011, 19:09:32 por Cryn »
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #304 en: 17 de Marzo de 2011, 19:26:00 »
como harías tu para tener una variable global para tres o mas archivos .c?

y para definir constantes, sería la misma idea?

Para definir constantes que utilizaras en varios archivos creas un solo *.h que lo llamas donde lo necesites. (#include "definiciones.h")

definiciones.h
Código: [Seleccionar]
typedef unsigned char UINT8
typedef unsigned int UINT16


Para definir declarar variables, en un *.c las creo y en los demás que las necesite las definís declaras como extern.

fuente1.c
Código: [Seleccionar]
#include "definiciones.h"

UINT8 myVar8;
UINT16 myVar16;

fuente2.c
Código: [Seleccionar]
#include "definiciones.h"

extern UINT8 myVar8;
extern UINT16 myVar16;

fuente3.c
Código: [Seleccionar]
#include "definiciones.h"

extern UINT8 myVar8;
extern UINT16 myVar16;

Saludos!


« Última modificación: 18 de Marzo de 2011, 12:31:45 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #305 en: 18 de Marzo de 2011, 10:21:08 »
genial! como siempre ídolo! gracias :-/ yo lo estaba haciendo a la inversa, colocaba solo un extern.

un malentendido de conceptos... definir es:
extern char variable;??

y declarar es:
char variable;??

y en funciones, definir es:
void funcionx(void);??

y declara es:
void funcionx(void){
...
}??

estoy bien?
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #306 en: 18 de Marzo de 2011, 12:30:20 »
Perdón, yo he confundido los terminos anteriormente  :oops: Pero declarar es dar a conocer al compilador la función, su definición puede estar en cualquier lado, entonces:

void vMyFuncion(char); Es una declaración y

void vMyFuncion(char Data){

// ....
}

Es la definición de la función.


Saludos!
« Última modificación: 18 de Marzo de 2011, 12:32:47 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #307 en: 18 de Marzo de 2011, 13:27:11 »
Gracias,

En caso de las funciones, si voy a usarlas en distintos .c, tambien se debe hacer lo mismo con extern?
donde defino y donde declaro las funciones??

Saludos
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #308 en: 18 de Marzo de 2011, 13:32:40 »
Gracias,

En caso de las funciones, si voy a usarlas en distintos .c, tambien se debe hacer lo mismo con extern?
donde defino y donde declaro las funciones??

Saludos

Si se puede usar extern, o podes llamar al *.h en donde se declaran las funciones.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #309 en: 18 de Marzo de 2011, 18:20:35 »
 :-/ :-/ entendido, muchas gracias por toda la ayuda.

grande suky!
.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #310 en: 22 de Marzo de 2011, 16:32:21 »
Nuevamente con una duda, quisiera guardar datos por defecto en la eeprom de un 1826k22, hice esto:

#pragma romdata eedata_scn=0xf00000
rom unsigned char eedata_values[]={1};
#pragma romdata

Pero no se ha guardado, como se hace ello?

Gracias.
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #311 en: 22 de Marzo de 2011, 17:43:30 »
Ufff!  :z) Ni idea! Averiguando!  :undecided:


He probado esto en un 18F14K50 y funciona:
Código: C
  1. #pragma romdata EEDATA=0xF00000
  2.         rom const char buff[]={0xAA,0x55,0x33};
  3. #pragma romdata

 :rolleyes:


Saludos!
« Última modificación: 22 de Marzo de 2011, 18:10:20 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #312 en: 23 de Marzo de 2011, 13:48:14 »
Hola compañeros, tengo una duda con lo de las interrupciones, para cargar un valor dentro del TIMER0 con CCS se usa la instruccion:

set_TIMER0();

en C18 ¿es el mismo procedimiento?
Código: CSS
  1. /* ** Rutina de Interrupcion ** */
  2.  
  3. #pragma interrupt Temporizacion
  4. void Temporizacion (void)
  5. {
  6.         ++contadorRTCC;
  7.         if(contadorRTCC==4)
  8.         {
  9.   [color=red]set_TIMER0();[/color]
  10.         }
  11.         if(contadorRTCC==5)
  12.         {
  13.                 flagRTCC=1;
  14.                 contadorRTCC=0x00;
  15.         }      
  16. }

Alguien sabe de algun manual donde se pueda aprender esto del TIMER0 y mas, una especie del manual de CCS

Gracias.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #313 en: 23 de Marzo de 2011, 16:04:13 »
Perdon otra vez  :mrgreen:

Seria correcto de esta manera:
Código: CSS
  1. TIMER0(30)

Gracias de nuevo.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #314 en: 23 de Marzo de 2011, 19:09:04 »
Puede ser

TMR0=30

o según librería: C:/MCC18/doc/periph-lib/Timer.htm

WriteTimer0(30)



Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything