TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: cvargcal en 06 de Abril de 2020, 04:25:06

Título: Duda de punteros
Publicado por: cvargcal en 06 de Abril de 2020, 04:25:06
Saludos

Los expertos en punteros me pueden decir y corregir si es posible escribir la funcion sin necesidad de declarar las variables nuevamente, en mi ignorancia digo que seria como usar el doble de memoria.

aqui se pueve verificar el codigo
https://www.onlinegdb.com/online_c_compiler# (https://www.onlinegdb.com/online_c_compiler#)
Código: C
  1. #include <stdio.h>
  2.  
  3. int SIM800L_AT_SAPBR(int np, int cmd_type,int cid, char *ConParamTag, char *ConParamValue)
  4. {                                  
  5.      int  i =np;
  6.      int  c_cmd_type=cmd_type;      
  7.      int  c_cid=cid;                
  8.      char *c_ConParamTag=ConParamTag;        
  9.      char *c_ConParamValue=ConParamValue;  
  10.      
  11.      
  12. if (i==4)                
  13.    printf("AT+SAPBR=%d,%d,%s,%s\r\n",c_cmd_type,c_cid,c_ConParamTag,c_ConParamValue);                                        
  14. else
  15.   printf("AT+SAPBR=%d,%d\r\n",c_cmd_type,c_cid);  
  16.  
  17.  
  18.    return 0 ;
  19. }  
  20.  
  21.  
  22. int main()
  23. {
  24.             SIM800L_AT_SAPBR(4,3,1,"Contype","GPRS");                
  25.             SIM800L_AT_SAPBR(4,3,1,"APN","internet.movistar.com.co");                
  26.             SIM800L_AT_SAPBR(2,1,1,0,0);
  27.             SIM800L_AT_SAPBR(2,2,1,0,0);    
  28.     return 0;
  29. }



Quiero que sea asi:
Código: C
  1. int SIM800L_AT_SAPBR(int np, int cmd_type,int cid, char *ConParamTag, char *ConParamValue)
  2. {                                  
  3.      int  np;  
  4.  
  5. if (i==4)                
  6.    printf("AT+SAPBR=%d,%d,%s,%s\r\n",cmd_type,cid,ConParamTag,ConParamValue);                                        
  7. else
  8.   printf("AT+SAPBR=%d,%d\r\n",cmd_type,cid);  
  9.  
  10.    return 0 ;
  11. }
al usarla de esa forma, no funciona,no imprime nada, no se va al direccion de memoria donde esta el dato supongo.
Título: Re:Duda de punteros
Publicado por: uZYNQ en 06 de Abril de 2020, 10:22:33
A mi me funciona!, lo probe en el compilador online que sugieres! da un problema con la variable i por lo que la cambie por np como se muestra en la imagen.

Título: Re:Duda de punteros
Publicado por: KILLERJC en 06 de Abril de 2020, 10:48:51
El código necesario es el que escribió uZYNQ, y es lo mínimo (sin check de parametros) para lo que planteas.
Título: Re:Duda de punteros
Publicado por: cvargcal en 06 de Abril de 2020, 14:47:25
Gracias,

Que curioso... lo compile mil veces y no funcionó.... y ahora si.
incluso en ese compilador y en en CCS.   no se que estaba hciendo.... ya dormido supongo. :D

Gracias.

Título: Re:Duda de punteros
Publicado por: remi04 en 09 de Abril de 2020, 06:22:31
Ten en cuenta que en CCS no puedes pasar una string directamente como argumento de una función. No lo permite, o al menos yo nunca he conseguido hacerlo funcionar. Sin embargo XC sí que lo permite.
Título: Re:Duda de punteros
Publicado por: KILLERJC en 09 de Abril de 2020, 11:24:16
Ten en cuenta que en CCS no puedes pasar una string directamente como argumento de una función. No lo permite, o al menos yo nunca he conseguido hacerlo funcionar. Sin embargo XC sí que lo permite.

Que raro, ya que cuando haces

Código: C
  1. SIM800L_AT_SAPBR(4,3,1,"Contype","GPRS");

En realidad lo que estas haciendo es enviar el puntero al string, ya que ese string se considera constante y se guarda en la FLASH, CCS deberia hacer lo mismo. Ya que tambien se utiliza en los printf:

Código: C
  1. printf("AT+SAPBR=%d,%d\r\n",c_cmd_type,c_cid);
Título: Re:Duda de punteros
Publicado por: remi04 en 09 de Abril de 2020, 12:33:16
Ten en cuenta que en CCS no puedes pasar una string directamente como argumento de una función. No lo permite, o al menos yo nunca he conseguido hacerlo funcionar. Sin embargo XC sí que lo permite.

Que raro, ya que cuando haces

Código: C
  1. SIM800L_AT_SAPBR(4,3,1,"Contype","GPRS");

 

En realidad lo que estas haciendo es enviar el puntero al string, ya que ese string se considera constante y se guarda en la FLASH, CCS deberia hacer lo mismo. Ya que tambien se utiliza en los printf:

Código: C
  1. printf("AT+SAPBR=%d,%d\r\n",c_cmd_type,c_cid);

  Vale, rectifico. Ahora que lo dices lo he probado y si, va perfecto. Juraría haberme peleado con esto bastante y no conseguirlo.