Autor Tema: En XC8 No se como leer un array.  (Leído 8924 veces)

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

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:En XC8 No se como leer un array.
« Respuesta #15 en: 04 de Mayo de 2017, 15:22:59 »
Perdón: quise decir que "desordene" algunas sentencias en C, las instrucciones en código máquina está claro que van una detrás de otras después de haber sido generado el código...
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado centrino_

  • PIC10
  • *
  • Mensajes: 11
Re:En XC8 No se como leer un array.
« Respuesta #16 en: 04 de Mayo de 2017, 16:15:59 »
Sí. Click derecho en el proyecto ==>> propiedades ==>> XC8 ==>> Xc8-gcc (o el compilador que sea) ==>>optimization ==>optimization level.

Si no está a '0' es que están encendidas. Eso puede dar lugar a que el compilador "desordene" algunas instrucciones...

El compilador que estoy utilizando tengo entendido que es el XC8 v1.34, y dentro de "Optimization" no tengo ningun indicador de "Optimization level"

Te comento la información que tengo:

Generated Assembler Code (tildado)
Assembler Files (tildado)
Speed (no tildado)
Debug (no tildado)
Instuction Invariant Mode (no tildado)
Code Pointer Size (N/A) (sin posibilidad de modificarlo)
Address qualifiers (Ignore) (Opciones: Request - Require - Reject)
Operation Mode (Free) (Opciones: Standard - PRO)


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:En XC8 No se como leer un array.
« Respuesta #17 en: 04 de Mayo de 2017, 16:18:05 »
Yo tambien lo tengo asi, pero cuando compilo me aparece:

Citar
You have compiled in FREE mode.
Using Omnicient Code Generation that is available in PRO mode,
you could have produced up to 60% smaller and 400% faster code.
See http://www.microchip.com/MPLABXCcompilers for more information.

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:En XC8 No se como leer un array.
« Respuesta #18 en: 04 de Mayo de 2017, 16:20:14 »
Es MPLABX?



Lo siento pero no tengo ejemplo con XC8 (este es XC32)
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:En XC8 No se como leer un array.
« Respuesta #19 en: 04 de Mayo de 2017, 16:30:24 »
Eso es XC32 manwewe, el de XC8 difiere un poco

Imagen de internet:


El tema es que podes tenerlo seleccionado como "PRO" pero si no tenes la licencia en la compilacion te dice que te lo programo como FREE ( sin optimizaciones ).

Acabo de simular el codigo y funciona correctamente.
Lo que resume el problema en:

- O es tema de optimizaciones lo cual no creo
- o es otro problema el que posee el con otra parte del codigo.
- O tal ves sean las librerias de la UART, las cuales son faciles de reemplazar.

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:En XC8 No se como leer un array.
« Respuesta #20 en: 04 de Mayo de 2017, 16:34:27 »
Gracias KILLERJC! Algo nuevo que aprendo. Sólo comenté porque a mi cuando me pasan "cosas inexplicables" la mitad de las veces es porque tengo las optimizaciones encendidas...
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado centrino_

  • PIC10
  • *
  • Mensajes: 11
Re:En XC8 No se como leer un array.
« Respuesta #21 en: 05 de Mayo de 2017, 17:43:23 »
Estimados:

Intentando ver por donde puede llegar a venir el problema, hice otro proyecto en el cual, no uso el USART, sino que cargo manualmente un arreglo de 30 y lo recorro para compararlo con un caracter, y estoy teniendo el mismo problema.

Adjunto todo el código para ver si se puede hallar el problema.

fuses.h
Código: [Seleccionar]
// CONFIG1L
#pragma config WDTEN = OFF      // Watchdog Timer Enable bit (WDT disabled (control is placed on SWDTEN bit))
#pragma config PLLDIV = 1       // PLL Prescaler Selection bits (No prescale (4 MHz oscillator input drives PLL directly))
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable bit (Reset on stack overflow/underflow enabled)
#pragma config XINST = ON       // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode enabled)

// CONFIG1H
#pragma config CPUDIV = OSC1    // CPU System Clock Postscaler (No CPU system clock divide)
#pragma config CP0 = OFF        // Code Protection bit (Program memory is not code-protected)

// CONFIG2L
#pragma config FOSC = ECPLL     // Oscillator Selection bits (EC Oscillator with PLL, CLKO on RA6, ECPLL used by USB)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
#pragma config IESO = ON        // Two-Speed Start-up (Internal/External Oscillator Switchover) Control bit (Two-Speed Start-up enabled)

// CONFIG2H
#pragma config WDTPS = 32768    // Watchdog Timer Postscaler Select bits (1:32768)

// CONFIG3L

// CONFIG3H
#pragma config CCP2MX = DEFAULT // ECCP2 MUX bit (ECCP2/P2A is multiplexed with RC1)
#pragma config MSSPMSK = MSK7   // MSSP Address Masking Mode Select bit (7-Bit Address Masking mode enable)

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

//Variables
    unsigned char Rxdata[] = {"+INQ:9000:4E:EA6EC7,3E010C,7FFF,+OK"};
    unsigned int NewLineIndex[9],i=0,j=0;

test.c
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <pic18f67j50.h>
#include <xc.h>
#include "fuses.h"
#include "delays.h"
#include <xlcd.h>

