Autor Tema: diferencia de asm y c al programar ¿cual usar?  (Leído 29123 veces)

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

Desconectado vicopic8

  • PIC10
  • *
  • Mensajes: 29
diferencia de asm y c al programar ¿cual usar?
« en: 16 de Marzo de 2023, 21:42:26 »
Buenas amigos, recientemente he estado practicando el PIC16F84A con ensamblador, haciendo pequeños programas como encender leds y eso y pues me preguntaba lo siguiente, ¿Hay alguna diferencia notable entre asm y c al momento de programar un microcontrolador?. Se que ademas de ensamblador, también se puede programar en c y basic pero se si con cualquiera de estos lenguajes sea lo mismo independientemente de lo que se este programando. Yo tenia entendido que con ensamblador se tiene un mejor control de los recursos del PIC pero es un poco complejo pero con c es mas fácil programar ya que es mas amigable con el programador entonces, independientemente de si se esta iniciando en los PIC o si eres un profesional con mucha experiencia, ¿Cual seria mejor usar?
¿Acaso los microcontroladores son el futuro?

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #1 en: 16 de Marzo de 2023, 23:04:42 »
Buenas amigos, recientemente he estado practicando el PIC16F84A con ensamblador, haciendo pequeños programas como encender leds y eso y pues me preguntaba lo siguiente, ¿Hay alguna diferencia notable entre asm y c al momento de programar un microcontrolador?. Se que ademas de ensamblador, también se puede programar en c y basic pero se si con cualquiera de estos lenguajes sea lo mismo independientemente de lo que se este programando. Yo tenia entendido que con ensamblador se tiene un mejor control de los recursos del PIC pero es un poco complejo pero con c es mas fácil programar ya que es mas amigable con el programador entonces, independientemente de si se esta iniciando en los PIC o si eres un profesional con mucha experiencia, ¿Cual seria mejor usar?

Para microcontroladores pequeños (pequeños en memoria ram y flash), y proyectos sencillos, el ensamblador es correcto.

Para microcontroladores medianos o superiores es preferible C, sobre todo cuando se necesita periféricos complejos (USB, Ethernet, etc).

Con C, muchos procesos se puede escribir que en pocas líneas de código, pero detrás de todo eso puede existir muchas líneas en asm que podrían ser menos si las hubieras escrito tu mismo.

Asm te permite comprender la arquitectura del microcontrolador, mientras que C, esa parte puede ser en cierta manera una caja negra.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado vicopic8

  • PIC10
  • *
  • Mensajes: 29
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #2 en: 16 de Marzo de 2023, 23:41:24 »
Buenas amigos, recientemente he estado practicando el PIC16F84A con ensamblador, haciendo pequeños programas como encender leds y eso y pues me preguntaba lo siguiente, ¿Hay alguna diferencia notable entre asm y c al momento de programar un microcontrolador?. Se que ademas de ensamblador, también se puede programar en c y basic pero se si con cualquiera de estos lenguajes sea lo mismo independientemente de lo que se este programando. Yo tenia entendido que con ensamblador se tiene un mejor control de los recursos del PIC pero es un poco complejo pero con c es mas fácil programar ya que es mas amigable con el programador entonces, independientemente de si se esta iniciando en los PIC o si eres un profesional con mucha experiencia, ¿Cual seria mejor usar?

Para microcontroladores pequeños (pequeños en memoria ram y flash), y proyectos sencillos, el ensamblador es correcto.

Para microcontroladores medianos o superiores es preferible C, sobre todo cuando se necesita periféricos complejos (USB, Ethernet, etc).

Con C, muchos procesos se puede escribir que en pocas líneas de código, pero detrás de todo eso puede existir muchas líneas en asm que podrían ser menos si las hubieras escrito tu mismo.

Asm te permite comprender la arquitectura del microcontrolador, mientras que C, esa parte puede ser en cierta manera una caja negra.

Es decir que, ¿Un programa escrito en ensamblador podría pesar menos que un programa escrito en C?
¿Acaso los microcontroladores son el futuro?

Desconectado tsu_electronica

  • PIC18
  • ****
  • Mensajes: 274
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #3 en: 17 de Marzo de 2023, 00:34:09 »
espero conteste tu pregunta
t=820s

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #4 en: 17 de Marzo de 2023, 01:30:40 »
...
Es decir que, ¿Un programa escrito en ensamblador podría pesar menos que un programa escrito en C?

Siempre un código bien escrito en ensamblador pesa menos que un código bien escrito en C.

Peeeero hay  que tener en mente lo siguiente:

- Cuando te queda chica la memoria es mas probable que sea porque se eligió mal al micro o los algoritmos/librerías son horribles que debido a usar C o ASM.

- ASM es siempre mas laborioso de programar y depurar.  Sobre todos con micros RISC y lo relativamente pobre del MPASM comparado con los abuelos MASM y TASM para la familia x86 (que además son micros CISC)

- En C se tienen niveles de optimización del código, no son la perfección, pero conociendo como los trabaja cada compilador y escribiendo un código que lo ayude, el resultado es lo suficientemente bueno como para no justificar ASM.

- La única ventaja del ASM en mi opinión es la velocidad, pero no en todo el programa sino solamente en un fragmento, una interrupción cuyo tiempo de ejecución y latencia es importante que sean lo mínimo posible se puede escribir en ASM, el resto del programa en C.

Desconectado vicopic8

  • PIC10
  • *
  • Mensajes: 29
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #5 en: 17 de Marzo de 2023, 21:43:16 »
espero conteste tu pregunta
t=820s

Muchas gracias por el video, fue realmente interesante.
¿Acaso los microcontroladores son el futuro?

Desconectado vicopic8

  • PIC10
  • *
  • Mensajes: 29
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #6 en: 17 de Marzo de 2023, 21:48:33 »
...
Es decir que, ¿Un programa escrito en ensamblador podría pesar menos que un programa escrito en C?

Siempre un código bien escrito en ensamblador pesa menos que un código bien escrito en C.

Peeeero hay  que tener en mente lo siguiente:

- Cuando te queda chica la memoria es mas probable que sea porque se eligió mal al micro o los algoritmos/librerías son horribles que debido a usar C o ASM.

- ASM es siempre mas laborioso de programar y depurar.  Sobre todos con micros RISC y lo relativamente pobre del MPASM comparado con los abuelos MASM y TASM para la familia x86 (que además son micros CISC)

- En C se tienen niveles de optimización del código, no son la perfección, pero conociendo como los trabaja cada compilador y escribiendo un código que lo ayude, el resultado es lo suficientemente bueno como para no justificar ASM.

- La única ventaja del ASM en mi opinión es la velocidad, pero no en todo el programa sino solamente en un fragmento, una interrupción cuyo tiempo de ejecución y latencia es importante que sean lo mínimo posible se puede escribir en ASM, el resto del programa en C.

Entonces podríamos decir que, ¿Dependiendo de lo que queramos hacer, sera el microcontrolador a usar, que va de la mano con el lenguaje a utilizar y el poder optimizarlo lo mejor posible para tener un buen programa?

Me parece interesante lo que mencionas al final de tu comentario: el poder mezclar (bueno así lo entendí yo) ASM con C.
¿Acaso los microcontroladores son el futuro?

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #7 en: 17 de Marzo de 2023, 22:35:11 »
...
Es decir que, ¿Un programa escrito en ensamblador podría pesar menos que un programa escrito en C?

Siempre un código bien escrito en ensamblador pesa menos que un código bien escrito en C.

Peeeero hay  que tener en mente lo siguiente:

- Cuando te queda chica la memoria es mas probable que sea porque se eligió mal al micro o los algoritmos/librerías son horribles que debido a usar C o ASM.

- ASM es siempre mas laborioso de programar y depurar.  Sobre todos con micros RISC y lo relativamente pobre del MPASM comparado con los abuelos MASM y TASM para la familia x86 (que además son micros CISC)

- En C se tienen niveles de optimización del código, no son la perfección, pero conociendo como los trabaja cada compilador y escribiendo un código que lo ayude, el resultado es lo suficientemente bueno como para no justificar ASM.

- La única ventaja del ASM en mi opinión es la velocidad, pero no en todo el programa sino solamente en un fragmento, una interrupción cuyo tiempo de ejecución y latencia es importante que sean lo mínimo posible se puede escribir en ASM, el resto del programa en C.

Entonces podríamos decir que, ¿Dependiendo de lo que queramos hacer, sera el microcontrolador a usar, que va de la mano con el lenguaje a utilizar y el poder optimizarlo lo mejor posible para tener un buen programa?

Me parece interesante lo que mencionas al final de tu comentario: el poder mezclar (bueno así lo entendí yo) ASM con C.

Depende de la experiencia y tus habilidades como programador.

Generalmente siempre se escoge un microcontrolador con las mayores capacidades en memoria y periféricos para un prototipo y luego se apunta a uno de menores capacidades en un producto final.

Con esos microcontroladores pequeños (pequeños no solo memoria) como los PIC10F y PIC12F, he visto que puedes programarlos en C, y se los ocupa para cosas muy puntuales, nada complejo. Si yo tuviera que escoger uno de ellos para un proyecto, lo intentaría primero en C y luego si el tamaño del código es muy grande, no tendría más opción que usar ASM.

Pero si necesitas hacer muchos procesos, creo que sería mala idea apuntar a los microcontroladores mencionados.

Lo de mezclar se que sé puede hacer, nunca he sentido la necesidad de hacerlo, tal vez cuando usas microcontroladores de 8 bits y tu proyecto está hecho en C, pero necesitas controlar un proceso crítico; pero para evitar a recurrir a esa combinación de lenguajes, se debe programar el proyecto en un modelo recurrente a base de tareas y procesos cooperativos para no entorpecer al sistema.

« Última modificación: 17 de Marzo de 2023, 22:50:13 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado vicopic8

  • PIC10
  • *
  • Mensajes: 29
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #8 en: 18 de Marzo de 2023, 01:37:55 »
...
Es decir que, ¿Un programa escrito en ensamblador podría pesar menos que un programa escrito en C?

Siempre un código bien escrito en ensamblador pesa menos que un código bien escrito en C.

Peeeero hay  que tener en mente lo siguiente:

- Cuando te queda chica la memoria es mas probable que sea porque se eligió mal al micro o los algoritmos/librerías son horribles que debido a usar C o ASM.

- ASM es siempre mas laborioso de programar y depurar.  Sobre todos con micros RISC y lo relativamente pobre del MPASM comparado con los abuelos MASM y TASM para la familia x86 (que además son micros CISC)

- En C se tienen niveles de optimización del código, no son la perfección, pero conociendo como los trabaja cada compilador y escribiendo un código que lo ayude, el resultado es lo suficientemente bueno como para no justificar ASM.

- La única ventaja del ASM en mi opinión es la velocidad, pero no en todo el programa sino solamente en un fragmento, una interrupción cuyo tiempo de ejecución y latencia es importante que sean lo mínimo posible se puede escribir en ASM, el resto del programa en C.

Entonces podríamos decir que, ¿Dependiendo de lo que queramos hacer, sera el microcontrolador a usar, que va de la mano con el lenguaje a utilizar y el poder optimizarlo lo mejor posible para tener un buen programa?

Me parece interesante lo que mencionas al final de tu comentario: el poder mezclar (bueno así lo entendí yo) ASM con C.

Depende de la experiencia y tus habilidades como programador.

Generalmente siempre se escoge un microcontrolador con las mayores capacidades en memoria y periféricos para un prototipo y luego se apunta a uno de menores capacidades en un producto final.

Con esos microcontroladores pequeños (pequeños no solo memoria) como los PIC10F y PIC12F, he visto que puedes programarlos en C, y se los ocupa para cosas muy puntuales, nada complejo. Si yo tuviera que escoger uno de ellos para un proyecto, lo intentaría primero en C y luego si el tamaño del código es muy grande, no tendría más opción que usar ASM.

