Autor Tema: Atmel vs pic por que???  (Leído 108189 veces)

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

Desconectado MiCrOtRoNiC

  • PIC18
  • ****
  • Mensajes: 271
Re: Atmel vs pic por que???
« Respuesta #105 en: 18 de Febrero de 2009, 20:45:05 »
atmel no limita como en los pic el acceso a la RAM... ademas acuerdense que el AVR posee 32 registros directos y el pic solo el W......de todas maneras creo que es bueno especializarse en algo simpre dado que si se nos presenta un inconveninete podamos resolver.....lo que si es cierto es que hay que tener las manos abiertas a nuevas tecnologias..pero simpre es emjor especializarse en algo

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Atmel vs pic por que???
« Respuesta #106 en: 18 de Febrero de 2009, 21:12:24 »
Hola gracias x responder, estuve chusmeando la serie MegaAVR que es basicamente la que reemplazaria al FreeScale que estoy usando, a favor del AVR ( amen de la arquitectura ) es que tiene 4 K de RAM y el AW solo 2K, la contra es el precio, un AW se puede conseguir por casi 3 dolares...

Saludos !

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Atmel vs pic por que???
« Respuesta #107 en: 18 de Febrero de 2009, 21:14:08 »
lo de los 32 registros de AVR , realmente no los entiendo mucho , será porque empece con los Pic.

Se me facilita más con 1 solo registro.

Porque Eso de los registros cuando son muchos se me hace como el 8051 xD de empezar a cargar acumulador A y B xD y para mi es tedioso eso xD.

Lo que no me gusta de los pics es lo que comentan , la paginación uhh que JOda , Aleluya pic18F  :mrgreen:

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Atmel vs pic por que???
« Respuesta #108 en: 18 de Febrero de 2009, 21:20:19 »
Hola lo de los registros pude resultar mas complicado pero a la larga resulta siempre mas beneficioso, ejemplo cuando se trabaja en C los parametros de las funciones y las variables locales son manejadas desde el Stack, cuando una arquitectura tiene muchos registros, el compilador puede usar estos registros como almacenamiento temporal, este tipo de operaciones normalmente son mucho mas rapidas que manejar datos desde el Stack. Otro uso frecuente es contanenar dos registros para realizar operaciones a 16 o 32 bits de manera mas eficiente. En conclusion tener mas registros normalmente trae aparejado mejor y mas rapido código generado por el compilador.

Saludos !

Desconectado MiCrOtRoNiC

  • PIC18
  • ****
  • Mensajes: 271
Re: Atmel vs pic por que???
« Respuesta #109 en: 18 de Febrero de 2009, 21:28:30 »
exactamente amigo richi exclusivamente son los registros X(H,L),Y(H,L),Z(H,L)...

cito del datasheet..

Los AVR utilizan la Arquitectura Harvard, con el bus de datos y el bus de memorias
separados. Mientras una instrucción se ejecuta, la próxima instrucción esta lista para
ser ejecutada en la memoria de programa. Las instrucciones se ejecutan en cada ciclo
de reloj. La memoria de programa esta en la memoria Flash. Al ejecutarse una
operación en la ALU, los dos operandos están a la salida del archivo de registros y el
resultado se almacena al fondo del archivo de registros en un solo ciclo de reloj. Seis de
los 32 registros se pueden usar como registros apuntadores de direccionamiento
indirecto a 16 bits para datos almacenados en memoria, siendo los registros de 16 bits
X, Y y Z. Después de realizar una operación aritmética el Registro de Estado actualiza
la información acerca del resultado de la operación.
« Última modificación: 18 de Febrero de 2009, 21:31:06 por MiCrOtRoNiC »

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Atmel vs pic por que???
« Respuesta #110 en: 18 de Febrero de 2009, 21:50:53 »
Hola lo de los registros pude resultar mas complicado pero a la larga resulta siempre mas beneficioso, ejemplo cuando se trabaja en C los parametros de las funciones y las variables locales son manejadas desde el Stack, cuando una arquitectura tiene muchos registros, el compilador puede usar estos registros como almacenamiento temporal, este tipo de operaciones normalmente son mucho mas rapidas que manejar datos desde el Stack. Otro uso frecuente es contanenar dos registros para realizar operaciones a 16 o 32 bits de manera mas eficiente. En conclusion tener mas registros normalmente trae aparejado mejor y mas rapido código generado por el compilador.

