Autor Tema: Tema Dividido. ¿ASM Vs C?  (Leído 25054 veces)

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

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Tema Dividido. ¿ASM Vs C?
« Respuesta #30 en: 27 de Octubre de 2006, 02:30:54 »
Creo que ya ha habido bastantes discusiones que no van a llevar a ningún sitio.
Como esto siga en este plan nos vamos a ver obligados a cerrar el hilo de forma permanente,borrar mensajes,ó lo que consideremos oportuno.Así que vamos a dejar de recriminarnos unos a otros y no desviar el tema del hilo,que esto es un foro y no una mesa de debate sobre "tú sabes,yo se,tú eres,yo soy...".Os pido encarecidamente a TOD@S que templeis los ánimos y haya paz.Ya se ha distcutido suficiente.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #31 en: 27 de Octubre de 2006, 02:52:50 »
He dividido el tema. Yo, por mi parte, no gasto mas polvora en chimango.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #32 en: 27 de Octubre de 2006, 16:32:00 »
Como estos debates son comunes acá les dejo otra discusión parecida en ingles. Si buscan en ese foro seguro que van a encontrar aún más.

http://www.edaboard.com/ftopic200743.html

Por lo he escrito me interesa más la técnica de programación que el lenguaje en sí, por ahí es mejor empezar otro tema con las preguntas que he hecho más arriba.

Saludos.

Martín
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #33 en: 27 de Octubre de 2006, 17:55:21 »
bueno apenas boy por el esambler y aspiro C y otros ;es mas interesante aprender varios idiomas

saludos .

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #34 en: 27 de Octubre de 2006, 22:39:25 »
A ver si doy mi opinión, ya que este tema creció mucho y ni siquiera tuve tiempo de sentarme a leer todos los posts.

Antes que nada quisiera aclarar que siempre siempre me parece que todas las opiniones son válidas, siempre que estén bien fundamentadas.

Decir cosas solo por decirlas no aporta nada a la discusión, decirlas con cierto criterio y aportando "argumentos" creo que suma por más que se piense diferente.

Siempre que doy una opinión trato de dar mis argumentos, si no lo hago les pido perdón.


Antes de hablar puntualmente sobre C vs ASM, quisiera ir más allá que creo que el tema en cuestión radica sobre la evaluación previa de un proyecto.
Creo que un desarrollador de sistemas embedidos, debe conocer de muchas cosas antes de poder completar un trabajo. Además debe analizar qué conviene para cada proyecto.  Todo en definitiva se reduce a pocos items.

1) Posibilidades técnicas de realmente poder llevar a cabo el proyecto
2) Costo final del producto
3) Costo del desarrollo


1) Uno debe realmente basándose en los conocimientos y experiencia, saber si uno puede hacer realidad el proyecto con las especificaciones requeridas y en qué plazo lo podrá terminar.  Esto repito se basa en la experiencia y es común que con falta de experiencia uno considere que un proyecto le llevará menos que lo que le termina llevando.  A medida que se van haciendo proyectos esta habilidad de "evaluar" la complejidad y el tiempo se van agudizando.

2) Este punto es el que uno siempre pone incapié, pero además de los costos de los materiales , se debe sumar el costo de armado, de posibilidad de fallas (cuantos mas elementos tenga es más probable que falle), retrabajos, etc.  En los materiales no solamente está el microcontrolador, éste es solo un elemento dentro de la gran cantidad de componentes que suele acompañar a un sistema embebido.   Está el Circuito Impreso, los demás componentes, cables, conectores, gabinete, etc.
El costo de armado si lo hacemos nosotros es tiempo empleado, si lo hace otro es un costo bien conocido.  Si hay que hacer un chequeo del equipo, también se debe tener en cuenta.

3) El costo del desarrollo suele ser, de acuerdo a mi experiencia de lo que he visto en el tema, el punto que gralmente menos en cuenta se tiene y que muchas veces más se debería considerar.  Cuánto realmente me costó el proyecto? Hay muchas formas de verlo
. Qué instrumental utilicé, si hubo que comprar alguna herramienta especial, como lo amortizo, etc.
. Gastos como alquiler, luz, teléfono, impuestos, etc
. Sueldos, en el caso de que trabaje uno en relación de dependencia
. Dinero que podriamos ganar haciendo otra cosa, si trabajamos como independiente.

Este costo se debe considerar y a menudo suele ser el item que más se sale de rango y que supera a todos los demás costos.  Este costo se debe distribuir en la cantidad de equipos que se vendan.


