Autor Tema: visuino, bueno?, malo?  (Leído 2110 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:visuino, bueno?, malo?
« Respuesta #15 en: 22 de Julio de 2022, 11:00:52 »
Me gustaría aprender el lenguaje C para microcontroladores... cual me recomiendan?
gracias.

Creo que básicamente los C que existen son casi lo mismo, algunos cumplen la norma establecida C99. Algunos como el CCS tienen funciones o librerías propias que ayudan al programador en algunas procesos.

Pienso que lo más importante, es escribir correctamente el código para crear multiprocesos. La mayoría de programadores he visto que programan todo linealmente y hasta en un mismo archivo.

Para un proyecto sencillo o no tan complejo puede estar bien, pero cuando manejas muchos procesos y periféricos, debes subdividir en tareas y cada tarea debe ser independiente, de tal manera que corregir, modificar o añadir nuevas características sólo sea en un proceso sin afectar al resto del código.  De esa manera el CPU del microcontrolador pareciera que realiza un proceso de multitarea.

Y si hay 2 o más desarrolladores del proyecto, cada uno se puede estar asignado a una proceso o tarea específica para  modificar o mejorar el código sin interferir en lo que hace el otro.



Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:visuino, bueno?, malo?
« Respuesta #16 en: 22 de Julio de 2022, 11:12:03 »
Creo que básicamente los C que existen son casi lo mismo, algunos cumplen la norma establecida C99. Algunos como el CCS tienen funciones o librerías propias que ayudan al programador en algunas procesos.

Pienso que lo más importante, es escribir correctamente el código para crear multiprocesos. La mayoría de programadores he visto que programan todo linealmente y hasta en un mismo archivo.

CCS te obliga a hacer eso..

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:visuino, bueno?, malo?
« Respuesta #17 en: 22 de Julio de 2022, 11:18:20 »
Creo que básicamente los C que existen son casi lo mismo, algunos cumplen la norma establecida C99. Algunos como el CCS tienen funciones o librerías propias que ayudan al programador en algunas procesos.

Pienso que lo más importante, es escribir correctamente el código para crear multiprocesos. La mayoría de programadores he visto que programan todo linealmente y hasta en un mismo archivo.

CCS te obliga a hacer eso..

¿Cómo te obliga ha hacer eso?, Multitarea es algo similar a esto:

Código: C
  1. int main ( void )
  2. {
  3.     /* Initialize all modules */
  4.     SYS_Initialize ( NULL );
  5.  
  6.     while ( true )
  7.     {
  8.         /* Maintain state machines of all polled MPLAB Harmony modules. */
  9.         WDT_Clear();
  10.         SYS_Tasks ( );
  11.     }
  12.  
  13.     /* Execution should not come here during normal operation */
  14.  
  15.     return ( EXIT_FAILURE );
  16. }

Donde

Código: C
  1. void SYS_Tasks ( void )
  2. {
  3.     /* Maintain system services */
  4.      /* Maintain Device Drivers */
  5.     DRV_MIIM_Tasks(sysObj.drvMiim);
  6.  
  7.     /* Maintain Middleware & Other Libraries */
  8.     TCPIP_STACK_Task(sysObj.tcpip);
  9.     /* Maintain the application's state machine. */
  10.         /* Call Application task APPETH. */
  11.     APPETH_Tasks();
  12.     /* Call Application task APPLCD. */
  13.     APPLCD_Tasks();
  14.     /* Call Application task APPSTATUSLED. */
  15.     APPSTATUSLED_Tasks();
  16.    /* Call Application task APPPULSADOR. */
  17.     APPPULSADOR_Tasks();
  18.    /* Call Application task APPEERAM. */
  19.     APPEERAM_Tasks();
  20.     /* Call Application task APPNFC. */
  21.       APPNFC_Tasks();
  22.     /* Call Application task APPSPI3. */
  23.     APPSPI3_Tasks();
  24.     /* Call Application task APPUART3. */
  25.     APPUART3_Tasks();
  26.     /* Call Application task APPLCD. */
  27.     APPLCD_Tasks();
  28.     /* Call Application task APPQT. */
  29.     APPQT_Tasks();
  30.  
  31.     /* Call Application task APPCRC. */
  32.     APPCRC_Tasks();
  33.  
  34.     /* Call Application task APPFONDOLUZ. */
  35.     APPFONDOLUZ_Tasks();
  36.  
  37.     /* Call Application task APPJSON. */
  38.     APPJSON_Tasks();
  39.  
  40. }

Y una tarea sería algo así, dividida en estados

Código: C
  1. void APPLCD_Tasks ( void )
  2. {
  3. //    unsigned char i;
  4.     /* Check the application's current state. */
  5.     switch ( applcdData.state )
  6.     {
  7.         /* Application's initial state. */
  8.         case APPLCD_ESTADO_INICIAL:
  9.         {
  10.             if (EnviarComandoAUart3(COMANDO_SOLICITAR_VERSION_FIRMWARE,0x00,0x00,0x00,0x00))
  11.             {
  12.                 applcdData.state = APPLCD_ESTADO_VERIFICAR_VERSION_FIRMWARE;
  13.             }
  14.             break;
  15.         }
  16.  
  17.         case APPLCD_ESTADO_VERIFICAR_VERSION_FIRMWARE:
  18.         {
  19.             applcdData.state = verificarRespuestaDeUart3(COMANDO_SOLICITAR_VERSION_FIRMWARE,0x00);
  20.             break;
  21.         }
  22.         /* TODO: implement your application state machine.*/
  23.         case APPLCD_ESTADO_ACTIVAR_FONDO_LUZ_AL_MAXIMO:
  24.         {
  25.             if (EnviarComandoAUart3(COMANDO_CAMBIAR_FONDO_LUZ,0x64,0x00,0x00,0x00))
  26.             {
  27.                 applcdData.state = APPLCD_ESTADO_VERIFICAR_FONDO_LUZ_AL_MAXIMO;
  28.             }
  29.             break;
  30.         }
  31.         case APPLCD_ESTADO_VERIFICAR_FONDO_LUZ_AL_MAXIMO:
  32.         {
  33.             applcdData.state = verificarRespuestaDeUart3(COMANDO_CAMBIAR_FONDO_LUZ,0x00);
  34.             break;
  35.         }
  36.         case  APPLCD_ESTADO_DETERMINAR_PAGINA_00:
  37.         {
  38.             if (EnviarComandoAUart3(COMANDO_OBTENER_PAGINA_ACTUAL,0x00,0x00,0x00,0x00))
  39.             {
  40.                 applcdData.state = APPLCD_ESTADO_VERIFICAR_PAGINA_00;
  41.             }
  42.             break;
  43.         }
  44.  
  45. .....
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:visuino, bueno?, malo?
« Respuesta #18 en: 22 de Julio de 2022, 13:41:48 »
Yo también te recomiendo para PIC los compiladores de Microchip (XC8 y demás):
https://www.microchip.com/en-us/tools-resources/develop/mplab-xc-compilers

Yo no he utilizado nunca CCS, pero por lo que he leído en el foro da problemas a menudo. También resuelve con librerías otros problemas, pero insisto en que es preferible que las programes tú mismo o que las copies de otros proyectos sabiendo lo que haces.

Por otro lado CCS no es gratuito. XC8 tampoco, pero hay versiones gratuítas y legales. Ocupan más memoria, pero eso lo puedes solucionar comprando por pocos céntimos más un microcontrolador con más memoria.

Los micros Atmega tienen un nucleo menos bizarro y por lo tanto el proyecto GNU ha podido hacer un compilador C++ excelente, gratuíto y sin limitaciones para estos microcontroladores. Si no te hacen falta los superperiféricos que tienen los PIC y te conformas con los ADC+UART yo te recomendaría que te pases a los Atmega.

Desconectado tsu_electronica

  • PIC18
  • ****
  • Mensajes: 274
Re:visuino, bueno?, malo?
« Respuesta #19 en: 22 de Julio de 2022, 15:10:02 »
muy buenos ejemplos de que también c no es perfecto, como todo, y otro buen ejemplo que son de paga, ya 50 años de c ya empieza a venir lo nuevo, así como ensamblador todavía existe pero ya es poco su uso ahorita las nuevas formas de programar ya están aquí y c se seguirá usando pero ya va a ir bajando así es todo no creo que deje de existir como ensamblador sigue así seguirá c pero ya en unos pocos años ya no se ocupara mucho para los micros ,muy buenos ejemplos y muy buenos comentarios de todos aunque seamos pocos al final visuino solo lo que hace es de lo visual generar un código en c para el ide que se puede checar sin problemas así como flowcode lo hace en c y ensamblador y como niple en ensamblador al final siempre será cuestión de gustos y costumbres solo no nos cerremos a lo nuevo gracias por sus respuestas.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:visuino, bueno?, malo?
« Respuesta #20 en: 22 de Julio de 2022, 15:39:34 »
muy buenos ejemplos de que también c no es perfecto, como todo, y otro buen ejemplo que son de paga, ya 50 años de c ya empieza a venir lo nuevo, así como ensamblador todavía existe pero ya es poco su uso ahorita las nuevas formas de programar ya están aquí y c se seguirá usando pero ya va a ir bajando así es todo no creo que deje de existir como ensamblador sigue así seguirá c pero ya en unos pocos años ya no se ocupara mucho para los micros ,muy buenos ejemplos y muy buenos comentarios de todos aunque seamos pocos al final visuino solo lo que hace es de lo visual generar un código en c para el ide que se puede checar sin problemas así como flowcode lo hace en c y ensamblador y como niple en ensamblador al final siempre será cuestión de gustos y costumbres solo no nos cerremos a lo nuevo gracias por sus respuestas.

El problema de ensamblador es que no es una norma, cada microcontrolador en función de su núcleo tiene sus propias instrucciones. Lo que está hecho en un PIC16, no va ser lo mismo en un AVR. Ni siquiera que los micros sean creados por la misma empresa, implica que todos tengan un ensamblador similar.

Respecto al C, lo que he visto es que los nuevos microcontroladores, sobre todo los de 32 bits están orientándose a C++, inclusive los FPGAs que pienso que podría ser el futuro, se centran en crear herramientas en dicho lenguaje. Y como dice Picuino, la ventaja de C y C++, es que a pesar de ser un lenguaje de alto nivel, se puede escribir un proceso o instrucciones de manera sencilla para que el compilador lo convierta correctamente en ensamblador.

Recuerdo que cuando empecé a usar C para microcontroladores (específicamente el CCS), apareció PICBasic como una manera rápida, futurística y sencilla de hacer proyectos para microcontroladores. Ahora ya no veo nada de eso, la moda ahora es Arduino.
« Última modificación: 22 de Julio de 2022, 15:44:54 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:visuino, bueno?, malo?
« Respuesta #21 en: 23 de Julio de 2022, 14:39:36 »
Creo que básicamente los C que existen son casi lo mismo, algunos cumplen la norma establecida C99. Algunos como el CCS tienen funciones o librerías propias que ayudan al programador en algunas procesos.

Pienso que lo más importante, es escribir correctamente el código para crear multiprocesos. La mayoría de programadores he visto que programan todo linealmente y hasta en un mismo archivo.

CCS te obliga a hacer eso..

¿Cómo te obliga ha hacer eso?, Multitarea es algo similar a esto:

Perdón, no especifique, me refería a lo que esta en negrita...
De mas esta decir que hacer un include de un .c es programar en un solo archivo.
Y si queres mas un de un archivo tenes que poner las directivas en cada uno de los archivos para que funcione... para nada modular ni tampoco util.

Con respecto a la multitarea. Cualquier programa con una interrupción es multitarea. Es mas, uno podría hacer un código sin interrupciones y llamarlo multitarea (supongamos encender un led cada tanto y hacer un echo de la UART).
Obviamente un RTOS es exactamente eso, una interrupción cada cierto tiempo y ver que "proceso" le toca, nada mas hablando simplistamente.

La gran ventaja de CCS es que te lo provee con muy poco entender.
La desventaja, dificultad para compilar varios archivos, poca información de algunas funciones (y mucho menos investigarlo al no tener el código fuente), entre algunas otras mas que seguramente me olvido.


Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:visuino, bueno?, malo?
« Respuesta #22 en: 23 de Julio de 2022, 15:05:57 »
Creo que básicamente los C que existen son casi lo mismo, algunos cumplen la norma establecida C99. Algunos como el CCS tienen funciones o librerías propias que ayudan al programador en algunas procesos.

Pienso que lo más importante, es escribir correctamente el código para crear multiprocesos. La mayoría de programadores he visto que programan todo linealmente y hasta en un mismo archivo.

CCS te obliga a hacer eso..

¿Cómo te obliga ha hacer eso?, Multitarea es algo similar a esto:

Con respecto a la multitarea. Cualquier programa con una interrupción es multitarea. Es mas, uno podría hacer un código sin interrupciones y llamarlo multitarea (supongamos encender un led cada tanto y hacer un echo de la UART).
Obviamente un RTOS es exactamente eso, una interrupción cada cierto tiempo y ver que "proceso" le toca, nada mas hablando simplistamente.


Es verdad que las interrupciones es un recurso que posee un microcontrolador para multitarea, pero sólo deben utilizarse en procesos críticos ya que es un proceso apropiativo del CPU.  Otros recursos que se puede recurrir es el paralelismo (o procesamiento cooperativo), sobre todo en tareas no críticas.
« Última modificación: 23 de Julio de 2022, 17:05:28 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado tsu_electronica

  • PIC18
  • ****
  • Mensajes: 274
Re:visuino, bueno?, malo?
« Respuesta #23 en: 23 de Julio de 2022, 18:40:31 »
hablando de las multitareas, ya con los módulos que tienen cip ya se ve mejor la multitarea, aunque la interrupción si nos da esa ilusión pero al final se gasta tiempo y se deja de hacer lo que esta haciendo por atender, ya con los módulos cip ya no es necesario se puede estar haciendo cosas diferentes a la vez sin problema.

Desconectado tsu_electronica

  • PIC18
  • ****
  • Mensajes: 274
Re:visuino, bueno?, malo?
« Respuesta #24 en: 23 de Julio de 2022, 19:02:50 »
hablando tanto de todos los lenguajes y micros recordé un video que vi y se los comparto, yo creo que ya lo vieron pero es interesante.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:visuino, bueno?, malo?
« Respuesta #25 en: 23 de Julio de 2022, 19:21:58 »
hablando tanto de todos los lenguajes y micros recordé un video que vi y se los comparto, yo creo que ya lo vieron pero es interesante.

Eso es verdad, recientemente para Harmony se dejo de lado el MHC para integrarlo o configurarlo con MCC . No se si los de 16 bits (PIC24 y dsPIC) también van a ser configurados con dicha herramienta (Melody).
« Última modificación: 23 de Julio de 2022, 19:26:40 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything