ASM, basic , C y otros

Fer...

Te digo voy empezando....
se supone que asi es para cualquier Pic... lo seleccionas y el compilador hace lo suyo... ya ya es todo...
te genera el archivo .HEX y al simulador... eso es todo... segun yo no hay mas... claro que entre mas complejo aumentan las instrucciones como cualquier lenguaje...

saludos...

Agrego:
cabe aclarar que no hay archivos .inc nada de nada...
 
Última edición:
como ya dijeron aca hay mas que nada hoobystas
...
un PROFESIONAL no se la va a pasar diseñando manejo de reles o displays simples

Es que eso se hace a menudo, pero para manejar un display hay que concentrarse en que querés mostrar y como querés que se vea, no en generar un pulso de 3.25 us para activar una función del display...ni mucho menos estar cargando registros de direccionamiento de bloques de memoria cuando solo querés cargar un valor en una variable y hacer A=10!!!

Y no hay ningún problema en que haya hobbystas...de hecho, es mejor, por que no es gente entrenada para andar desculando que corno hace una instrucción que debe rotar 3 bits a la derecha pasando por el bit de carry en el registro de estado, sino que solo hace algo del tipo A>>3 y listo... en cualquier uC o uProcesador! en lugar de aprender una instrucción que varía de nombre y estructura de operación para cada CPU que hay en el planeta.

Lo malo es la gente que no tiene sentido común y pretende usar el assembler por que los que usan assembler son re-machos y los que programan en lenguajes de alto nivel (y meten assembler en contados casos, desde el mismo código) son unas mariquitas que se la comen :eek:...digo, mas o menos traducido al Argentino básico :D

me pareceria interesante saber las diferencias entre C y basic, algunas ya las han puesto:

Primero hay que aclarar de que BASIC estamos hablando, pero supongamos que es para los uControladores, y aclaro que para este caso SI HAY QUE CONOCER LOS REGISTROS DEL CHIP, por que son los que fijan alguna operaciones que no necesariamente pueden enmascararse detrás de una función o macro.

BASIC

  1. Sintaxis bastante simple.
  2. Imposibilidad de usar punteros.
  3. Imposibilidad de mezclar con assembler (esto es hasta donde me acuerdo).
  4. No es estándard en los tipos de datos.
  5. Permite manejar todos los periféricos on-chip.
  6. Estructuras de código en funciones y subrutinas.
C

  1. Sintaxis medio complicada hasta que se aprende.
  2. Uso completo de punteros, incluso punteros a funciones.
  3. Admite la inclusión de bloques en assembler dentro del código C.
  4. Tiene los tipos de datos y otras muchísimas cosas más estandarizadas por ANSI.
  5. Permite manejar todos los periféricos on-chip.
  6. Estructuras de código solo en funciones.
Seguro que me olvido de muchas cosas, pero para elegir uno u otro, creo que es suficiente.
 
Última edición:
Imposibilidad de mezclar con assembler (esto es hasta donde me acuerdo).

Aqui creo que si puedes estar equivocado...

Desde TurboBAsic o QuickBasic incluso en picbasic pro se pueden incluir librerias en ASM
No de igual forma que C pero si es posible....

Alguien se anima con un codigo en C, para dejar la comparacion en el tema...

Saludos
 
Aqui creo que si puedes estar equivocado...

Desde TurboBAsic o QuickBasic incluso en picbasic pro se pueden incluir librerias en ASM
No de igual forma que C pero si es posible....

See...es probable, por que la verdad es que no me acuerdo...
Creo que solo en MikroBasic podías incluir el assembler junto con el código BASIC, pero no me acuerdo que lío había con el registro que cambia el mapa de registros del PIC...
 
...

Alguien se anima con un codigo en C, para dejar la comparacion en el tema...

Saludos

Encender un led no creo que aporte mucho, creo que en los 3 casos es muy simple de hacerlo.

Seria bueno comparar por ej. algoritmos, o por tirar algo por ej. como harias en los 3 lenguajes para recibir un dato por puerto serie y escribirlo en un display 7 segmentos, ahi si se verian cosas interesantes.
 
Va el codigo para poner algo en un lcd en picbasicpro

Código:
@ device xt_osc 
define osc 4 
DEFINE LCD_DREG PORTC 
DEFINE LCD_DBIT 4     
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 1    
DEFINE LCD_EREG PORTC 
DEFINE LCD_EBIT 2     