Una vez expuesto esto, vayamos al tema puntual de ASM vs C.  Esta batalla se originó también en las PCs pero ya se habló tanto del tema que ya casi ni lo menciona.  Lo mismo ocurrió con CISC o RISC... hasta que Intel ganó por cansancio con una técnica comercial agresiva, una política de reuso del software realmente para sacarse el sombrero.  Ellos entendieron que cambiar el software era más engorroso que mejorar un microprocesador o un hardware. 

La lucha CISC vs RISC está hoy en día en los microcontroladores también, pero en este ámbito se pueden ver más RISC que CISC, pero quién dice que ocurrirá en el futuro.

Yendo al grano, en los pics 12F, 16F programo en exclusiva en ASM.  Las razones son que comencé con el ASM, tengo una gran cantidad de rutinas y macros que me resuelven muchas cosas y el tema de la paginación de RAM y memoria de programa hacía y hace que los soft en C sean algo grandes para los proyectos en que me ví involucrado.  En esos tiempos los 18F no existían.  El pic más grande era el 16C74.  Había que ingeniarselas para meter algunos software ahí adentro. 

Con los 18F la decisión ya no fue tan simple y la complejidad de los proyectos en que me vi envuelto hizo que me decantara por el C previo estudio de la architectura y de algunas pruebas en el ensambaldor de los 18F.

Actualmente programo casi con exclusividad en los 18F, casi ni uso los 16F, por costo no se justifica.  Acabo de conseguir 25 PIC18f2550 al precio de un 16f876A y encima me ahorro el cristal.  Además tiene el doble de todo, memoria ram, eeprom, memoria de prgorama.  Estos precios no son inventados, fíjarse sino en www.digikey.com para ver de qué hablo.

El C que elegí es el C18,  es un lenguaje que exige un profundo conocimiento de la arquitectura y se puede programar "como si" fuera ensamblador.  Así es, uno define todo como lo haría, al igual que venía haciendo en ensambaldor en los 16F y 18F.  Eso me encantó y me da mucha versatilidad.

Hago los software muy rápidamente, tengo rutinas hechas para un montón de cosas y en algunos casos hasta he hecho rutinas en ensamblador las cuales las llamo desde el C.  El asm generado , si uno estudia bien las optimizaciones del compilador, es idéntico o casi idéntico a lo que uno haria en asm!!!! 

No me imagino haciendo cálculos de ecuaciones expresadas en diferencias, para un algoritmo de control, en asm.  No es que no me imagine como sería el código, sino que me parece una pérdida de tiempo impresionante.  El tiempo es dinero amigos.

Creo que salvo rara excepción, la poca diferencia en centavos de dólar entre un 16F y un 18F da por ganador siempre a estos últimos, sobre todo en usar un C muy potente como el C18.  Encima, prorateando tiempo de desarrollo, costo de todos los componentes (donde el PIC termina siendo un mínimo porcentaje del producto), la elección es aún más obvia. 

Vayamos con un ejemplo, si un hardware vale u$s 100, y el pic vale u$s 5 o u$s 6... la diferencia es de un 1% del total, eso sin considerar que probablemente en el pic más chico debamos quemarnos las pestañas.  Si encima hablamos de "cantidad" la diferencia costo entre pics se hace aún más pequeña.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #35 en: 27 de Octubre de 2006, 22:43:44 »
carcass, o mejor prefiero decirte Sergio, una vez expuesto mis argumentos, he decidido iniciar un nuevo post para dialogar contigo sobre estos puntos. 

Aclaro que mi ánimo no es la de levantar polvareda, o generar discusión sino como vengo diciendo desde mi anterior post, exponer con argumentos concisos mi opinión.

Hago una introducción sobre mis conocimientos o mi experiencia en el tema del lenguaje ensamblador de los pics, con la finalidad de que mi opinión se vea desde un punto de vista técnico más profundo, no meramente "la opinión" como opinión misma.

. Amo el ASSEMBLER (en adelante ASM), me parece directo, puntual, específico. 
. Tengo mi buen archivo de librerías de macros que me resuelven en una línea como si de un C se tratase, muchas cosas. 
. Organizo todo en un hilo de control bien conocido donde ahgo 'calls' a las subrutinas. 
. Utilizo constantemente interrupciones para las tareas que deban ser atendidas sin demora.
. Gestiono la lógica de mis programas como si del C o del pascal se tratase.  Con llamados a lo que podriamos llamar funciones o procedimientos.  En esas llamadas envío parámetros y tomo resultados.  Los almaceno en un buffer que auspicia de STACK de mi software. 
. Me olvido de en qué página están los códigos ya que mi código prevee que se lo llame desde cualquier página.
. Codifico de la forma "relocatable" o con "código reubicable".  Escribo el código y por otra parte trabajo sobre el linker para ubicarlo donde más me convenga o donde lo desee.  Esto sí permite que varias personas trabajen mancomunadamente en un proyecto sin molestarse.
. Armo mis proyectos en varios archivos, cada cual resuelve un tema puntual, como si de "units" o ".h" de C se tratasen.
. Utilizo con muchísima frecuencia el direccionamiento indirecto, me permite evitar el uso de "bank switching" en mis códigos.  En los 16F, puedo acceder a 2 bancos a la vez sin cambiar de RAM BANK.  En los 18F la ventaja es aún mayor, ya que dispongo de 3 registros para ésta tarea y no solo uno.  El mover buffers de un lado a otro de la memoria de programa es cosa de niños.
. He usado casi todos los módulos de los pics 16 y 18, creo que quedan sin usar solo los más nuevos o los muy especificos (USB).
. En PC he programado desde Basic cuando era niño, pasando por Pascal, Delphi y C.  He hecho un sinfín de aplicaciones y comencé en los años donde el DOS no hacia nada (no habia lo que hoy llamamos Windows), había que hacer rutinas para leer el teclado, para hacer una "ventana", leyendo la memoria de vídeo, programba directamente el 16550 para la usart, etc!. 

Me considero una persona detallista, me gusta la excelencia, apunto a ser cada dia mejor, hacer mejores aplicaciones y en menor tiempo.  Busco aprender de los que más saben, busco compartir conocimiento a la vez que aprender de otros. 

He aprendido que se puede aprender cosas más que interesantes de gente que recién comienza y en muchas ocasiones pocas cosas de gente que hace años que está con lo mismo.  Trato de evitar el encerrarme en mi única opinión, ser necio evita aprender de otros y la verdad, el tema en que nos metimos (firmware, software, sistemas embebidos) es tan complejo que es imposible abarcarlo completamente y es entonces donde aprender de otros es la gran chance de ahorrar tiempo!.  No me alcanzaría toda mi vida para hacer en un mes lo que hacemos todos los del foro en ese mismo mes!! 


Acceso a Módulos
-----------------
Cuando uno accede a un módulo, a un puerto, a un pin, a apagar un flag de interrupción, el ASM  es bien directo y la mejor opción. 

Ahora bien, también se puede ver que en el C, un código como el que puso SisPic se traduce de igual forma, sin diferencias entre C y ASM, pero más legible por tratarse del C y que se pone todo en una misma línea.


Software de Gran tamaño
--------------------------------
Un software de 200.000 líneas en ensamblador para que quepan en un PIC24 lo considero una locura.  Me parece que en C se podría hacer lo mismo y ocupar menos lugar.  Un código de 200mil líneas lo considero bastante dificil de mantener.  Si tengo un proyecto tan complejo jamás se me ocurriría hacerlo en ASM.   Demandaría mucho tiempo. 


Cálculos Matemáticos
--------------------------------
Tampoco se me ocurriría intentar hacer en ASM, lo siguiente CALC = SQRT(24.1 * 434.4*10^4) / 2
Ni tampoco hacer en ASM lo siguiente CALC = SQRT ( A * B * C / D - E) donde cada uno sea una variable de diferente tipo.

Estos cálculos solo ejemplificadores, el algoritmo de control de un motor de corriente contínua es bastante mas complejo y lleva aún más cálculos.

Si queremos ser óptimos para estos cálculos, qué hariamos (a mi entender):   calculariamos miembro a miembro, pasando las variables como parámetros a la función que haga la multiplicación, la división, la raíz cuadrada etc.  Bueno, pero esto mismo hace el C18!!!  Pone las variables en el STACK, y llama a las subrutinas que a su vez están en ASM!! Entonces, el resultado es el mismo pero lo expresé en un renglón, no me transpiré ni un dedo, sigo siendo exactamente igual de efectivo en código pero si tengo que agregar 5 operandos más al cálculo es muy simple, en cambio en ensamblador debo tener mucho más cuidado. 

El código generado en C y en ASM es casi idéntico en los 18F y más aún en los PIC24 y dsPIC (en estos dos últimos no lo he comprobado pero no veo porqué desconfiar de la gente de Microchip siendo que decían lo mismo del C18 y el ASM y lo pude comprobar). 