Saludos !

Totalmente de acuerdo , en mi post de arriba xD a lo que va mi comentario no es hacia " C " sino en Assemblie , alto nivel si me relaja la vida  :D


Desconectado Bar-Tolo

  • PIC10
  • *
  • Mensajes: 21
    • El Mundo de los Micros.
Re: Atmel vs pic por que???
« Respuesta #111 en: 19 de Febrero de 2009, 09:39:03 »
Hola lo de los registros pude resultar mas complicado pero a la larga resulta siempre mas beneficioso, ejemplo cuando se trabaja en C los parametros de las funciones y las variables locales son manejadas desde el Stack, cuando una arquitectura tiene muchos registros, el compilador puede usar estos registros como almacenamiento temporal, este tipo de operaciones normalmente son mucho mas rapidas que manejar datos desde el Stack. Otro uso frecuente es contanenar dos registros para realizar operaciones a 16 o 32 bits de manera mas eficiente. En conclusion tener mas registros normalmente trae aparejado mejor y mas rapido código generado por el compilador.

Saludos !

Hola Amigos.
       El mejor de los copiladores puede generar este tipo de problema.(un retoque en asm nos permite solucionarlo).Creo que las ultimas generaciones de programadores de uC estan peliados a muerte con ASM y solo aprenden lenguajes de "Alto nivel".Para mi siempre fue placentero poder encontrar algun error o encontrar una solucion a una rutina, solo con la vista en el hex y en mi mente rodando lo que interpretaria el micro.Ya se eso es perdida de tiempo me dijeron ya mil veces y ademas es muy dificil me repiten.
      Es mas facil C, Basic o Pascal. El otro dia rode un codigo en Pascal de un ejemplo usando el MikroPascal y el resultado fue que estaba repitiendo dos veces una misma rutina de retardo.Tambien encontre demaciado codigo basura como le suelen llamar a esas fallas de un copilador.
     No quiero decir que ASM sea el camino a seguir ni mucho menos, pero si lo dominas y dominas el micro que trabajas, te dejara hacer muchas cosas mas que las que tu puedas lograr.Lenguajes de alto nivel solo son unos individuos que hacen lo que nos da flojera hacer a nosotros.Solo tengan algo en mente.Escribimos en C y luego para copilar tenemos que morir en ASM, bueno pero el entorno de desarollo no nosotros.No se si me explico amigos pero si no puedes lograr nada sin la ayuda de uno de estos Lenguajes de alto nivel para comunicarte con tus micros, te falto algo por aprender.

Un Saludo.


Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 499
    • Software Electronica Microncontroladores
Re: Atmel vs pic por que???
« Respuesta #112 en: 19 de Febrero de 2009, 10:37:39 »
  Tienes razon bar-tolo  :D, el asm siempre fue mi lengua materna.  :) en los pic y el 8085

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Atmel vs pic por que???
« Respuesta #113 en: 19 de Febrero de 2009, 10:39:25 »
Hola, Bar-Tolo, coincido en parte con vos, es altamente recomendable conocer la arquitectura del micro para sacarle provecho, pero no uso C porque me da flojera, sino que soy mucho mas productivo y tardo mucho menos que escribirlo en ASM plano. Por otra parte a muchas de las cosas que hago son trabajos y el código no es mio, entonces lo tengo que dejar bien escrito para que exista la posibilidad que otro programador tome la posta. Por ultimo trata de escribir lo mas ANSI C que se pueda sin abusar de las extensiones de cada compilador eso me permite tener funciones que sean altamente portables y las reuso en diferentes micros/arquitecturas. Eso si las funciones que necesitan alta perfomance las codifico directamente en ASM plano sea el micro que sea.

Saludos !

Desconectado WillyP

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 280
    • Sitiónica
Re: Atmel vs pic por que???
« Respuesta #114 en: 19 de Febrero de 2009, 16:56:42 »
Estuve leyendo el hilo y sobre los últimos post coincido tanto con Bar-Tolo y RICHI777.
Doy mi opinión haciendo un poco de historia para que se interprete la idea, muchos nos formamos antes de entrar con los microcontroladores con electrónica digital y realizamos innumerables diseños combinando puertas lógicas, Flip flop D, JK, contadores, registros serie paralelo, multiplexores, comparadores, etc, etc y cada uno era un chip individual, había que combinar cada uno de acuerdo a la idea del diseño y llegamos a pensar en forma “digital”. Cuando nos metimos con los micros y el ASM fue la panacea de la facilidad y la simplicidad. Con solo escribir instrucciones y poder mover, rotar, sumar, etc, era increíblemente maravilloso y  fácil. Muchos se inician directamente con los micros y C , como dice Bar-Tolo, entonces al ASM lo llegan a ver como algo anticuado, incluso obsoleto. Creo que es sólo por falta de conocimiento de que se trata y no haber tenido los pasos anteriores.

Por otro lado, tampoco creo que hay que irse a los extremos de defender uno u otro, todo es muy flexible y se puede manejar de la forma que nos parezca más cómoda. Por ejemplo en un compilador C podemos escribir un programa 100 % en este lenguaje, o 50% en C y 50% en asm, o 20% en C y 80% en asm, o como se nos ocurra hacerlo, todo es muy flexible y nosotros lo manejamos como nos parezca mejor. Quiero decir con esto que no son los extremos de uno u otro.

Lo principal es tener un buen esqueleto en C y las llamadas a rutinas en cualquier lenguaje C ó ASM. De esta forma también es totalmente portable y entendible para terceros. Por ejemplo hay muchas librerías nativas del compilador (por ejemplo las de retardos en C18) escritas en ASM y no creo que a nadie le moleste esto, o le preste atención, todos sabemos que se trata de una rutina de retardo.

Por último el tema de escribir ASM que lleva mucho más tiempo que en C es relativo, el que lo maneja bien escribe tan rápido como en C y con un control a nivel instrucción que es muy importante, si ya lleva algunos años en ASM seguramente tendrá una colección inmensa de rutinas de todo tipo y solo es cortar, pegar y cambiar algún parámetro.

Bueno, escribí demasiado, aclaro que yo utilizo ambos C y ASM, era una opinión amigos.-

Saludos.-           

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: Atmel vs pic por que???
« Respuesta #115 en: 03 de Marzo de 2009, 01:59:02 »
Hay muchas procesos que hay en asm y no lo puede hacer el C directamente, lo mejor es combinar el asm com el C.
Atmega tiene varias ventajas sobre los pis asta la serie 18; te cuesta menos codigo par hacer operaciones matematicas y es mas rapido yo lo comprobe con un atmega8 y un pic18f2550 para operaciones con float al atmega8 le cuesta aprox 48% nemos codigo y lo ejecuta 50% mas rapido a la misma frecuencia del nucleo.

Desconectado FuYiVape

  • PIC12
  • **
  • Mensajes: 69
    • Electronica y Sistemas
Re: Atmel vs pic por que???
« Respuesta #116 en: 14 de Abril de 2009, 11:14:53 »
Haciendo un poco de referencia sobre lo que dice Bar-Tolo y RICHI777
Les doy la derecha en gran parte. Pero tambien diciento en la conclusion.
Estoy totalmente de acuerdo en que no se puede esperar los mismos resultados compilando lenguajes como Basic o Pascal, pero les puedo asegurar que si se programa bien en C y cuando digo bien me refiero a respetar la filosofia del lenguaje, los resultados son excelentes!
como dije antes, he programado en assembler gran parte de vida como programador y no comence a programar en C (y solo C) hasta que no vi que los compiladores lograban hacercarce lo mejor posible al assembler.
Ultimamente, los compiladores en C son excelentes!
He trabajado con Keil, SDCC y AVRGCC y les puedo asegurar que los resultados fueron maravillosos.
Claro! hay que esmerarse y codificar C pensando en el compilador. Pensando en como el compilador resolvera el codigo en assembler. Y para eso, hay saber assembler! ;)

      Es mas facil C, Basic o Pascal. El otro dia rode un codigo en Pascal de un ejemplo usando el MikroPascal y el resultado fue que estaba repitiendo dos veces una misma rutina de retardo.Tambien encontre demaciado codigo basura como le suelen llamar a esas fallas de un copilador.

Esa falla no deberia suceder. Este tipo de resultados surgen cuando la rutina esta escrita como una macro. si la rutina fuese una funcion, eso no sucede. Si aun asi duplica. Es probable que se tenga que configurar el compilador  para que optimize. Y si persiste el resultado... entonces el compilador no sirve.
Muchas veces, sucede que no se optimiza el compilador. Esto hace que el mismo, genere codigo a lo pavote.
Pero leyendo las directivas del compilador, se van a dar cuenta que se puede lograr muy buen codigo assembler.
El codigo basura al que te referis, es probablemente a la utilizacion de forma excesiva de los registros del micro o al mecanismo de guardar los registros en la pila cada ves que se llama a una funcion. Eso tambien lo podes determinar en la optimizacion del compilador. Aunque no lo recomiendo a menos que sea extrictamente necesario.

Pueden hacer la prueba compilando un simple codigo sin optimizar y luego optimizandolo.

Esta bien que las ultimas generaciones se vuelquen de lleno a lenguajes de alto nivel. Hoy en dia los lenguajes han crecido de forma abismal. (Tambien hay mucha basura como lenguajes)
Pero esta mal que ni siquiera le hechen un vistazo al assembler. Es mas! los que alguna vez programamos en assembler, y ahora lo hacemos en alto nivel, corremos com muuuuuuuucha ventaja sobre los nuevos programadores.
Lo que tiene de bueno el assembler, es que te enseña a ser ordenado y prolijo. Eso uno lo traslada al codigo de alto nivel dando como resultado un codigo eficiente, rapido y estable.

Los que tratan de iniciarse en C, se confunden mucho, a mi me paso. Pero si le prestan atencion un poco, se van a dar cuenta que el C es casi como el assembler. Ya que su logica se basa en punteros y direcciones. Entonces, si uno respeta eso, asignando punteros como corresponde y manipulando datos en base a estos y a direcciones, el resultado es practicamente el mismo.
fijense esto: Todas las funciones de manipulacion de datos del C no son propias del lenguaje. Son librerias que expandieron al lenguaje y que luego dada su utilizacion, se estandarizaron dentro del paquete del compilador.
El C basicamente es tipo de datos, punteros a estos y direcciones. El resto son rutinas que facilitan la cosa. Que podes usarlas o no. Tambien uno puede hacerse su propia funcion sprinf.
Cuando uno escribe #include string.h le esta diciendo al compilador que agregue esa libreria porque el lenguaje no tiene la funcion sprintf de forma nativa. Que es lo mismo para el assembler. si existiese una libreria estandard para manipulacion de strings.

Mi conclusion?
Hay que aprender assembler si si va a programar este tipo de plataformas
Pero luego hay que desarrollar en C.

Saludos.

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 499
    • Software Electronica Microncontroladores
Re: Atmel vs pic por que???
« Respuesta #117 en: 14 de Abril de 2009, 15:36:48 »


    Hola fujiyape, tu conclusión es excelente, no cabe duda que estas manejando la programación de micros con muy buenos fundamentos. Estas ideas que expones me daban vueltas en la cabeza desde hace tiempo pero ahora no me cabe duda. Menos mal yo empecé por el camino correcto, primero y por mucho tiempo asm y luego C. También se puede hacer al revés pero los resultados no creo que sean buenos. Aun así hay gente que le tiene alergia al ensamblador, pero lo mejor es curarse de esos males y empezar lo más pronto posible.

Saludos

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Atmel vs pic por que???
« Respuesta #118 en: 14 de Abril de 2009, 17:43:05 »
Hola, algunas cuestiones,
Citar
Estoy totalmente de acuerdo en que no se puede esperar los mismos resultados compilando lenguajes como Basic o Pascal, pero les puedo asegurar que si se programa bien en C y cuando digo bien me refiero a respetar la filosofia del lenguaje, los resultados son excelentes!

En cierto lo de escribir bien, pero yo no tiraria abajo al Pascal, según el estandart  en Pascal por convenio de llamadas, es la propia función la que debe limpiar el stack, en C, esa tarea es del llamador. Por consigueinte respetando el standart los programas en Pacal en cuestion de fiunciones son mas compactos y más rapidos. Hoy por hoy muchos compiladores usan un mix de los dos lenguajes para obtener el mayor benceficio de ambos.

Citar
fijense esto: Todas las funciones de manipulacion de datos del C no son propias del lenguaje. Son librerias que expandieron al lenguaje y que luego dada su utilizacion, se estandarizaron dentro del paquete del compilador.
En (casi)todos los lenguajes, pongo casi porque desconozco el "todo" como para hacer dicha afirmación, existe el concepto de función, procedimiento o rutina, después de lo que haga es tarea de la implementación, en el caso de C se llama RTL ( Real Time library ) en C++ se llama STL ( standart template library ) y asi. No conozco ningun lenguaje que tenga funciones como palabra reservada o digamos propia de la semantica del lenguaje.

Citar
Cuando uno escribe #include string.h le esta diciendo al compilador que agregue esa libreria porque el lenguaje no tiene la funcion sprintf de forma nativa.

Eso no es asi, el compilador basicamente consiste en dos procesos, el primero llamado preprocesamiento, que es tomar todos los archivos H y el fuente en cuestion y pegarlos en un solo archivo donde todas las macros son remplazadas por su definicion, luego toma este gran archivo y traduce los "statments" en su correspondiente assembler. La inclusión de los archivos H es para instruir al compilador sobre funciones que son externas al modulo para que el mismo pueda saber como son los paramentros y cuantos y cual es el retorno de la misma. Es tarea del linker resolver estas funciones externas que pueden estar en libs.

Por lo demas conicido totalmente con vos, conociendo la arquitectura del micro en cuestion te permite observar y modificar ciertas partes de tu programa para que sea mas eficiente.

Saludos !


 

Desconectado FuYiVape

  • PIC12
  • **
  • Mensajes: 69
    • Electronica y Sistemas
Re: Atmel vs pic por que???
« Respuesta #119 en: 15 de Abril de 2009, 13:25:10 »
No estoy desmereciendo ningun lenguaje RICHI777!
Y mucho menos cuando, en su medida, de alguna forma me dieron de comer.
He programado y programo cualquier tipo de lenguaje. Assembler, Basic, QBasic, Pascal, Clipper, Clarion, Fortran, ADA, Logo, Lisp, Pyton, PHP, Visual basic, Delphi (Object Pascal), C, C++, PowerBuilder, SQL e inclusive basuras de reciente aparicion...
En infinidad de plataformas Sinclair 1000, ZX Spectrum, Commodore, PC para sus respectivos micros y Microcontroladores varios 8081, 8085, 8052 y derivados PIC, AVR y ahora estoy entroduciendome en los ARM.
Entonces, no me puedo dar el lujo arrogante en desmerecer a ninguno de ellos inclusive las "maravillosas" basuras actuales.

Lo que trato de decir, es que los resultados no son los mismo, y en tus citas, de alguna forma me decis esos, que es mas o menos lo mismo que trate de decir.

convengamos que todo compilador debe terminar en assembler. Entonces, podemos decir que puedo saber si un compilador es bueno o no segun el resultado que produzca en el assembler generado. Claro! esto solo es posible si sabemos y entedemos de assembler.

Cuando decis:
Citar
Eso no es asi.....
En parte tenes razon. ya que con solo incluir el header no basta. Obviamente necesitamos tambien, decirle al linker que incluya la libreria.
Pero cuando decis:
Citar
...el compilador basicamente consiste en dos procesos...
Esto no es asi.
El preprocessor tiene como mision analizar la semantica y resolver las macros, declaraciones etc. para que luego el compilador
se encargue de forma eficiente convertir todo a assembler para que luego y por ultimo, el Linker enlace todos los modulos compilados y traducidos al assembler de forma correcta.
Entonces, podemos decir que son tres las partes PREPROCESSOR, COMPILADOR Y LINKER.
Existen directivas para el preprocessor como tambien para el compilador y tambien hay indicadores para el linker.
las directivas las podemos inlcuir en el codigo directamente pero los indicadores para el linker no.
Si hay algo que destaca al C por sobre los demas lenguajes, es el preprocessor. Esto hace que el lunguaje se el mas eficiente en la historia y nada podra superarlo. ACLARO... NO SOY FANATICO DEL C! pero es MARAVILLOSO!!

Para la mayoria de los lenguajes de alto nivel, el compilador fue escrito en C. Esto te da una pauta de como esta hecho el C.

Cuando digo que las librerias no son nativas del lenguaje, es exactamente eso.
El lenguaje se compone de
-tipos
-operadores
-expresiones
-sentencias.
Cuando el C nacio, nacio con esto. a medida que fueron necesitando funcionalidad, fueron apareciendo las librerias.
Pero dentro de las librerias, solo hay codigo nativo del lenguaje agrupado de tal forma que le dan la funcionalidad esperada.

Un lenguaje de programacion no es considerado como tal si no posee las herramientas minimas e indispensable para la manipulacion de datos.
Yo no puedo sacar al mercado un lenguaje que solo posee operadores, expresiones, etc. porque obviamente que ningun programador va a intersarle ya que no le resuelve absolutamente nada.
Pero si le agrego librerias para manipulacion de strings, entradas y salidas, operadores matematicos algebraicos cientificos, manimpulacion de numeros enteros flotantes y demas. Entonces puede existir algun interes de adopcion por algun programador.
El exito del lenguaje estará definitivamente en el compilador. porque ahi esta el alma del mismo.
si el compilador es eficiente y genera un codigo assembler rapido y estable. entonces habra mas de un programador que lo adopte. Pero el programador tiene que tener concimientos precisos en assembler para poder evaluar el compilador.

Citar
En (casi)todos los lenguajes, pongo casi porque desconozco el "todo" como para hacer dicha afirmación, existe el concepto de función, procedimiento o rutina, después de lo que haga es tarea de la implementación, en el caso de C se llama RTL ( Real Time library ) en C++ se llama STL ( standart template library ) y asi. No conozco ningun lenguaje que tenga funciones como palabra reservada o digamos propia de la semantica del lenguaje.

Insisto, para codificar una libreria tenes que hacerlo basandote en el lenguaje utilizado sus herramientas nativas.
Por ejemplo, no podes codificar una funcion que dependa de otra funcion en otra libreria y querer que esta nueva funcion sea considerada libreria estandard. ya que que tiene una depencia inevitable.
Pero si codificas esa misma funcion solo con el lenguaje, entonces podes pretender un estandard.
Lo que trato de decir es que las librerias de funciones no son nativas del lenguaje.
y podes escribir codigo sin ni siquiera agregar un minimo #include de estas librerias.
en mi caso, por ejemplo, trato de no usar la funcion sprintf. es muy grande y lenta para lo que necesito en la mayoria de los casos.
si quiero escribir un texto en un display, lo hago manipulando los datos con las herramientas nativas del lenguaje. Arrays, punteros, while, for, switch, etc. Y logro un codigo muy reducido y rapido.
Pero si en algun momento inevitablemte la tengo que usar, bueno a partir de ahi la uso siempre porque ya se encuentra en memoria entonces es ridiculo que no la use. Se entiende?

De todos modos, en este punto, estamos muy aljados del hilo objeto de este post. habria que habrir un post sobre "ASSEMBLER O ALTO NIVEL?" y recuperar el hilo de este.

Saludos!