Autor Tema: Listas constantes  (Leído 1330 veces)

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

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Listas constantes
« en: 16 de Septiembre de 2014, 18:15:06 »
Alguien por favor me colabora con la lectura de las listas constantes, CCS
quiero crear una lista de comandos, y luego utilizarla cuando la necesite de esta forma:

char const lista []=
   {"OK",           
    "NO CARRIER",     
    "ERROR",         
   };

utilizando una función para  buscar un string en la  recepción serial, si en el buffer encontró la palabra "OK" actuar:

if(find_string(buffer,OK)) // si la respuesta del modulo es  "OK"

he visto que en códigos muy avanzados simplemente crean listas de todos los comandos y los utilizan  y comparan.
lo puedo hacer con cont *char Comando1 []="Ok";  obvio, pero esto consume mucha ram.
¿alguien tiene alguna idea? Gracias.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Listas constantes
« Respuesta #1 en: 17 de Septiembre de 2014, 04:24:48 »
Te copio y pego una Lista de Comandos de uno de mis proyectos  :mrgreen:

Código: CSS
  1. #define MAXLEN_COMMAND_NAME 12
  2. #define NUM_COMMAND_NAMES    40
  3.  
  4. const char Command_Names[NUM_COMMAND_NAMES][MAXLEN_COMMAND_NAME] = {
  5.  
  6.    "UNKNOWN",
  7.    "INFO",
  8.    "GETFIRM",
  9.    "GETVER",
  10.    "GETCFG",
  11.    
  12.    "GETDATE",
  13.    "GETTIME",
  14.    "GETDATETIME",
  15.    "GETMIN",
  16.    "GETMAX",
  17.    "GETORDER",
  18.    "GETENTRADAS",
  19.    "GETSALIDAS",  
  20.    "GETCONTRAST",  
  21.    "GET485ADD",  
  22.    "GET485END",  
  23.    "GETBLOCK",  
  24.    "GETBLOCKSEG",  
  25.    "GETTIMETRAN",  
  26.    
  27.    "SETDATE",
  28.    "SETTIME",
  29.    "SETDATETIME",
  30.    "SETMIN",
  31.    "SETMAX",
  32.    "SETORDER",
  33.    "SETENTRADAs",
  34.    "SETSALIDAS",
  35.    "SETCONTRAST",  
  36.    "SET485ADD",  
  37.    "SET485END",  
  38.    "SETBLOCK",  
  39.    "SETBLOCKSEG",  
  40.    "SETTIMETRAN",  
  41.  
  42.    "SETDEFAULT",
  43.  
  44.    "RESET",
  45.    "DUMP",
  46.    "BEEP",
  47.    
  48.    "ENUM",
  49.    "QUIET",
  50.    "WRITEADD"
  51. };

Y con estas funciones obtengo el Id único del Comando para después poder usarlo con un swhitch()

Código: CSS
  1. signed int8 get_index_by_name_comand(char* pCommandName){
  2.  
  3.    signed int8 ret=-1;
  4.    signed int8 b;
  5.    int8 i;
  6.    char c[MAXLEN_COMMAND_NAME];
  7.  
  8.    for(i=0;i<NUM_COMMAND_NAMES;i++){
  9.       get_name_comand_by_index(i,c);
  10.       str_to_upper(c);
  11.       str_to_upper(pCommandName);
  12.       b=strcmp(c,pCommandName);
  13.       if(b==0){
  14.          ret=i;
  15.          break;
  16.       }
  17.    }
  18.    return ret;
  19. }
  20.  
  21. void get_name_comand_by_index(int8 ix, char* pCommandName){
  22.    strcpy(pCommandName,Command_Names[ix]);
  23. }

Espero que por lo menos te sirva de algo  :mrgreen:



Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Listas constantes
« Respuesta #2 en: 17 de Septiembre de 2014, 11:45:06 »
Bastante util :mrgreen: , sin embargo no entiendo algo don RedPic, la declaracion del array es bidimensional?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Listas constantes
« Respuesta #3 en: 17 de Septiembre de 2014, 12:51:10 »
Bastante util :mrgreen: , sin embargo no entiendo algo don RedPic, la declaracion del array es bidimensional?

Si, jhozate, es bidimensional ya que es una array de strings que a su vez es un array de caracteres. El primer orden es el número (máximo) de strings que contiene y el segundo es el número (máximo) de caracteres que contiene cada string.  :mrgreen:

No se si CCS permitiría un array de punteros a strings, en cuyo caso no sabría cómo dimensionar los strings propiamente dichos, a menos que fuese en otro array de strings ... con lo cual llegaríamos al mismo sitio  :shock: :D
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania