Autor Tema: Problemas al compilar en CCS  (Leído 2466 veces)

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

Desconectado Optimvs333

  • PIC10
  • *
  • Mensajes: 6
Problemas al compilar en CCS
« en: 08 de Mayo de 2006, 14:43:41 »
Hola a todos...
Estoy haciendo mi proyecto de grado en un control difuso con PIC. Hice el programa en C usando el compilador CCS, lo compilo, no me da errores, lo simulo en proteus (P18F452) pero no funciona, entonces reviso paso a paso y muchas de las instrucciones en C las toma como comentarios y no las ejecuta, por tanto ejecuto la opción VIEW -> C/ASM LIST y me sale el programa compilado tanto en C como en asembler, y en realidad el proteus está ejecutando el código que el CCS compila incompleto.

¿¿Alguien sabe como resolver esta situación  :shock: ??

Saludos desde Colombia,

Optimvs

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Problemas al compilar en CCS
« Respuesta #1 en: 09 de Mayo de 2006, 15:21:47 »
¿podrias poner tu codigo?


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Optimvs333

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas al compilar en CCS
« Respuesta #2 en: 09 de Mayo de 2006, 17:17:33 »
Gracias por tu interés. Como puedes suponer el código es bastante extenso, pero te voy a mostrar una de las partes donde se me presenta el error:

CCS PCH C Compiler, Version 3.242, 16465               05-May-06 09:27

               Filename: SoloControl.lst

               ROM used: 1648 bytes (5%)
                         Largest free fragment is 31120
               RAM used: 21 (1%) at main() level
                         49 (3%) worst case
               Stack:    3 locations