LCDOUT $FE, 1
LCDOUT $FE, 1, "Lubeck"

Lo de serie todavia no se jejejej... denme chance tengo 2 dias de experiencia..:LOL:
pero creo que las instrucciones son SERIN y SEROUT no creo que tampoco sea dificil... para USB es USBIN y USBOUT en este ultimo creo que si tiene que ser los pic 18f2550 f18f4550

Ojo... no quiero que nadie cambie su parecer con respecto a su compilador preferido... nada mas intento al igual que fer mostremos los algoritmos....y los beneficios/desventajas de cada uno...

Es que esto es como si yo fuera a una Agencia de vehiculos y pidiera un vehiculo... el vendedor me va ofrecer por ejemplo un Ferrari y me va a insistir e insistir e insistir hasta que le diga... oye pero lo quiero para el campo.... entonce me va a decir que un todoterreno.... y si le digo que no hay caminos me va a decir que una motocross... asi esta esto... no hay mas...
 
Última edición:
Bueno ahi le pasas el trapo en facilidad al C porque ya tenes las funciones cocinadas, en C la tenes que hacer vos o usar funciones ya hechas por otros.

EN --> P3.7 (puerto 3, pin 7)
RW --> P3.6 (puerto 3, pin 6)
RS --> P3.5 (puerto 3, pin 5)

Datos al LCD --> P2 (puerto 2, pines del 0 al 7)

En un 8051 con C la cosa seria asi:

Código:
#include <reg51.h>

//--------------------------------------
sbit EN=P3 ^ 7;
sbit RW=P3 ^ 6;
sbit RS=P3 ^ 5;
sbit P2_7=P2 ^ 7;
//---------------------------------------


unsigned char Lcdwait() // Espera a q el display este disponible y devuelve la direccion actual de la memoria
{	 
	 unsigned char aux;
	 RS=0;RW=1;
	 while(P2_7==1); // Espero
	 aux=P2;
	 EN=0;RW=0;
	 P2=0x00;//Funciona como salida
	 return aux;
}

void Lcddata(unsigned char dato,unsigned char flag)	  // Con Flag=0 Datos 
{
													  // Con Flag=1:
	if (!flag)										  // Dato + 0x80 => direccion
		RS=1;										  // Dato=1 borro pantalla (DB0=1)
	else											  // Dato=2 o 3 => Cursor a Home
		{RS=0;}							              // Db2=1 => Configuro cursor: Db1=1 => derecha, con Db0 => el display cambia
     												  // Db3=1 => Db2=1 Lcd on, Db1=1 cursor on, Db0=1 el cursor parpadea
	P2=dato;										  // Db4=1 => Db3=1 display shift, Db3=0 cursor move; Db2=1 shift right
	EN=1;EN=0;										  // Db5=1 => Db4=1 datos de 8 bits, Db4=0 datos de 4 bits; Db3=1 2 filas; Db2=1 letras de 5x10, Db2=0 letras de 5x8
	Lcdwait();
}

void Lcdinit()	// Inicia el display
{
	Lcddata(0x38,1); // Modo de 8 bits y caracteres de 5x8
	Lcddata(0x38,1); // Habilito 2da linea
	Lcddata(0x0C,1); // Display on, cursor off, cursor blinking off
	Lcddata(0x06,1); // Cursor hacia la derecha
	Lcddata(0x01,1); // Borrar pantalla		
}

void print(char texto[],unsigned char clear)   // Escribe texto en pantalla
{
	unsigned char cont=0,aux,dir;
	aux=strlen(texto)-1;	
	
	if (clear)
		Lcddata(0x01,1); // Borrar pantalla	
	

	while (cont<=aux)
		{
		Lcddata(texto[cont],0);	
		dir=Lcdwait();
		if (dir==0x10)
			Lcddata(0xC0,1);
		if (dir>=0x50)
			Lcddata(0x80,1);
		cont++;
		}
}


void main ()
{ 
	P3&=0x1B;// Pongo en 0 b7,b6,b5,b2
	Lcdinit();

	 print("Texto a mostrar...",0)

	while(1);
}

En este caso uso el bit del LCD que indica que esta ocupado, pero tambien habia hecho un codigo con una rutina de espera usando for para no tener que usar un puerto para ese bit. Si uno tuviera que hacerlo en assembler el codigo seria bastante similar.