Pero si necesitas hacer muchos procesos, creo que sería mala idea apuntar a los microcontroladores mencionados.

Lo de mezclar se que sé puede hacer, nunca he sentido la necesidad de hacerlo, tal vez cuando usas microcontroladores de 8 bits y tu proyecto está hecho en C, pero necesitas controlar un proceso crítico; pero para evitar a recurrir a esa combinación de lenguajes, se debe programar el proyecto en un modelo recurrente a base de tareas y procesos cooperativos para no entorpecer al sistema.

Ahora veo que no solo el lenguaje de programación es importante si no también el micro que se va a a utilizar. Me parece una buena idea el de tener un micro grande para hacer prototipos por muy sencillos que sean y luego pasarlo al micro que se ajuste mejor para un producto final. Una pregunta que tal vez no tenga mucho que ver con la pregunta original al abrir este tema (y tal vez me estoy adelantando mucho ya que apenas voy empezando con el PIC16F84A), ¿Que PIC'S recomendarías para hacer prototipos?
¿Acaso los microcontroladores son el futuro?

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #9 en: 18 de Marzo de 2023, 03:32:35 »
...
Ahora veo que no solo el lenguaje de programación es importante

En microcontroladores de esta clase es C o C++ . 
El assembler dejalo para cosas muy puntuales. 
Aunque el assembler, al menos a mí, me resulta indispensable para corregir errores --> El programa lo hago en C, pero cuando algo no anda o saltan errores extraños, miro en el listado ASM para ver qué se generó y si es lo que yo quería.  Obviamente, para eso necesitás conocer ASM.

Citar
si no también el micro que se va a a utilizar. Me parece una buena idea el de tener un micro grande para hacer prototipos por muy sencillos que sean y luego pasarlo al micro que se ajuste mejor para un producto final.
Eso es como preguntarse cuál es el mejor calzado,  primero hay que saber si es para una fiesta, jugar al fútbol o ir a la playa. Después elijamos calzado.

Citar
Una pregunta que tal vez no tenga mucho que ver con la pregunta original al abrir este tema (y tal vez me estoy adelantando mucho ya que apenas voy empezando con el PIC16F84A), ¿Que PIC'S recomendarías para hacer prototipos?
El problema del 16F84A es fue el primero popular, como la bibliografía lo usó mucho en sus ejemplos todavía hay gente que lo busca.  Cualquier PIC16 nuevo y no tan nuevo es muy superior, se consigue mas fácilmente y en general mas barato (ej: 16F88)
Es útil en prototipos tener pines en exceso,  podés usar PIC16 o PIC18 en encapsulado de 40 pines (ej: 16F887)


Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #10 en: 18 de Marzo de 2023, 10:48:41 »
Aunque el assembler, al menos a mí, me resulta indispensable para corregir errores --> El programa lo hago en C, pero cuando algo no anda o saltan errores extraños, miro en el listado ASM para ver qué se generó y si es lo que yo quería.  Obviamente, para eso necesitás conocer ASM.

Eso me parece un error o defecto del compilador y me imagino que posiblemente estás hablando del CCS, que ya tiene por lo menos unos 20 años y sigue hasta ahora con esos problemas.

Yo también recuerdo que cuando quise migrar de asm a C (y eso fue hace muchos años), escogí el CCS, y tal como lo mencionas, había cosas que no funcionaban y al analizarlo en ensamblador, descubrías que el compilador no generaba correctamente el código en asm en algunas ocasiones. Esa fue una de las razones para dejar de lado eso y pasarme al C18.

Por otro lado, cuando migre al PIC32, fue el primer microcontrolador que no analicé como escribir código en asm, (hasta ahora lo desconozco), fuí directamente a escribir código en C (C32 ya ahora con XC32) y no he tenido algún problema como el que mencionas.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado vicopic8

  • PIC10
  • *
  • Mensajes: 29
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #11 en: 18 de Marzo de 2023, 11:38:40 »
En microcontroladores de esta clase es C o C++ . 
El assembler dejalo para cosas muy puntuales. 
Aunque el assembler, al menos a mí, me resulta indispensable para corregir errores --> El programa lo hago en C, pero cuando algo no anda o saltan errores extraños, miro en el listado ASM para ver qué se generó y si es lo que yo quería.  Obviamente, para eso necesitás conocer ASM.