*
0000:  GOTO   05F8
.................... #include <18F452.h>
.................... //////// Standard Header file for the PIC18F452 device ////////////////
.................... #device PIC18F452
.................... #list
....................
.................... #device adc=10
....................
.................... #fuses WDT32, XT, NOPROTECT, BROWNOUT, BORV45, NOPUT, NOCPD
.................... #fuses NOSTVREN, NODEBUG, NOLVP, NOWRT, NOWRTD
.................... #fuses NOWRTC, NOWRTB, NOEBTR, NOEBTRB, NOCPB
....................
.................... #use delay(clock=4000000)
*
0004:  CLRF   FEA
0006:  MOVLW  23
0008:  MOVWF  FE9
000A:  MOVF   FEF,W
000C:  BZ    002C
000E:  MOVLW  01
0010:  MOVWF  01
0012:  CLRF   00
0014:  DECFSZ 00,F
0016:  BRA    0014
0018:  DECFSZ 01,F
001A:  BRA    0012
001C:  MOVLW  4A
001E:  MOVWF  00
0020:  DECFSZ 00,F
0022:  BRA    0020
0024:  NOP
0026:  NOP
0028:  DECFSZ FEF,F
002A:  BRA    000E
002C:  RETLW  00
....................
.................... #byte PuertoB  =0xF84
.................... #bit t_ok      =PuertoB.0      // RB0, pin33
.................... #bit t_mas       =PuertoB.1      // RB1, pin34
.................... #bit t_mns       =PuertoB.2      // RB2, pin35
....................
.................... #byte PuertoD  =0xF81             //Define direccion del puerto D
.................... #bit  Compresor_On  =PuertoD.7    // RD0, pin19
.................... #bit  Comp_Aux_On   =PuertoD.6    // RD1, pin20
.................... #bit  Valvula_On    =PuertoD.5    // RD2, pin21
.................... #bit  Valv_Aux_On   =PuertoD.4    // RD3, pin21
....................
.................... #include <Fuzzy_Tesis.h>
.................... char __IDOM[2];
....................
.................... /* define los bit del puerto para realizar el control
.................... #byte PuertoD  =0xF83             //Define direccion del puerto D
.................... #bit  Compresor_On  =PuertoD.0    // RD0, pin19
.................... #bit  Comp_Aux_On   =PuertoD.1    // RD1, pin20
.................... #bit  Valvula_On    =PuertoD.2    // RD2, pin21
.................... #bit  Valv_Aux_On   =PuertoD.3    // RD3, pin21*/
....................
.................... // Se definen algunas operaciones que se requieren en el control difuso
.................... #define F_UNO      0xff
.................... #define F_CERO     0x00
.................... #define F_OR(a,b)  ((a) > (b) ? (a) : (b))
.................... #define F_AND(a,b) ((a) < (b) ? (a) : (b))
.................... #define F_NOT(a)   (F_UNO+F_CERO-a)
....................
....................
....................
....................
.................... /*  Este controlador trabaja midiendo la corriente cuando la unidad
....................    está subiendo y la corriente cuando la unidad está bajando, entonces
....................    hace el cálculo de la diferencia de la corriente en estas dos
....................    posiciones así:
....................
....................   Corriente = Corriente Máxima Subiendo - Corriente Máxima Bajando
....................
....................    Así pues tenemos que cuando los signos de la corriente son + o -
....................    se tiene:
....................
....................   Corriente (+) = Indica que la unidad se FORZA SUBIENDO
....................   Corriente (-) = Indica que la unidad se FORZA BAJANDO
....................
....................    Se mide además la PRESIÓN para determinar los rangos aceptables de
....................    operación en los que puede trabajar el cilindro.
....................
....................    Las entradas numéricas CRISP mas adelante se transforman en
....................    grados de pertenencia GdP con variables lingüísticas.
....................
....................    Las siguientes son las variables lingüísticas que van a ser usadas:
....................
....................       ------------------------------------------------------
....................       VARIABLE FISICA   V. LINGÜISTICA       RANGO
....................       ------------------------------------------------------
....................       PRESIÓN            muy baja                    0 - 120 psi
....................                                     baja              120 - 280 psi
....................                 normal            280 - 420 psi
....................                 alta               400 - 500 psi
....................                 muy alta        480 - 600 psi
....................       ------------------------------------------------------
....................       CORRIENTE   Forza_baja       -80 a -3 Amp
....................                C_balance        -5 a 5 Amp
....................                Forza_sube           3 a 80 Amp
....................       ------------------------------------------------------
....................
.................... -------------------------------------------------------*/
.................... //Variable Física: Presión Tipo int MIN 0 MAX 600 psi//
.................... //-----------------------------------------------------
....................
.................... /*     MIEMBRO: muy_baja  { 0 ,  0 ,  100 , 120 } */
.................... /*
....................
....................   1-| ...
....................     | .   ·
....................     | .    ·
....................     | .     .
....................   0-| .      ·..........................
....................      ----------------------------------
....................       0      150      300      450      600
.................... */
....................
.................... int P_muy_baja (int __CRISP)
....................   {
....................     {
....................     if (__CRISP <= 100) return(255);
*
0298:  MOVF   1D,W
029A:  SUBLW  64
029C:  BNC   02A6
029E:  MOVLW  FF
02A0:  MOVWF  01
02A2:  BRA    02C4
....................     else
02A4:  BRA    02C4
....................       {
....................       if (__CRISP <= 120)
02A6:  MOVF   1D,W
02A8:  SUBLW  78
02AA:  BNC   02BE
....................         return((( + 120 - __CRISP) * 12) + 7);
02AC:  MOVLW  78
02AE:  BSF    FD8.0
02B0:  SUBFWB 1D,W
02B2:  MULLW  0C
02B4:  MOVF   FF3,W
02B6:  ADDLW  07
02B8:  MOVWF  01
02BA:  BRA    02C4
....................       else
02BC:  BRA    02C4
....................         return(0);
02BE:  MOVLW  00
02C0:  MOVWF  01
02C2:  BRA    02C4
....................       }
....................     }
....................   }
02C4:  GOTO   042C (RETURN)
....................
.................... /*     MIEMBRO: baja  { 75 ,  100 ,  350 , 375 } */
.................... /*
....................
....................   1-|         ......
....................     |        .      .
....................     |       .        .
....................     |      .          .
....................   0-| ....·            ·............
....................      ----------------------------------
....................       0      150      300      450      600
....................
.................... */
....................
.................... int P_baja (int __CRISP)
....................   {
....................   if (__CRISP < 75) return(0);
*
02F8:  MOVF   1D,W
02FA:  SUBLW  4A
02FC:  BNC   0306
02FE:  MOVLW  00
0300:  MOVWF  01
0302:  BRA    0322
....................   else
0304:  BRA    0322
....................     {
....................     if (__CRISP <= 100) return(((__CRISP - 75) * 10) + 5);
0306:  MOVF   1D,W
0308:  SUBLW  64
030A:  BNC   031C
030C:  MOVLW  4B
030E:  SUBWF  1D,W
0310:  MULLW  0A
0312:  MOVF   FF3,W
0314:  ADDLW  05
0316:  MOVWF  01
0318:  BRA    0322
....................     else
031A:  BRA    0322
....................       {
....................       if (__CRISP <= 350) return(255);
031C:  MOVLW  FF
031E:  MOVWF  01
0320:  BRA    0322
....................       else
....................         {
....................         if (__CRISP <= 375)
....................           return((( + 375 - __CRISP) * 10) + 5);
....................         else
....................           return(0);
....................         }
....................       }
....................     }
....................   }