Tene en cuenta nuevamente que las funciones Lcdinit(), print() y Lcddata() las tuve que hacer yo, ahi esta lo que mencione en su momento en tener que reinventar la rueda para hacer lo mismo, pero en este caso sucede entre C y Basic un lenguaje de mayor nivel; este tipo de cosas es muy comun en assembler, fijense que nunca me preocupo por las pilas, o por donde van a parar las variables y ni que banco uso (en el 8051 uno tiene 4 bancos de 8 registros que funcionan como registros tipo ax,bx, etc).
 
Última edición:
Bueno, puedo aportar mi granito de arena desde lo que sé, que es C para arduinos.

Por ejemplo, para mostrar lo que se recibe en el puerto serie en un lcd, sería así:

Código:
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
	lcd.begin(16, 2);
	Serial.begin(9600);
}

void loop()
{

  if (Serial.available()) {

    delay(100);

    lcd.clear();

    while (Serial.available() > 0) {

      lcd.write(Serial.read());
    }
  }
}


Y para hacerlo con un display de 7 segmentos:

Código:
void setup(){

  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  Serial.begin(9600);

}

const byte numDef[10] = { 63, 6, 91, 79, 102, 109, 124, 7, 127, 103 };

void loop()
{

  if (Serial.available()) {

    delay(100);

    while (Serial.available() > 0) {

    setSegments( numDef[Serial.read()] );
    delay(250);

    }
  }
}


void setSegments(byte segments)
{
  for (int s = 0; s < 7; s++)
  {
    int bitVal = bitRead( segments, s );
    digitalWrite(s, bitVal);
  }
}

O para prender un led:

void setup()
{
pinMode(10, OUTPUT);
}

digitalWrite(10, HIGH);



Se nota lo simple que es, en assembler me parece que sería muchísimo más complejo. Usando las librerías en C, lo hacés en dos segundos.


Lo demás, le indicás qué micro usas al IDE (entorno de programación, el programa que usas para programar) de una lista desplegable, las variables definís cuáles vas a usar (creo que se pueden usar variables dinámicas creo que se le dicen, osea, sin definirlas, pero no recuerdo bien, depende el lenguaje y el IDE), y los pines, definís cuáles van a ser entradas y/o salidas (y también si digitales, analógicas o PWM), sólo las que vas a usar.

Todo esto, hablando de los arduinos, que es lo que uso yo (ATMega8, ATMega168, ATMega328 y un par más, con un bootloader).


Si alguien quiere poner ejemplos de código en otros lenguajes, yo puedo aportar poniendo ese código en C (de otros lenguajes no conosco, solo basic pero para PC).
 
Última edición:
Ahi es mas interesante, porque en tu caso las liberias del IDE son mas completas y tenes funciones ya resueltas, con el costo de no tener idea que pasa ahi, salvo que las inspecciones.

Con el 8051 tendria que meterme con las interrupciones del puerto y configurar los timers para configurar la velocidad.

Pero es interesante ver, que con C dependiendo como encares, tenes la opcion de tener la funcion ya armada y lista, o agarrar y pelearte un poco mas adentro con el uC.
 
Entonces con el ejemplo de Tomasito se podria decir que esta apreciacion no es valida???
o mas bien tambien aplicada a C???

el problema es que NO ES ESTANDARD y hay un par de millones de versiones según la idea de cada empresa que desarrolla un compilador,

otra cosa que quisiera puntualizar sobre Basic... es que en sus inicios fue pensado para principiantes... pero de acuerdo a su aceptacion fue evolucionando y casi de su nombre poco queda ya es casi tan complejo como cualquier otro lenguaje... segun mi apreciacion....
Hasta que punto y en que casos no lo se...

http://es.wikipedia.org/wiki/BASIC
 
Última edición:
:eek: :eek: :eek: :eek: :eek:
Bueno...si opinás así, decíselo a los cientos o miles de programadores que desarrollaron el kernel de LINUX o FreeBSD o algunos de los unixces o aún del mismo Windows. Te aseguro que te van a mirar así ":eek:"...bueno...no solo te van a mirar...



:confused: :confused: :confused:
Bueno...sin palabras....

Lamentablemente, cuando la única herramienta que uno tiene es un martillo...todo se parece a un clavo ;)

Bueno aquí yo me quedo sin palabras.. que tienen que ver los desarrolladores de windows o de linux o con programar un microprocesador????? como dije al parecer, para mi, ser un profesional en esto no es lo mismo que para ud. yo conozco gente profesional que se dedica a esto (Programar MICROCONTROLADORES!) por ello doy mi opinión.
Y no me digas que cuando uno la única herramienta que tiene es un martillo todo se parece a un clavo, conmigo estas muy equivocado, soy Ing. de ejecucion en Computacion e Informatica, asi que de lenguajes de programación no me vas a venir a dar charla, si digo que C y basic son iguales, lo digo desde mi punto de vista y para el uso que yo le doy. Una función de C o basic para mi es algo que no conozco (como esta programado) por lo cual no es algo de confianza para mi el saber si es preciso o no (cuando lo requiero), por ello utilizo asm, al fin al hablar de que algo no tenga precision, hablo de lo que mayormente se hace acá, y como se dijo ya, osea cosas que hacen hobbistas, o sea prender un led, hacer una alarma o que se yo, para ello me quedo con basic, y si hay alguna función que necesite y no este en basic o en el programa que uso, me aplico al C, claro si es que la tiene. Para cosas mas precisas o cuando la funciones que necesito no están, el asm es del único que me puedo fiar.
Aclaro: Digo esto para programar microcontroladores, para programar en pc se habla de otra cosa que no entra en este topic!!!:enfadado:
De lo que e leído con Lubeck es el que quien mas concuerdo en todo.
 
Última edición:
...que tienen que ver los desarrolladores de windows o de linux o con programar un microprocesador????? ....

Todo, ¿o acaso los kernel de linux o windows no se basan en la arquitectura IA32?

...Una función de C o basic para mi es algo que no conozco (como esta programado) por lo cual no es algo de confianza para mi el saber si es preciso o no (cuando lo requiero), por ello utilizo asm....

Depende de como programes vos, si lees los mensajes anteriores notaras la diferencia, fijate en el codigo que presenta Tomasito y en el codigo que presento yo, en uno ya esta todo digerido por librerias del IDE, en cambio en el otro todas las funciones se hicieron a pedal de la misma forma que lo harias con assembler, sin preocuparte por la pila, que registros usar, etc y en dichas funciones si sabes lo que estas haciendo.

Y por ultimo mira el codigo que presenta lubeck, ¿te parece lo mismo basic que C?

lubeck dijo:
Entonces con el ejemplo de Tomasito se podria decir que esta apreciacion no es valida??? o mas bien tambien aplicada a C???

Nuevamente, dependera del grado de compromiso con el que quieras meterte vos, si usas librerias ya definidas, es muy probable que con otros modelos de uC no te sirvan, pero si usas tus propias funciones tal como detalle arriba, la modificacion de ese codigo hecho para un 8051 (uC viejo), es muy sencillo pasarlo para que funciones en un ARM, porque las funciones son propias y se como funcionan.

Eso es una ventaja que te puede dar C, la de elegir hasta que punto me involucro con el hard.
 
Bueno, puedo aportar mi granito de arena desde lo que sé, que es C para arduinos.
Esto es lo que no me queda muy claro.....
Según lo que entendí es para arduino o puedo agarrar ese código para un pic16f877?

Ahora comparando los archivos HEX para el del LCD que puse en el mensaje 26 seria este

Código:
:10000000B2016B28A700071187108710831607110C
:10001000871087100F30870583122708B2182E2803
:100020003A30A100983052203330A60042201330DD
:10003000A100883052204220643051204220643098
:1000400051202230A600422028302D200C302D20B7
:1000500006302D20B21427082E283214A600321C98
:100060003C288710033C031C412841200730A10095
:10007000D0305220031408003214FE3C03196628C5
:100080008714321C321007150F3087052608F03907
:1000900087040711A60E321842283230512003146B
:1000A0000800A101E83EA000A109FC30031C5B2868
:1000B000A00703185828A0076400A10F582820188B
:1000C0006128A01C6528000065280800831303131D
:1000D000831264000800FE308A01022001308A0188
:1000E0000220FE308A01022001308A0102204C30B9
:1000F0008A01022075308A01022062308A010220C2
:1001000065308A01022063308A0102206B308A0147
:1001100002203A308A01022020308A010220423037
:100120008A0102206F308A01022074308A01022085
:100130006F308A0102206E308A01022063008A013A
:020140009E28F7
:02400E007D3FF4
:00000001FF
se podria comparar si el de C es menor y se pudiera decir que si es mas chico es mas rapido o no seria comparable????