#define _XTAL_FREQ 8000000

#define UP PORTDbits.RD0

void DelayFor18TCY(void);
void DelayPORXLCD(void);
void DelayXLCD(void);
int main(int argc, char** argv){
//Oscilator configuration
    OSCCONbits.IDLEN = 0;
    OSCCONbits.IRCF = 0b111;
    OSCCONbits.OSTS = 0;
    OSCCONbits.SCS = 0b00;

//Pin configuration
    TRISDbits.RD0=1; //Superior
    TRISDbits.RD3=1; //Inferior
//LCD Configuration
  OpenXLCD(FOUR_BIT & LINES_5X7); // A 4 bit o I/O y a 5x7
  while(BusyXLCD());             // Esperamso a que el Lcd este disponible
 /* Table of LCD's posittion
 *  ===============================================
 * |00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|
 *  ===============================================
 * |40|41|42|42|44|45|46|47|48|49|4A|4B|4C|4D|4E|4F|
 *  ===============================================
*/  WriteCmdXLCD(0b00000001);  // Clear LCD
    SetDDRamAddr(0x00);        // Address 04
    putrsXLCD("USART v4.4");
    SetDDRamAddr(0x40);        // Address 04
    putrsXLCD("RSSIDataBase");

WriteCmdXLCD(0b00000001);  // Clear LCD
SetDDRamAddr(0x00);
putrsXLCD("Presione el");
SetDDRamAddr(0x40);
putrsXLCD("superior");

while(1){
   
   if(UP == 1){   
        while(UP == 1){};
       WriteCmdXLCD(0b00000001);  // Clear LCD
       SetDDRamAddr(0x00);
       putrsXLCD("PELOTUDO");
               while(i<40){
           
           if(Rxdata[i] == '+'){
               NewLineIndex[j]=i;
               j++;
           }
           i++;
       }
       WriteCmdXLCD(0b00000001);  // Clear LCD
       SetDDRamAddr(0x00);
       putrsXLCD("Comparacion Hech");

    }
   
}
    return (EXIT_SUCCESS);
}
// Delays for LCD's driver
void DelayFor18TCY(void)
{
 Delay10TCYx(120);
}
void DelayPORXLCD(void)
{
 Delay1KTCYx(180);
 return;
}
void DelayXLCD(void)
{
 Delay1KTCYx(60);
 return;
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:En XC8 No se como leer un array.
« Respuesta #22 en: 05 de Mayo de 2017, 20:18:43 »
Apenas lo pruebe edito esto, pero intenta desactivar el set extendido de instrucciones:

Código: [Seleccionar]
#pragma config XINST = ON       // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode enabled)
La otra pregunta.. es External Clock ? es decir le estas dando una señal de clock ahi o pusiste un cristal?

Como te decia, apenas tenga un tiempo pruebo el codigo, quitando la parte del LCD, si funciona entonces es problema de la libreria del LCD entonces imagino.

PD: Trata de quitar la parte del LCD y para ver si termino y lo encontro activa alguna salida.
« Última modificación: 05 de Mayo de 2017, 20:49:45 por KILLERJC »

Desconectado centrino_

  • PIC10
  • *
  • Mensajes: 11
Re:En XC8 No se como leer un array.
« Respuesta #23 en: 06 de Mayo de 2017, 11:36:09 »
SOLUCIONADOO!!!!

Estimado KILERJC, al desactivar el set extendido de instrucciones el problema se solucionó. La verdad no tengo mucho conocimiento sobre que es eso, pero me voy a poner a investigar... Desde ya, muchísimas gracias. Me has dado una ayuda enorme!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:En XC8 No se como leer un array.
« Respuesta #24 en: 06 de Mayo de 2017, 11:48:43 »
SOLUCIONADOO!!!!

Estimado KILERJC, al desactivar el set extendido de instrucciones el problema se solucionó. La verdad no tengo mucho conocimiento sobre que es eso, pero me voy a poner a investigar... Desde ya, muchísimas gracias. Me has dado una ayuda enorme!

El set extendido de instrucciones agrega mas instrucciones, pero ademas le cambia el funcionamiento a las instrucciones que estaban antes, este set hace que el manejarse con arrays sea mucho mas simple por ende utilizar menos instrucciones en el PIC, el tema esta en que si no me equivoco debes si o si activar una opcion en el MPLAB indicando que use el set extendido de instrucciones, asi lo compila para este ( ya que como dije cambia la forma de algunas de las instrucciones "base").

Peeero. XC8 no soporta el set extendido, el unico que lo soporta es C18, ya que cuando compran HITECH estos compiladores no soportaban el set extendido, y de hacerlo se presentan otros problemas como registros no accesibles al compilador lo cual dificulta la generacion de codigo y tambien un compilador mas (ya que el set es totalmente disitnto) a mantener, como todo lo que se puede hacer con el set extendido se puede lograr con las instrucciones base no se traslado a XC8.
Asi que el set extendido es solo un adorno para decir "tiene esto", el unico caso donde lo use fue en ASM para probar un par de cosas, pero nada mas, y lo veo util para el caso de arrays, para todo lo demas por ahi es "engorroso" que con instrucciones simples seria mas facil.
« Última modificación: 06 de Mayo de 2017, 12:54:23 por KILLERJC »