Condiciones Lógicas
------------------------
Cuando hay condiciones lógicas agobiantes, que definen qué rumbo tomar, de nuevo no me veo en ASM codifiando esto.

if ((A > B) & (C > 1)) | ((C == 22) & (I == 24 - J)) ....

Más si encima tu software lleva cientos de condicionales (como me ha pasado en más de una oportunidad).  Incluso cuando a priori, no se conocen todas las condiciones lógicas que serán o como se engancha una con otra.


Interfaces de Hardware más complejas
----------------------------------------
Cuando un periférico es muy complejo nadie, ni Microchip hace librerías en ASM para ellos.  Ej. USB, STACK TCP/IP, Zigbee.


Latencia de Interrupciones
----------------------------------------
Es cierto que en C las interrupciones se atienden unos ciclos de segundo después, debido a los datos que almacena en el stack el compilador.  De todas formas esto si es un problema puede ser modificado a gusto del usuario, de ser necesario.  Lo puedes hacer idénticamente a como te plaza en ASM.  De todas formas, el código generado es casi idéntico al que uno usaria, incluso el grabado del "context saving" es idéntico al que uno haria si fuera a programar en ensamblador (sobre todo si se usan interrupciones low y aparece una interrupción high).


RESUMEN
----------

Programar en C profesionalmente no es de novatos, sacarle el jugo lleva el mismo tiempo que te lleva aprender bien el ASM.  De hecho para sacarle bien el jugo es importantísimo conocer de ASM.   Pero aclaro, conocer de ASM, no significa que debamos codificar en ASM, simplemente conocer cómo codificar para que el ASM sea más óptimo (ej, evitar el bank switching de la memoria ram).

Si te pegas una vuelta por el foro de Microchip, ahí podras combinar tu opinión con la de otros, y tal vez termines opinando como yo o como varios de éste foro.  Te quiero aclarar que yo pensaba igual que tú, pero el trajin con proyectos cada vez mas complejos me hizo cambiar el rumbo. 

En el foro de Microchip he visto gurús reales del firmware, gente que sabe de los mínimos detalles de los pics, que sin embargo no dudan ahora en usar el C18 para los PIC18F o el C30 para los PIC24 y dsPIC.  Siguen leyendo el ASM pero ya no programan en ASM.  Hablo de gente de 20 o 25 años de experiencia programando microcontroladores, los han visto nacer!  Estaban al lado de ellos cuando salieron por primera vez.  Muchos inclusos son consultores independientes que hacen mucho dinero desarrollando.

En países donde los sueldos son más altos, el "costo de desarrollo" es aún mayor y en esos países es donde se observa que usan incluso micros ARM con un SO de tiempo real embebido, porque haciendo algunos pocos cientos de unidades sale lo mismo que un PIC o mejor dicho todo lo demás cuesta lo mismo y el microcontrolador por cantidad, termina saliendo casi igual y la potencia es cientos de veces mayor. 

Sergio, llevándolo a otro plano por un lado dices eso, pero en la PC porqué tambien no eliges programar en ensamblador?  Porqué programas en Visual Basic? acaso el Borland Delphi, el Microsoft Visual C++, el Borland Builder, el Gcc no son más eficientes, más veloces e incluso más potentes en todo sentido? ¿Acaso no generan un código fuente más pequeño? Elige cualquier software potente que te guste y verás que no fue hecho con Visual Basic.  Las PCs tienen memoria, pero la misma cuesta.  La gente que hace juegos para PC en ocasiones se ve obligado a codificar en ASM en secciones de código donde el mismo debe ejecutarse lo más velozmente posible.  Lo mismo la gente que programa drivers.


Intuyo que no te imaginas haciendo en ASM lo que haces con Visual Basic.   Lo mismo poco a poco está pasando con los microcontroladores.  Al tener más RAM y más memoria de programa, es factible entonces que los mismos sean programados en C.  Encima, la gran diferencia es que los PICs y otros microcontroladores, cuentan con la ventaja de décadas de experiencia lo que les permite diseñar una arquitectura ya pensando en el compilador de C y como expuse antes, la diferencia del código generado es poca o nula.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Zaphyrus

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 323
    • Mi blog: Es cuestión de actitud
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #36 en: 27 de Octubre de 2006, 23:40:44 »
Mauricio:

Que gran exposición, creo que es una de las mejores respuestas con gran fundamento y coincido con vos el 100%. Desde los PIC18 en adelante se pensó la arquitectura para ser programada en lenguajes como el C. El tema del uso del stack en los PIC18 y el cambio de arquitectura a partir de los PIC24 en donde se cambio la arquitectura agregando registros se a tenido en cuenta por esta cuestión. Creo que es una locura programar un PIC24 en ASM pero cada uno tiene sus gustos y experiencias como bien decis.
Me han gustado mucho tus respuestas, se ve que acarreas muchos años de experiencia. Yo soy también de la época del DOS y aún me acuerdo las int 21h, que tiempos aquellos en donde las PC no tenían ningún secreto!!! En la secundaria me pasaba horas a la madrugada investigando con el comando DEBUG, incluso hice un vuelco de la BIOS para estudiarla ya que gracias a los libros de PETER NORTON conocías las tripas electrónica de la XT. Todavía la tengo guardada en la baulera junto con una 286 y una 486 con sus monitores de fósforo ambar y blanco.

Carcass:

Gracias por responderme. Por lo que contas tenes gran experiencia y yo solo quería saber que técnicas usaban para programar. A mí no me agrada mucho el assembler porque es un trabajo de hormigas a comparación del C. Por eso admiro a las personas que la tienen muy clara programando en ese lenguaje porque se debe tener gran experiencia, paciencia  y quererlo demasiado.
Con respecto al PampaCPU fue un delirio que empezó con una joda mía y mi compañero de tesis se la nombró a nuestros tutores y la aceptaron. Nos llevó 1 año y 6 meses de investigación y recolección de información y 6 meses en desarrollo, pero como dice el dicho "sarna con gusto no pica" y es lo mismo que opino con los gusto de cada programador con respecto al lenguaje a utilizar.
Con respecto a los lenguajes creo que depende más de las capacidades del programador que del lenguaje, por eso hay veces que las comparaciones son odiosas y no son objetivas. Estos debates son como los debates del recolector de basura usado en Java o C# contra los lenguajes como C++ en donde uno debe administrar la memoria y preocuparse que no haya leak y como siempre depende de la experiencia y la capacidad del programador.
Una vez estuve a punto de hacerme un gran cantidad de macros en assembler que equivaldrían a los for, while, do-while, if, switch-case, etc de C para el ASM del PIC 16 pero al final terminé usando el compilador de Hi-tech porque como dice Mauricio tiene mucha semejanza con el assembler.

Saludos.

Martín
« Última modificación: 28 de Octubre de 2006, 00:03:25 por Zaphyrus »
"¿Lo quiere rápido, barato, o bien hecho? Puede elegir dos de las tres cosas." Arthur C. Clarke.
Mi Proyecto Final de Carrera-Microprocesador RISC de 16 bits en HDL: http://martin.calveira.googlepages.com/home
Mi página web o blog: http://es-cuestion-de-actitud.blogspot.com/
Martín Calveira - Zárate - Argentina

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #37 en: 28 de Octubre de 2006, 07:45:54 »
Maunix:

Excelente explicacion y planteo de todos los temas.
Con respecto al ASM yo lo programo casi exactamente igual que vos, por lo tanto voy a creer lo que decis sobre que programando en C18 casi no hay "codigo de mas" y voy a ir dejando de lado lo que vi en experiencias pasadas donde gente que supuestamente sabia bastante de C (en el trabajo) hacia simples programas como por ejemplo mostrar un contador de 8 digitos en un LCD y ocupaba casi 6KB de Flash!!!!! cuando en ASM se hace en mucho menos de medio K.
Esto y otros ejemplos similares de pequenas operaciones matematicas con terribles
Me pasó lo mismo hace unos años, con un amigo que hizo una rutina para mandar unos bytes por la usart.  Algo que a mi me llevaba 20 instrucciones a él le llevaba como 400.

En ese momento hablamos, él recien empezaba y me dijo "recién empiezo, tal vez se pueda optimizar", también es cierto que era un PIC16 donde el bank switching hace estragos.

Seguí con el ASM porque me surgió un proyecto de producción masiva, donde la competencia lo hacia con un 16F873 y otro hardware accesorio y el nuestro entraba todito en un 16F72 con incluso más funciones.  Fué la época en que realmente profundicé sobre la utilización de los módulos del PIC y su arquitectura.

desperdicios de memoria (aunque claro, en pocos renglones de C) me hicieron convencerme de lo malos que son los copiladores C, cuando quizas deberia haberme preguntado si realmente el problema no era la persona que lo programaba. (No se que copilador usaban).

Los hay aún, pero también se van mejorando día a día.  Coincido en que muchas veces no es el lenguaje sino la persona.  En un día estaba programando con el C18, pero me llevó meses de conocer la herramienta para sacarle jugo. 


Los PIC eran de la familia 18 (18F452 actualmente discontinuado), por lo tanto segun lo que explicaste con el C18 deberia quedar bien optimizado.

Sí, queda bastante optimizado.  De hecho como te comenté el llamar a una multiplicación, si te fijas, luego llama a una rutina 100% en assembler.  Además en el manual del C18 te explica como enlazar C con ASM, con paso de parámetros y devolución de resultados.  Tanto para llamar del C a una función en ASM o desde el ASM llamar a una función en C (pero ojo, el proyecto siempre es en C)

Haber hecho enojar a gran parte del foro no parecia tener sentido, porque respondian sin argumentos, pero finalmente rindió sus frutos ya que tu explicacion basada en un amplio conocimiento del ASM y C hace que mi punto de vista pegue un giro de 165 grados (180 seria mucho jeje) y me ponga cuanto antes a interiorizarme en el C como hice hace casi 2 años cuando me decepcionó.

Jeje, bueno, es de buen sentido común no decantarse 100% por otra opción de un día para el otro sin conocerla profundamente, así que el 165 grados es más que aceptable. 

Creo que si relees algunos posts verás que algunos sí dieron fundamentos, tal vez no tan completos como los que expuse pero de seguro en más de un caso (me consta porque los conozco del foro y sé que sabe de lo que hablan) ha sido por "dar por sentado" ciertas cuestiones que yo me tomé el trabajo de explayar. 

A veces cuando uno habla con alguien a quien respeta técnicamente no le aclara todos los puntos porque los toma por sentado que los conoce.


Agradezco que te hayas tomado el tiempo de escribir una explicacion tan detallada y coherente, ya que si realmente el C no desperdicia codigo en los 18 y 24 que son los que mas uso, podria dejar el ASM solo para los 12 y 16.

Gracias, de hecho me llevó tiempo escribir el texto jeje.  Incluso traté de ser breve pero sin que por ello se quite información importante para explicar mi punto de vista. 

En un programa largo el C18 y C30 bien utilizados tendrá alguna que otra línea de más comparada con el ASM.  Eso siempre ocurrirá con un compilador pero a lo que voy es que si en C18 en 2 líneas escribes un código que termina ocupando 400 words (activando las optimizaciones del compilador, ojo con eso) en ASM puro te llevaría tal vez 380, o 370, pero en un módulo que sería solo para hacer esa rutina y nada más que eso.  Sin pensar en usar stack, reuso de memoria, etc.  Entonces, cuando quieres hacer lo mismo en C18 y en ASM termina siendo casi igual pero en un caso estuviste 2 minutos escribiendo tu código y en el otro una semana.

Por otra parte, si tu software queda con algunos bytecillos más por acá que por allá pero lo hiciste completamente en una semana y encima el PIC sale lo mismo... de seguro te irá mejor en tu empresa.



Por último, en el foro hay miembros que saben mucho y miembros que saben pocos.  Esto no es una logia que solo ingresamos los que saben.  De hecho debe haber miles de personas que sepan muchisimo de pics y que no por eso sean miembros de foro alguno.

Te pido que reconsideres tu trato con algunos, a algunos les cuesta más expresarse que a otros, algunos tienen errores u horrores de ortografía, lo importante es el espíritu de estar unos junto a otros ayudándonos a aprender cada día más de este hermoso mundo de la electrónica, los pics y demas yerbas.

Habrá alguno que tal vez no tienen los conceptos claros y puedan confudir un término con otro, pero de seguro no lo hacen con mala voluntad.  Lo importante es aceptar que todos no somos iguales , también verás que algunos escriben y saben mucho y viceversa.  Hay que tener paciencia que nos debemos tolerar los unos a los otros.

En ocasiones ocurre que algunos que son novatos en un tema, tienen una curiosidad fabulosa que los lleva a veces a descubrir cosas en algún que otro sitio web que uno ni siquiera se pone a buscar, por el hecho de estar algo encasillado en su propio tema.

Saludos y espero sigas por aquí para seguir dicertando sobre estos interesantes temas.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #38 en: 28 de Octubre de 2006, 09:03:47 »
Que mala suerte!! He llegado tarde!! jejeje.

Lo siento pero no me puedo quedar sin dar una mínima opinión.

ASM -> Lo amo.
C     -> Lo adoro.