0322:  RETLW  00
....................
.................... /*     MIEMBRO: normal  { 350 ,  380 ,  420 , 450 } */
.................... /*
....................
....................   1-|                .....
....................     |               .     .
....................     |               .     .
....................     |              .       .
....................   0-| ..............       ............
....................      ----------------------------------
....................       0      150      300      450      600
....................
.................... */
....................
.................... int P_normal (int __CRISP)
....................   {
....................   if (__CRISP < 350) return(0);
*
0386:  MOVLW  00
0388:  MOVWF  01
....................   else
....................     {
....................     if (__CRISP <= 380) return(((__CRISP - 350) *8 ) +8 );
....................     else
....................       {
....................       if (__CRISP <= 420) return(255);
....................       else
....................         {
....................         if (__CRISP <= 450)
....................           return((( + 450 - __CRISP) *8 ) +8 );
....................         else
....................           return(0);
....................         }
....................       }
....................     }
....................   }

038A:  RETLW  00


Como te puedes percatar, el código en negrilla escrito en C no tiene su equivalente en asembler y por tanto el proteus simplemente no lo ejecuta. ¿alguna sugerencia?¿algún fusible no es el adecuado?¿debo activar alguna opción a la hora de compilar el proyecto?. En realidad esta es sólo una parte del código, pues se supone que tiene que haber visualización en un módulo LCD, pero creí que era por eso que no ejecutaba correctamente, así que aislé la etapa de visualización y dejé sólo la parte de control que es la que expongo.

Cordial Saludo y Gracias.

Optimvs

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Problemas al compilar en CCS
« Respuesta #3 en: 09 de Mayo de 2006, 17:28:23 »
Perdonad que me meta en una conversación ajena  :)  :)  :)  .. pero ... veo que __CRISP la declaras como int luego solo puede admitir valores de 0 a 255 y sin embargo la estas usando por encima .... curiosamente los lugares donde no ha compilado coinciden con el uso de valores, comparando con ...,  por encima de 255:shock:

¿Tendrá algo que ver? ¿Y si pruebas a declarar esta __CRISP como long, 2 bytes, a ver qué pasa?

Prueba y dinos ...

« Última modificación: 09 de Mayo de 2006, 17:30:09 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Optimvs333

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas al compilar en CCS
« Respuesta #4 en: 09 de Mayo de 2006, 17:48:28 »
Tenías razón...   :-/  :-/  :mrgreen: ese era el problema, el compilador no es tonto (el tonto es otro)...

Gracias, luego les comento como me terminó de ir con el proyecto.

Saludos,

Optimvs

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: Problemas al compilar en CCS
« Respuesta #5 en: 23 de Mayo de 2006, 12:24:10 »
Me alegro de que redpic te solucionase el problema optimvs333, de todas formas te diré, por experiencia propia, que muchas veces los programas en el proteus no funcionan bien y sin embargo si los montas físicamente funcionan a la perfección. Otras veces es problema de las conexiones que están limitadas a ciertas corrientes... no sé, unos líos muy raros... Pues eso, para que lo tengas en cuenta por si acaso y no te vuelvas loco buscando errores que quizá no estén.


Un saludo

Desconectado Optimvs333

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas al compilar en CCS
« Respuesta #6 en: 24 de Mayo de 2006, 12:19:43 »
Gracias vanesa, he estado intentando de ambas maneras, pero aún tengo errores, estoy intentando reescribir el código para ver si puedo resolver mis problemas.

Saludos,

Optimvs