Autor Tema: Función C para eclipse  (Leído 489 veces)

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

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 159
Función C para eclipse
« en: 15 de Octubre de 2018, 10:07:49 »
Saludos,  Inicie en el mundo de los ESP32 y estoy programando este modulo con eclipse.
En el proyecto que estoy implementando necesito usar esto que en PIC C compiler funciona bien:

Esta es bien elaborada
Código: C
  1. unsigned int16 ToHidKeyboardScancode(char c)
  2. {
  3.    unsigned int16 shift = 0;
  4.    
  5.    if ((c>='A')&&(c<='Z'))
  6.    {
  7.       c = tolower(c);
  8.       shift = 0x100;
  9.    }
  10.    if ((c>='a')&&(c<='z'))
  11.    {
  12.       return(((c-='a')+4)|shift);
  13.    }
  14.    if ((c>='1')&&(c<='9'))
  15.    {
  16.       return((c-='0')+0x1D);
  17.    }
  18.    switch(c)
  19.    {
  20.       case '!':   return(0x11E);
  21.       case '@':   return(0x11F);
  22.       case '#':   return(0x120);
  23.       case '$':   return(0x121);
  24.       case '%':   return(0x122);
  25.       case '^':   return(0x123);
  26.       case '&':   return(0x124);
  27.       case '*':   return(0x125);
  28.       case '(':   return(0x126);
  29.       case ')':   return(0x127);
  30.       case '0':   return(0x27);
  31.       case '\n':  return(0x28);  //enter
  32.       case '\r':  return(0x28);  //enter
  33.       case '\b':  return(0x2A);  //backspace
  34.       case '\t':  return(0x2B);  //tab
  35.       case ' ':   return(0x2C);  //space
  36.       case '_':   return(0x12D);
  37.       case '-':   return(0x2D);
  38.       case '+':   return(0x12E);
  39.       case '=':   return(0x2E);
  40.       case '{':   return(0x12F);
  41.       case '[':   return(0x2F);
  42.       case '}':   return(0x130);
  43.       case ']':   return(0x30);
  44.       case '|':   return(0x131);
  45.       case '\\':   return(0x31);
  46.       case ':':   return(0x133);
  47.       case ';':   return(0x33);
  48.       case '"':   return(0x134);
  49.       case '\'':   return(0x34);
  50.       case '~':   return(0x135);
  51.       case '`':   return(0x35);
  52.       case '<':   return(0x136);
  53.       case ',':   return(0x36);
  54.       case '>':   return(0x137);
  55.       case '.':   return(0x37);
  56.       case '?':   return(0x138);
  57.       case '/':   return(0x38);
  58.    }
  59. }

Pero me conformo con esta
Código: C
  1. int ToHidKeyboardScancode_2(char c){
  2.  
  3.    switch(c){
  4.    
  5.    // Hex
  6.       case 'A':   return(0x04);
  7.       case 'B':   return(0x05);
  8.       case 'C':   return(0x06);
  9.       case 'D':   return(0x07);
  10.       case 'E':   return(0x08);
  11.       case 'F':   return(0x09);  
  12.      
  13.       case '1':   return(0x1E);
  14.       case '2':   return(0x1F);
  15.       case '3':   return(0x20);
  16.       case '4':   return(0x21);
  17.       case '5':   return(0x22);  //
  18.       case '6':   return(0x23);  //
  19.       case '7':   return(0x24);  //
  20.       case '8':   return(0x25);  //
  21.       case '9':   return(0x26);  //
  22.       case '0':   return(0x27);
  23.    }
  24. }

es una funcion para pasar de accii a codigo del teclado.
Cuando implemento la segunda, el compilador dice esto:

/home/ubuntu/esp/workspace/NFC/main/main.cpp: In function 'int ToHidKeyboardScancode_2(char)':
/home/ubuntu/esp/workspace/NFC/main/main.cpp:149:1: error: control reaches end of non-void function [-Werror=return-type]
Lo puse como int pero debe ser int16...

¿Como se declara esa funcion enclipse?

Desconectado planeta9999

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3262
    • Pinballsp
Re:Función C para eclipse
« Respuesta #1 en: 15 de Octubre de 2018, 10:55:00 »
 
Si le has puesto un parámetro al main, pon un return 0, o quita ese parámetro. El error que te da, es del main, no de esa otra función, o mira a ver que tienes en la linea 149. Te está indicando que tienes definida una función con parámetro de salida, pero sin return.

El campo numérico, con GCC, puedes definirlo como uint16_t para 16bit, uint32_t para 32 bit, uint8_t para 8 bit, todos sin signo.
« Última modificación: 15 de Octubre de 2018, 11:02:31 por planeta9999 »

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 159
Re:Función C para eclipse
« Respuesta #2 en: 15 de Octubre de 2018, 11:08:29 »

Si le has puesto un parámetro al main, pon un return 0, o quita ese parámetro. El error que te da, es del main, no de esa otra función, o mira a ver que tienes en la linea 149. Te está indicando que tienes definida una función con parámetro de salida, pero sin return.

El campo numérico, con GCC, puedes definirlo como uint16_t para 16bit, uint32_t para 32 bit, uint8_t para 8 bit, todos sin signo.
Gracias, es en la función, la linea 149 es donde termina la función... es como tu dices, dice que hay una función con salida, pero no esta dando retorno...
case '1':   return(0x1E);  esto no retorna, o el compildor no lo tomo como una salida,  por eso pido ayuda para ver como se debe escribir correctamente la funcion que me retorne esos valores .


Si la hago de esta forma no hay error.
Código: C
  1. uint16_t toHidKeyboardScancode(char c)
  2. {
  3.         if ((c>='a') && (c<='z')) return (c-'a'+'A');
  4.         return(c);
  5. }

No entiendo como debe ser el return, si comento return(c); no compila...
« Última modificación: 15 de Octubre de 2018, 11:33:35 por cvargcal »

Desconectado planeta9999

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3262
    • Pinballsp
Re:Función C para eclipse
« Respuesta #3 en: 15 de Octubre de 2018, 20:15:58 »
 
Prueba a poner un return 0 al final del todo, fuera del CAS, justo antes del corchete que cierra la función. O añade al CAS la opción que se ejecuta por omisión si no se cumple ninguna de las opciones.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 159
Re:Función C para eclipse
« Respuesta #4 en: 20 de Octubre de 2018, 17:22:06 »

Prueba a poner un return 0 al final del todo, fuera del CAS, justo antes del corchete que cierra la función. O añade al CAS la opción que se ejecuta por omisión si no se cumple ninguna de las opciones.
Si gracias, parece que siempre hay que poner que retorne algo. con return 0 ya deja  compilar


 

anything