Autor Tema: Problema Compilador xC8  (Leído 3684 veces)

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

Desconectado Paula

  • PIC10
  • *
  • Mensajes: 19
Problema Compilador xC8
« en: 24 de Febrero de 2017, 19:42:57 »
Hola,

Mi problema es acerca de unas advertencias y warnings del compilador xC8, incluso solo teniendo como programa la plantilla del main estas advertencias continúan, no se que debería configurar para que no aparecieran, además realice un programa sencillo y debido a estas advertencias no me ha dejado programarlo al PIC, les agradecería una ayuda con este tema.

:: advisory: (1233) Employing 18F8722 errata work-arounds:
:: advisory: (1234)  * Corrupted fast interrupt shadow registers
:: warning: (1273) Omniscient Code Generation not available in Free mode
:: warning: (1311) missing configuration setting for config word 0x300002; using default


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema Compilador xC8
« Respuesta #1 en: 24 de Febrero de 2017, 20:36:26 »
los advisory te avisan que usa algunos "metodos" para salvar algunos errores del que posee el chip, termino creyendo que lo usa para todos los PIC18 al final.

El warning 1273 simplemente es por que esta en modo gratuito y no va a utilizar la herramienta "Omniscient Code Generation" para hacer un codigo mas compacto.

Finalmente el unico warning que podes hacer algo es el ultimo..

Citar
:: warning: (1311) missing configuration setting for config word 0x300002; using default

Este dice que hay una palabra de configuracion (fuses o config, pragma  como lo quieras ver) que no se a definido ningun bit, entonces como no sabe que poner, usa un "default" que posee el MPLAB
Lo raro que segun el datasheet, no deberia haber nada en la direccion que dice. Ya que comienzan desde el 0x300008

Para quitarlos podrias usar la opcion --MSGDISABLE en la linea de comandos y una lista separada por coma de los numeros de advisory y warning para quitar.
Pero con lo complicado que seria, mejor simplemente ignorarlos.

Desconectado Paula

  • PIC10
  • *
  • Mensajes: 19
Re:Problema Compilador xC8
« Respuesta #2 en: 25 de Febrero de 2017, 10:49:07 »
Mira el programa que compile es este:

#include <xc.h>
void main(){
}

Después de las advertencias y warning me aparece este error una vez que programo el PIC18F8722, y otro programa que tengo con el compilador xc18 si se programa normalmente, si hubiera podido programar el PIC pasaría por alto esas advertencias y warnings, por eso pregunte sobre eso hay abría alguna relación?.

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x1ffff
program memory
Address: 800 Expected Value: ff Received Value: 0
Failed to program device

Desconectado Paula

  • PIC10
  • *
  • Mensajes: 19
Re:Problema Compilador xC8
« Respuesta #3 en: 25 de Febrero de 2017, 10:56:52 »

Quite el microcontrolador que estaba encima del PIC18F8722 en la tarjeta de desarrollo PICDEM de Microchip y al parecer programo.. pero me quedan muchas dudas al respecto. Muchas gracias por tu ayuda.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema Compilador xC8
« Respuesta #4 en: 25 de Febrero de 2017, 13:32:57 »
Diferenciemos las 2 cosas.

Compilar y Linkear - Es el proceso de pasar el codigo C al binario, y luego se pasa al .hex

Programar el micro - Es tomar ese .hex e intentar grabarlo en el micro.

En el paso del compilacion y linkeo, si tenes un warning normalmente no afecta y produce correctamente el .hex, Si tiene un error no produce el .hex.

En tu caso fue un problema de programacion, ya que el programador intento grabar el valor 0xFF pero ocurrio que le devolvio 0x00
Pero ojo que esto puede ser porque al no declararle los bits de configuracion , el "default" tenga habilitado la proteccion contra lectura, la cual al leer el micro lee 0. Al seleccionar programar y verificar te puede dar ese error, ya que programa y luego al "verficar" (leer el micro y compararlo) te daria ese error.


--------------

Tu programa esta incompleto.

Le falta los bits de configuracion y un loop infinito como minimo.
El programa minimo (elegi tus propias opciones):