Tomasito:
Por otro lado yo tengo una interface Phidget(similar a arduino) que su driver es una libreria .dll para Basic o C y en Basic es mil veces mas sencillo utilizarla que en C... arduino no es similar???
 
Última edición:
... Una función de C o basic para mi es algo que no conozco (como esta programado) por lo cual no es algo de confianza para mi el saber si es preciso o no (cuando lo requiero), por ello utilizo asm, al fin al hablar de que algo no tenga precision, hablo de lo que mayormente se hace acá, y como se dijo ya, osea cosas que hacen hobbistas, o sea prender un led, hacer una alarma o que se yo, para ello me quedo con basic, y si hay alguna función que necesite y no este en basic o en el programa que uso, me aplico al C, claro si es que la tiene. Para cosas mas precisas o cuando la funciones que necesito no están, el asm es del único que me puedo fiar.
Serías tan amable de aclarar cual es tu concepto de "precisión"?

Porque si tomamos literalmente ese párrafo, estarías responsabilizando al lenguaje y su entorno de la incompetencia del programador.
 
Lubeck: Ese código que postee, es exclusivo para arduino. Así nada más cómo está, compila en cualquier micro que tenga arduino.
Se podría portar a C para pic, pero habría que ver qué diferencias tienen los dos lenguajes, y de ahí, adaptar. Que sean los dos "C", no quiere decir que sean iguales.

Las demás preguntas muy bien no las entendí (acabo de despertar :LOL: ), si podés, explicate un poco más.

Edit: Eduardo: Calculo que se referirá a la velocidad de cálculo que tiene un micro al usar un lenguaje interpretado o compilado, contra usar lenguaje de máquina. Pero vuelvo a lo que dije anteriormente: ¿Vale la pena preocuparse tanto, cuando por unos dólares tenemos micros impresionantemente potentes?
 
Última edición:
Las demás preguntas muy bien no las entendí (acabo de despertar ), si podés, explicate un poco más.
Basicamente con tu mensaje aclaraste mi duda entre la diferencia de la Phidget con Arduino y su forma de operacion... creo que si detallamos mas ese punto nos salimos mucho del tema....

La pregunta iba orientada para saber si hay mas de un "modismo" de C igual que como lo hay en Basic hablando de micros...
:apreton:
 
La pregunta iba orientada para saber si hay mas de un "modismo" de C igual que como lo hay en Basic hablando de micros...

C hay uno solo: el C ANSI y todos los compiladores lo respetan si pretenden decir que "compilan lenguaje C".
Las diferencia sno está en el lenguaje, sino en las bibliotecas que acopañan al compilador, de las cuales hay un conjunto que es estándard y otro que es propio de cada fabricante.
Para los PICs, la mayoría de los compiladores están acompañados de una serie de bibliotecas que facilitan la programación para el uso de dispositivos externos al PIC, tal como displays LCD en 4 y 8 bits, I2C por software, comunicacione serie por software, etc, etc, etc.
Pero esos no son "modismos", son bibliotecas de soporte para cada tipo de procesador.
 
Serías tan amable de aclarar cual es tu concepto de "precisión"?

Porque si tomamos literalmente ese párrafo, estarías responsabilizando al lenguaje y su entorno de la incompetencia del programador.
creo que dejo bien claro en lo que expuse a que me refiero con precisión, "o sea prender un led, hacer una alarma o que se yo" para eso que expuse, acaso se requiere precisión? que eso se ejecute en cierto ciclo, o cada tantos ciclos pero justos, o que la lectura del sensor sea de una precisión inmensa? son cosas, que un poco de error en la ejecución "no importan en nada", o sera lo mismo que por ejemplo decodificar un tono?(se entiende lo de precisión??)
Y quizás C sea mas preciso que basic, pero YO no me fió. prefiero hacer yo mis propias rutinas, por ultimo hacerme mi propio compilador, que no me costaría mucho (claro obvio con lo que yo uso), pero con tener mis rutinas en assembler me basta y se exactamente lo que hago en cada ciclo, y en cosas como decodificar un tono, lo que hagas en cada ciclo si que importa. Si tu o alguien puedes hacer eso con en basic o C, bien yo no me fió y lo hago en Assembler. Pero si es algo como activar una carga cuando leo un sensor como para una alarma o al obtener datos por RF con algún modulo, no hay sentido hacerlo con ASM y para ello uso Basic, por que no C? bueno por que me gusta mas la estructura del Basic y su programación rápida, y si tengo recursos de sobra en memoria en el micro que me importa que gaste mas memoria o menos si esta haciendo lo que quiero?. Si no se entiende, no estoy diciendo que C sea malo o ineficiente y que basic también,o que basic sea mejor que C, solo es mi opinión personal y la forma en que hago mis cosas.

A todo esto, yo solo postie para explicar (por conocimiento) que los profesionales (quienes se dedican a esto y se ganan la vida con esto) usan el assembler como lenguaje cuando lo que quieren o les mandan a hacer tienen que tener una gran precisión (ojala se haya entendido a que me refiero con precisión), no como se dijo aqui que el C es un lenguaje para profesionales (quizás lo usen para cosas no tan "precisas"), lo demás fue mi opinión personal (que lo deje claro desde el comienzo) que supongo que a los que ya saben de esto no les interesa mucho.

Y con lo de:
cosmefulanito04 dijo:
Todo, ¿o acaso los kernel de linux o windows no se basan en la arquitectura IA32?
No se a que quieres llegar con eso, pero sera lo mismo un procesador que su velocidad es 20, 48 Mhz a uno que se ejecuta a 1.6 GHz (por lo bajo)??? Son cosas muy pero muy distintas ....

Saludos a todos!!!
 
Yo creo que este tema no tiene para mas.....

ya se dijo lo mas importante... que cada uno formemos nuestra opinion.....

y sobretodo... aquellos que se inician en esto de los micros... no pierdan la objetividad... que nadie les diga que es mejor o peor utilicen el que se ajuste a sus necesidades y sus planes...

y no se avergüencen de decir que usan uno u otro (sobretodo Basic que es mas atacado)...

Un ejemplo bien claro es que he desarrollado y vendido mas software en Basic que muchos que programan en C y ASM... o mas claro aun... cuantos hobbistas han programado en Basic mas micros que uno que programa en ASM...

Mi consejo: vean cuales son sus objetivos... para que lo nececitan... no que es mejor o peor....
si empiezan con Basic y su producto se vende... y sacan plata ese es el mejor si se deja de vender porque hay competencia en velocidad utilicen C y si de plano quieren que este en otro nivel haganlo en ASM... ese es el objetivo final la $$$$Plata$$$$$$.
 
Última edición:
Y quizás C sea mas preciso que basic, pero YO no me fió. prefiero hacer yo mis propias rutinas, por ultimo hacerme mi propio compilador, que no me costaría mucho (claro obvio con lo que yo uso), pero con tener mis rutinas en assembler me basta y se exactamente lo que hago en cada ciclo

Hummmm.....con esa forma de pensar.....

Y con lo de:

cosmefulanito04 dijo:
Todo, ¿o acaso los kernel de linux o windows no se basan en la arquitectura IA32?

No se a que quieres llegar con eso, pero sera lo mismo un procesador que su velocidad es 20, 48 Mhz a uno que se ejecuta a 1.6 GHz (por lo bajo)??? Son cosas muy pero muy distintas ....

Y cual es la terrible diferencia? La frecuencia de reloj?

NO HAY DIFERENCIA en la programación entre un uP y un uC. Punto
De hecho, es mas complicado programar para un procesador IA32 o IA64 que para un microcontrolador, por que al no tener integrados los periféricos hay que accederlos mapeados en espacio I/O o en memoria y usar recursos como DMA para algunos de ellos mas algunas otras cosas.

Hay programas que se ejecutaban en DOS en una 486 de 25MHz y los mismos programas se ejecutan igual en un dual-core a 2.2GHz o más....solo que más rapido. Los únicos que fallan son los que están hechos por los "sabios" de la programación que para hacer un retardo usan un loop "en assembler" u otro leguaje basados en los tiempos de ejecución de las instrucciones en una versión particular de un procesador...en lugar de usar alguno de los timers del 8253 o similar, que está para eso, o las instrucciones de lectura de los contadores de ciclos de la CPU en uP mas modernos.

Y todo esto puede hacerse en C, excepto las lecturas de los contadores de ciclos, que requieren un par de instrucciones en assembler...que pueden embeberse dentro del código C.
 
Última edición:
Atrás
Arriba