Como todo el mundo dice depende del tipo de proyecto. Sólo quiero transmitir 2 ideas:

Idea 1:

Es muy fácil hacer cualquier cacharro y otra cosa muy distinta es comercializarlo. Si vendes 2000  o 3000 unidades de un equipo este tiene que ser perfecto. Para llegar a esa perfección tienes que depurar muy bien el programa. Me resulta pácticamente imposible que los programadores de ASM no puntualicen esto. Yo me he pasado semanas y semanas haciendo esto en mis códigos con ASM y no me creo que el resto de la gente no lo halla sufrido. En C se programa + rápido y se depura a la valocidad del rayo.

Idea 2:

Mucha gente habla de economizar el producto pero... no me creo que tengan una buena visión de lo que significa economizar, me explico, yo tengo un equipo y.... la PCB me la hacen unos Gallegos que son la leche, un trabajo excelente y juraría que son los más económicos de toda España. Aquí se ahorra pasta (centimos de Euro).

Las PBA´s me las montan unos de Valencia que tb son muy buenos y económicos (tengo presupuestada la PBA por 8 o 9 empresas y los Valencianos son los mejores). Aquí te ahorras hasta 4 o 5 Euros.

La carátula del equipo... la caja de plástico... El embalaje del equipo... Como está diseñado para que el operario tarde 3 minutos en montarlo en lugar de tardar 6... y una larga lista de factores que influyen. Con esto quiero decir que... 1 Euro más que se pague por un PIC porque el programa no nos cabe en otro más pequeño no es nada. Nosotros como electrónicos tenemos la mente muy cuadrada a ahorrar en PIC, aprobechar las resistencias del pull-up para ahorrartelas en los pulsadores etc. etc. Intentamos ahorrar en unas miserables resistencias que no valen nada y no nos damos cuenta que lo que más encarece el producto son otros factores.

Bueno... perdonad por el rollazo que os he pegao (me hacía ilusión escribir algo  :mrgreen:).


Un saludo desde Alicante!

PD: Todos somos una rica y educada familia de electrónicos. Que cuntinue así SIEMPRE!!
« Última modificación: 25 de Noviembre de 2008, 15:17:44 por Azicuetano »

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #39 en: 28 de Octubre de 2006, 22:26:58 »
Una cosa para que no se malinterprete.
Yo adoro el assembler pero tambien me gusta el C y cualquier otro lenguaje de programacion de mas alto nivel.
Porque? porque le ayuda a uno a pensar en cosas mas grandes y no perder de vista el objetivo macro.
Uno como programador debe tomar el "problema" y dividirlo en una serie de subproblemas de mas fácil solucion PERO... sin perder de vista el concepto del todo.
En assembler uno puede llegar a PERDERSE (y feo) en otros problemas que se generan por las limitaciones del microprocesador o de uno mismo al desarollar el programa.
Cualquier alteracion en el codigo assembler puede llevar tiempo y las consecuencias pueden bastante drásticas si no se atina al error.
EN C es relativamente facil seguir el código y alterarlo, ademas que pequeñas alteraciones al mismo pueden llevar a codigo de máquina completamente diferente.
Por eso es importante mirar el desensamblado para entender que hace el compilador.

Por eso creo que es no solo importante sino que debería ser obligatorio el pasaje por assembler antes de programar en otro lenguaje, mas que nada para hacerse mas "amigo" del procesador y tratar de pensar las rutinas de la mejor manera para tu "amigo".

Saludos:
En otro post pongo acerca de los compiladores C para PIC y DSPIC, hay muchos y son tooodos diferentes.

Marcelo
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #40 en: 28 de Octubre de 2006, 23:08:57 »
 :D creí que éste tema había perecido  :D

Como lo último que ví en el otro fue a BrunoF diciendo que se apegaran al tema y no ví los escritos, creí que lo habían borrado.

Coincido con Sergio, buena la de mover el tema BrunoF.


Este tema es uno de los que me han despertado mayor interés..... ¡y ni es de µicros o proyectos!  :-/

Este es sin duda alguna el foro donde he permanecido más tiempo activo; con todo y faltas de ortografía (en ocaciones "sangran" mis ojos  :D), con las personas que solo ingresan a que les hagas la tarea o proyecto o inclusive la tésis.

Se realizó el comentario a todos los del tema que argumentaban que C es un lenguaje de progamación alto porque como ya se ha expuesto en temas diversos, estoy iniciándome en C y adquirí varios libros; uno de ellos es el de K&R y siendo ellos los creadores de C se me hizo extraño que argumentaran que C es un lenguaje relativamente de bajo nivel.