Código: C
  1. // PIC18F8722 Configuration Bit Settings
  2.  
  3. // 'C' source line config statements
  4.  
  5. #include <xc.h>
  6.  
  7. // #pragma config statements should precede project file includes.
  8. // Use project enums instead of #define for ON and OFF.
  9.  
  10. // CONFIG1H
  11. #pragma config OSC = INTIO67    // Oscillator Selection bits (Internal oscillator block, port function on RA6 and RA7)
  12. #pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
  13. #pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Two-Speed Start-up disabled)
  14.  
  15. // CONFIG2L
  16. #pragma config PWRT = OFF       // Power-up Timer Enable bit (PWRT disabled)
  17. #pragma config BOREN = ON       // Brown-out Reset Enable bits (Brown-out Reset enabled and controlled by software (SBOREN is enabled))
  18. #pragma config BORV = 3         // Brown-out Voltage bits (Minimum setting)
  19.  
  20. // CONFIG2H
  21. #pragma config WDT = OFF        // Watchdog Timer (WDT disabled (control is placed on the SWDTEN bit))
  22. #pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)
  23.  
  24. // CONFIG3L
  25. #pragma config MODE = MC        // Processor Data Memory Mode Select bits (Microcontroller mode)
  26. #pragma config ADDRBW = ADDR20BIT// Address Bus Width Select bits (20-bit Address Bus)
  27. #pragma config DATABW = DATA16BIT// Data Bus Width Select bit (16-bit External Bus mode)
  28. #pragma config WAIT = OFF       // External Bus Data Wait Enable bit (Wait selections are unavailable for table reads and table writes)
  29.  
  30. // CONFIG3H
  31. #pragma config CCP2MX = PORTC   // CCP2 MUX bit (ECCP2 input/output is multiplexed with RC1)
  32. #pragma config ECCPMX = PORTE   // ECCP MUX bit (ECCP1/3 (P1B/P1C/P3B/P3C) are multiplexed onto RE6, RE5, RE4 and RE3 respectively)
  33. #pragma config LPT1OSC = OFF    // Low-Power Timer1 Oscillator Enable bit (Timer1 configured for higher power operation)
  34. #pragma config MCLRE = OFF      // MCLR Pin Enable bit (RG5 input pin enabled; MCLR disabled)
  35.  
  36. // CONFIG4L
  37. #pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
  38. #pragma config LVP = OFF        // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
  39. #pragma config BBSIZ = BB2K     // Boot Block Size Select bits (1K word (2 Kbytes) Boot Block size)
  40. #pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))
  41.  
  42. // CONFIG5L
  43. #pragma config CP0 = OFF        // Code Protection bit Block 0 (Block 0 (000800, 001000 or 002000-003FFFh) not code-protected)
  44. #pragma config CP1 = OFF        // Code Protection bit Block 1 (Block 1 (004000-007FFFh) not code-protected)
  45. #pragma config CP2 = OFF        // Code Protection bit Block 2 (Block 2 (008000-00BFFFh) not code-protected)
  46. #pragma config CP3 = OFF        // Code Protection bit Block 3 (Block 3 (00C000-00FFFFh) not code-protected)
  47. #pragma config CP4 = OFF        // Code Protection bit Block 4 (Block 4 (010000-013FFFh) not code-protected)
  48. #pragma config CP5 = OFF        // Code Protection bit Block 5 (Block 5 (014000-017FFFh) not code-protected)
  49. #pragma config CP6 = OFF        // Code Protection bit Block 6 (Block 6 (01BFFF-018000h) not code-protected)
  50. #pragma config CP7 = OFF        // Code Protection bit Block 7 (Block 7 (01C000-01FFFFh) not code-protected)
  51.  
  52. // CONFIG5H
  53. #pragma config CPB = OFF        // Boot Block Code Protection bit (Boot Block (000000-0007FFh) not code-protected)
  54. #pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code-protected)
  55.  
  56. // CONFIG6L
  57. #pragma config WRT0 = OFF       // Write Protection bit Block 0 (Block 0 (000800, 001000 or 002000-003FFFh) not write-protected)
  58. #pragma config WRT1 = OFF       // Write Protection bit Block 1 (Block 1 (004000-007FFFh) not write-protected)
  59. #pragma config WRT2 = OFF       // Write Protection bit Block 2 (Block 2 (008000-00BFFFh) not write-protected)
  60. #pragma config WRT3 = OFF       // Write Protection bit Block 3 (Block 3 (00C000-00FFFFh) not write-protected)
  61. #pragma config WRT4 = OFF       // Write Protection bit Block 4 (Block 4 (010000-013FFFh) not write-protected)
  62. #pragma config WRT5 = OFF       // Write Protection bit Block 5 (Block 5 (014000-017FFFh) not write-protected)
  63. #pragma config WRT6 = OFF       // Write Protection bit Block 6 (Block 6 (01BFFF-018000h) not write-protected)
  64. #pragma config WRT7 = OFF       // Write Protection bit Block 7 (Block 7 (01C000-01FFFFh) not write-protected)
  65.  
  66. // CONFIG6H
  67. #pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write-protected)
  68. #pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-007FFF, 000FFF or 001FFFh) not write-protected)
  69. #pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
  70.  
  71. // CONFIG7L
  72. #pragma config EBTR0 = OFF      // Table Read Protection bit Block 0 (Block 0 (000800, 001000 or 002000-003FFFh) not protected from table reads executed in other blocks)
  73. #pragma config EBTR1 = OFF      // Table Read Protection bit Block 1 (Block 1 (004000-007FFFh) not protected from table reads executed in other blocks)
  74. #pragma config EBTR2 = OFF      // Table Read Protection bit Block 2 (Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks)
  75. #pragma config EBTR3 = OFF      // Table Read Protection bit Block 3 (Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks)
  76. #pragma config EBTR4 = OFF      // Table Read Protection bit Block 4 (Block 4 (010000-013FFFh) not protected from table reads executed in other blocks)
  77. #pragma config EBTR5 = OFF      // Table Read Protection bit Block 5 (Block 5 (014000-017FFFh) not protected from table reads executed in other blocks)
  78. #pragma config EBTR6 = OFF      // Table Read Protection bit Block 6 (Block 6 (018000-01BFFFh) not protected from table reads executed in other blocks)
  79. #pragma config EBTR7 = OFF      // Table Read Protection bit Block 7 (Block 7 (01C000-01FFFFh) not protected from table reads executed in other blocks)
  80.  
  81. // CONFIG7H
  82. #pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-007FFF, 000FFF or 001FFFh) not protected from table reads executed in other blocks)
  83.  
  84. void main (void)
  85. {
  86.         while(1)
  87.         {
  88.         }
  89. }

El MPLAB tiene un generador de codigo para los fuses, el resultado de compilar el codigo anterior es el siguiente:

Citar
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: se ingresa al directorio «/home/xxx/workspace/MPLAB/XC8C.X»
make  -f nbproject/Makefile-default.mk dist/default/production/XC8C.X.production.hex
make[2]: Entering directory '/home/xxx/workspace/MPLAB/XC8C.X'

Aca llama al compilador
"/opt/microchip/xc8/v1.36/bin/xc8" --pass1  --chip=18F8722 -Q -G  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,+speed,-space,-debug --addrqual=ignore --mode=pro -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/main.p1  main.c

Aca llama al linker
"/opt/microchip/xc8/v1.36/bin/xc8"  --chip=18F8722 -G -mdist/default/production/XC8C.X.production.map  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,+speed,-space,-debug --addrqual=ignore --mode=pro -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    --memorysummary dist/default/production/memoryfile.xml -odist/default/production/XC8C.X.production.elf  build/default/production/main.p1     

Como ves aca ya no tengo tu warning de que se usan los "default" en los bits de configuracion, todo lo demas sigue apareciendo
:: advisory: (1233) Employing 18F8722 errata work-arounds:
:: advisory: (1234)  * Corrupted fast interrupt shadow registers
:: warning: (1273) Omniscient Code Generation not available in Free mode

Memory Summary:
    Program space        used     8h (     8) of 20000h bytes   (  0.0%)  Solo 8 lugares, que seria lo minimo, vectores + loop
    Data space           used     0h (     0) of   F60h bytes   (  0.0%)
    Configuration bits   used     7h (     7) of     7h words   (100.0%)  Las 7 palabras de configuracion CONFIG1 a CONFIG7, esta ves la que yo elegi y no un "default/por defecto"
    EEPROM space         used     0h (     0) of   400h bytes   (  0.0%)
    ID Location space    used     8h (     8) of     8h bytes   (100.0%)
    Data stack space     used     0h (     0) of   F00h bytes   (  0.0%)


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.

Microchip MPLAB XC8 C Compiler (Free Mode) V1.36
Build date: Jan 14 2016
Part Support Version: 1.36
Copyright (C) 2016 Microchip Technology Inc.
License type: Node Configuration

make[2]: Leaving directory '/home/xxx/workspace/MPLAB/XC8C.X'
make[1]: se sale del directorio «/home/xxx/workspace/MPLAB/XC8C.X»

BUILD SUCCESSFUL (total time: 1s)
Loading code from /home/xxx/workspace/MPLAB/XC8C.X/dist/default/production/XC8C.X.production.hex...
Loading completed
« Última modificación: 25 de Febrero de 2017, 13:48:34 por KILLERJC »

Desconectado Paula

  • PIC10
  • *
  • Mensajes: 19
Re:Problema Compilador xC8
« Respuesta #5 en: 03 de Marzo de 2017, 11:56:48 »

Muchas Gracias por tu explicación, me ha surgido otra pregunta sobre el compilador xC8, la función Rrfc que tenía el xC18 ya no aparece para el xC8 y no es lo mismo decir Dato>>1 = Rrfc(Dato,1,1). :/

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema Compilador xC8
« Respuesta #6 en: 03 de Marzo de 2017, 13:33:12 »
El compilador busca instrucciones de este estilo:

c = (c << 1) | (c >> 7);

Para hacer lo mismo que esas instrucciones. De igual forma el Swap se puede realizar asi:

c = (c << 4) | (c >> 4);

En este caso el compilador lo traduce directamente a una instruccion ASM: SWAPF

Por las dudas aca todos los cambios:
http://ww1.microchip.com/downloads/en/DeviceDoc/50002184A.pdf
« Última modificación: 03 de Marzo de 2017, 13:40:13 por KILLERJC »


 

anything