Ok entoces con c/c++.

Eso es como preguntarse cuál es el mejor calzado,  primero hay que saber si es para una fiesta, jugar al fútbol o ir a la playa. Después elijamos calzado.

Analizar primero que es lo que se quiere hacer para luego elegir un pic adecuando ¿Verdad?

El problema del 16F84A es fue el primero popular, como la bibliografía lo usó mucho en sus ejemplos todavía hay gente que lo busca.  Cualquier PIC16 nuevo y no tan nuevo es muy superior, se consigue mas fácilmente y en general mas barato (ej: 16F88)
Es útil en prototipos tener pines en exceso,  podés usar PIC16 o PIC18 en encapsulado de 40 pines (ej: 16F887)

Buscare el 16F887 (Creo también que hay 16F887A. Me apareció cuando lo buscaba).

Muchas gracias por responder a mis dudas!!!!
¿Acaso los microcontroladores son el futuro?

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #12 en: 18 de Marzo de 2023, 12:01:24 »

Buscare el 16F887 (Creo también que hay 16F887A. Me apareció cuando lo buscaba).

Muchas gracias por responder a mis dudas!!!!

Debes considerar que esos microcontroladores son bastante viejos y muchas herramientas para configurar y generar código no los soportan. MCHP los mantiene debido a que tiene una filosofía de fabricar componentes antiguos para mantener la fidelidad de sus usuarios, sin embargo siempre alienta a que uses lo nuevo.


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

Desconectado tsu_electronica

  • PIC18
  • ****
  • Mensajes: 274
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #13 en: 18 de Marzo de 2023, 15:05:27 »
amigo vicopic8 mi recomendación personal es que si vas a trabajar con el mplab x que ahorita esta en el 6.05 trabajaras con los pic resientes como el 16f18877 que seria la nueva generación del 16f877a y del 16f887, ahora si quieres trabajar con pics viejos como el 16f84a y lo quieres trabajar en c puedes usar otros ides como el ccs compiler u otros hasta niple puedes usarlo que esta mejor para esos micros y si apenas empiezas lo mejor o lo ideal seria con pics nuevos para que sigas la línea actual ya que para saber como funcionan por dentro los micros si esta bien los micros viejos y de documentación esta el rey de reyes el libro microcontrolador pic16f84a desarrollo de proyectos, lo bueno o lo malo es que todo es en ensamblador pero en sus tiempos para aprender eh iniciar lo mejor y si buscas en c hay varios pero en su momento me gusto el libro compilador c ccs y simulador proteus para microcontroladores pic, bueno es mi recomendación.

Desconectado vicopic8

  • PIC10
  • *
  • Mensajes: 29
Re:diferencia de asm y c al programar ¿cual usar?
« Respuesta #14 en: 18 de Marzo de 2023, 18:36:27 »

Buscare el 16F887 (Creo también que hay 16F887A. Me apareció cuando lo buscaba).

Muchas gracias por responder a mis dudas!!!!

Debes considerar que esos microcontroladores son bastante viejos y muchas herramientas para configurar y generar código no los soportan. MCHP los mantiene debido a que tiene una filosofía de fabricar componentes antiguos para mantener la fidelidad de sus usuarios, sin embargo siempre alienta a que uses lo nuevo.



Ya veo, por cierto, entre mis cosas tenia abandonados algunos pic y entre esos esta el PIC16F877A. De nuevo, muchas gracias por enseñarme, sinceramente ni sabia que la empresa que fabrica estos PIC'S sigue haciendo PIC'S viejos, de hecho al buscar en su pagina para consultar el PIC16F84A debajo de su nombre aparese que el estatus del chip esta en producción.
¿Acaso los microcontroladores son el futuro?