Bienvenida toda crítica.
Como se argumentó, es inmaduro hacer comentarios ofensivos y más lo es, el criticar sin fundamentos.

Vago en México es una persona que solo se la vive en la calle, no trabaja, no estudia, no es responsable, es un holgazán.

No se tomó ese concepto porque como el foro es de español, existen MUCHOS españoles (y no de España).

Interesante las propuestas sobre ensamblador, principalmente la de no utilizar retardos (nunca lo había escuchado). Comente sobre esto por favor GustavoT.

Realmente interesante es que un 16F873 a 60% de su capacidad es un "ente que dé miedo". Por favor comente mas al respecto Sergio. Si le es posible, proporcione información sobre su participación en ese certámen.
Colocó un enlace a ese concurso pero los que no pudimos asistir ( :D) quisiéramos saber más sobre los resultados.

Aunque ya tiene tiempo en el foro, bienvenido Sergio.
Sin duda alguna ha impactado con su presentación  :D.


Considero que soy "de malo a normal" para ensamblador pero siempre me he preocupado por el mejor aprovechamiento de los recursos, aún cuando me he movido a Basic (que es el que uso) trato de no saturar al µicro con información innecesaria.
Las rutinas que tienen aplicación dentro del programa, se incluyen para optimizar el mismo.

A Mauricio (Maunix) no lo conozco pero he leido sus respuestas en algunos temas y, por medio de las mismas, me he percatado que sí sabe de lo que está hablando.
Además alguna vez me explicó la idea de usar los Lath's del µicro y desde entonces a la fecha.

Igual para BrunoF, Marmatar Charly29 y el causante de que movieran el tema :Sergio  :D (algunos más, no recuerdo quiénes).

Y sigo en la postura:
C para proyectos que tengan un estricto tiempo de realización (Basic en mi caso.... :oops:) y ensamblador para los que requieren mayor precisión y optimización de recursos.

PD:
Y el comentario de los argentinos que son muy arrogantes....... mejor ni le seguimos porque en México existen infinidad de proverbios populares que...... mejor hasta aquí la dejamos  :D.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado felipito

  • PIC10
  • *
  • Mensajes: 19
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #41 en: 29 de Octubre de 2006, 10:50:35 »
En un comentario anterior dice Carcass que el 18F452 està descontinuado, cual a sido su causa ? y por cual es conveniente cambiarlo ? vengo del 16F877A, luego el 18F452 y ahora ??
Trabajo con el C y assembler, cuando tengo poco tiempo utilizo el C diseñar es màs ràpido, pero me agrada màs el Assembler permite manejar detalles y precisiones en el diseño aunque requiere màs tiempo.
             Saludos
« Última modificación: 29 de Octubre de 2006, 10:54:46 por felipito »

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #42 en: 29 de Octubre de 2006, 16:32:59 »
Raro que esté descontinuado.

Acabo de pedir muestras y no dice nada sobre eso (en la sección de muestras).

Del que no dan nada es del 16F873, dan del 16F873A.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #43 en: 29 de Octubre de 2006, 21:56:08 »
En un comentario anterior dice Carcass que el 18F452 està descontinuado, cual a sido su causa ? y por cual es conveniente cambiarlo ? vengo del 16F877A, luego el 18F452 y ahora ??
Trabajo con el C y assembler, cuando tengo poco tiempo utilizo el C diseñar es màs ràpido, pero me agrada màs el Assembler permite manejar detalles y precisiones en el diseño aunque requiere màs tiempo.
             Saludos

No está discontinuado, pero te sugieren usar el 18F4520.  Es casi idéntico, con oscilador interno y algunas cosillas más (CCP multiplexado por ej.) que lo hacen de bajo consumo, varios canales A/D.  La migración de uno a otro es muy veloz. 

La serie 17 es para la que ya no hacen nada, pero para el resto están aún muy vivos.

El punto es que Microchip usa una estrategia muy ingeniosa, te venden un 18F4520 más barato que el 18F452 y encima tiene más cosas... sería poco probable que uses el 18F452 siendo que el reemplazo casi directo es el 18F4520 y sale un 10% menos.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: Tema Dividido. ¿ASM Vs C?
« Respuesta #44 en: 30 de Octubre de 2006, 02:55:20 »
¿Oscilador interno para un PIC de la serie 18FXXX?

Haber sabido eso antes de pedir las muestras  :D
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee