Autor Tema: Problemas con XC8 al compilar  (Leído 2594 veces)

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

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Problemas con XC8 al compilar
« en: 23 de Septiembre de 2016, 14:37:21 »
Editado:

Bueno volví a retomar el XC8 para investigar un poco más mi problema, y encontré el error en:

Código: [Seleccionar]
unsigned long segundo=0, dim=0, diml=8;
   
    while(1){
        if(dim==0){       
GPIO = 0b001001;
        __delay_ms(dim);.......
.........................

Parece que no puedo poner dentro del paréntesis del delay  una variable, no se si ese sea mi error o si hay algún parámetro que tengo que modificar en el proyecto,,por eso pido muy amablemente me den una guía por que no encuentro nada por ahi.



Gracias de antemano.



Hola amigos.
Como estoy volviendo a retomar los pics pero ahora usando lenguaje C, pido esta ayuda:
Haciendo algunos ejemplos básicos como encender un led, usar retardos  quería probar este código pero me arroja unos errores que creo tienen que ver con la forma en que compila..eso creo..Este es el código:

Código: [Seleccionar]
#include <stdio.h>
#include <xc.h>
#include <stdint.h>         /* For uint8_t definition */
#include <stdbool.h>   

#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)
#pragma config CP = OFF         // Code Protection bit (Code protection off)
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.



#define _XTAL_FREQ 4000000
int segundo=0,dim=0,diml=8;


void main(void) {
    TRISGPIO = 0b001000;
    GPIO = 0b001000;
    while(1)
    {
       
        if(segundo>60){
            segundo=0,dim++,diml--;
        }
        if(dim==8){
            dim=0,diml=8;
        }
        GPIO = 0b001001;
        __delay_ms(dim);
        GPIO = 0;
        __delay_ms(diml);
        segundo++;
    }
   
}


Saludos.
« Última modificación: 01 de Octubre de 2016, 20:51:58 por marvicdigital »

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:Problemas con XC8 al compilar
« Respuesta #1 en: 01 de Octubre de 2016, 21:02:54 »
Edite el mensaje principal..a ver si me pueden guiar un poco :oops:

Gracias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problemas con XC8 al compilar
« Respuesta #2 en: 01 de Octubre de 2016, 21:08:16 »
podrias poner el error ?

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:Problemas con XC8 al compilar
« Respuesta #3 en: 01 de Octubre de 2016, 21:23:33 »
podrias poner el error ?

Gracias por responder...mira el error:

(908) exit status = 1
nbproject/Makefile-default.mk:125: fallo en las instrucciones para el objetivo 'dist/default/production/Secuenciador_12F508.production.hex'
make[2]: se sale del directorio '/home/marvicdigital/Proyectos/Secuenciador_12F508'
nbproject/Makefile-default.mk:84: fallo en las instrucciones para el objetivo '.build-conf'
make[1]: se sale del directorio '/home/marvicdigital/Proyectos/Secuenciador_12F508'
nbproject/Makefile-impl.mk:39: fallo en las instrucciones para el objetivo '.build-impl'


lo curioso es que si cambio en los delay las variables por numeros no me da errores la compilacion... :shock:

Te agradezco mucho.

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problemas con XC8 al compilar
« Respuesta #4 en: 01 de Octubre de 2016, 21:32:18 »
Ese no es el error... eso es el make acusando que al no tener archivos no puede ejecutar lo demas. el error esta antes.

Pero esta claro:

De la guia de usuasrio de XC8, la funcion __delay_ms()
Citar
This is an inline function that is expanded by the code generator. When called, this routine expands to an inline assembly delay sequence

Es una funcion INLINE, lo cual quere decir que se crea un codigo para cada valor que este dentro, como eso es un loop no puede crear un codigo para cada valor y llamarlo. El compilador no sabe que es eso.

Si queres hacer eso podrias crear una funcion:

Código: C
  1. void mi_delay_ms(uint8_t tiempo)
  2. {
  3.     uint8_t i;
  4.     for(i=0; i< tiempo;i++)
  5.     {
  6.           __delay_ms(1);
  7.     }
  8. }

Y ahora si podes llamar a esa funcion con una variable, tenes que tener en cuenta que si usas una variable con 30ms no van a ser EXACTAMENTE 30ms sino que un poco mas (30,060ms) por lo que requiere el bucle.
« Última modificación: 01 de Octubre de 2016, 21:39:40 por KILLERJC »

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:Problemas con XC8 al compilar
« Respuesta #5 en: 01 de Octubre de 2016, 21:44:08 »
KillerJC muchas gracias voy a probar ya contaré como me va... ;-)


Me disculpas apenas voy comenzando con el compilador..este es el error:

Non line specific message:: error: (1359) no space for ___fttol parameters
Microchip MPLAB XC8 C Compiler (PRO Mode) V1.35
Build date: Jul  7 2015
Part Support Version: 1.35
Copyright (C) 2015 Microchip Technology Inc.
License type: Node Configuration




Saludos

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:Problemas con XC8 al compilar
« Respuesta #6 en: 01 de Octubre de 2016, 23:32:43 »
 :-/
Muchas gracias KillerJC, ya funciona claro está que cambiando el nombre del tipo de variable ya que no me la reconoce el compilador...acá dejo el código para futuras soluciones.

Código: [Seleccionar]
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)
#pragma config CP = OFF         // Code Protection bit (Code protection off)
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.


#include <xc.h>
#define _XTAL_FREQ 4000000

    void delayMS(unsigned int tiempo)
    {
        unsigned int i;
        for(i=0; i< tiempo;i++)
        {
              __delay_ms(1);
        }
    }

void main(void) {
    TRISGPIO = 0x00;
    GPIO=0x00;
    int j=100, m=30;

    while(1){
        GPIO = 0x01;
        delayMS(j);
        GPIO=0x00;
        delayMS(m);
    }
    return;
}


un abrazo. Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problemas con XC8 al compilar
« Respuesta #7 en: 01 de Octubre de 2016, 23:59:08 »
Disculpa, estoy muy acostumbrado a usar los tipos definidos en stdint.h los cuales son:

uint8_t    para los Unsigned de 8 bits ( sin signo )
int8_t      para los Signed de 8 bits ( con signo)

luego tenes los de 16 y 32 que son de la misma forma.

uint16_t , int32_t

Lo bueno de esto es que sabes exactamente cuantos bits tiene la variable y se comparte con todos los compiladores. Si yo usara "int" en XC es de 16bits, y en CCS sino me equivoco es de 8bits, por eso pienso que es mejor la anotacion anterior.

Para usar estos solo tenes que incluir la cabecera stdint.h

Código: C
  1. #include <stdint.h>

Ahi dentro lo unico que se hace es decir que un uint16_t es equivalente a unsigned int. Igual si queres usar los valores booleanos como true y false, y no usar 0 y 1, podes incluir

Código: C
  1. #include <stdbool.h>

Obviamente esto es valido para cualquier compilador.
« Última modificación: 02 de Octubre de 2016, 00:01:25 por KILLERJC »

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:Problemas con XC8 al compilar
« Respuesta #8 en: 02 de Octubre de 2016, 00:31:02 »
De nuevo mil gracias,, ya tome nota de tu buen consejo y si estamos de acuerdo con lo de saber de cuantos bit es la variable.

Saludos


 

anything