# Recomendacion Lenguaje de programacion



## alpharsp (Abr 30, 2009)

No se si este infringiendo con las reglas del foro
espero que no, no quise entrar en otros temas similares
porque esta es una recomendacion personal
deacuerdo a mis conocimientos y necesidades 

Estoy estudiando ing mecatronica y estoy levando microcontroladores
por lo que me toco exponer acerca dle puerto paralelo
entonces para hacerlo ams dinamico quise hacer un reloj digital
que a traves del puerto paralelo enviara datos a la proto 
y posteriormente a los displays para visualizar la hora

sin embargo me tope con muchas barreras 
yo solo he tenido experiencia basica programando en turbopascal turboc y visual basic

-como mi compu es un asco no pude instalar el visual studio 6 (tengo que formatear )

-estaba pensando en un buen compilador de c porque dije ya basta turbo c ya no hay que evolucionar, y despues de un poco de investigacion me decidi por borland c++ builder 6.0 pero ps tenia problemas con los serials y como traigo el tiempo recortado tube que regresar a turbo c  pues no tuve problema con librerias compilaba perfectamente pero los leds que conecte seguian en el mismoe stado  aun cuando ya habia bajado el inpout.dll a final de cuentas no supe como hacer la llamada desde turbo c al dll (habia escuchado que esta dificultad solo se presenta en compiladores basados en msdos y como winxp restrinjia el acceso a puertos hayq ue meterse en un problemota :S pero esto no ocurre en compiladores con interfaz de windows?) el punto esque dije nah c tampoco 

-finalmente lei que delphi era bueno para esto de los puertos lo descargue y vi que era orientado a objetos y basado en pascal asi que dije nah porque no, consegui una unit (no se que diablos sea pero lo hice ) que hacia esta llamada al dll y me permitia usar las funciones inp32 y out32 y funciono perfectamente!

Despues de esta larga historia me doy centa de que aunque me gusta la programacion y me considero bueno en logica de programacion, mi conocimiento en los lengajes que conozco y mi repertorio de lenguajes d eprogramacion es limitado.

Asi que que lenguaje me recomiendan para este tipo de aplicaciones es decir manejo de hardware del propio computador y por que no para compilarlo en ensamblador de los diversos microcontroladores de momento estoy con delphi porque es con el que solucione este probema asi que no se si sea bueno aprender delphi o bien realmente visual basic o algun compilador de c++ y por que no java, son mucho mejores para este tipo de aplicaciones

uds que me recomiendan?


----------



## Dr. Zoidberg (Abr 30, 2009)

alpharsp dijo:
			
		

> Asi que que lenguaje me recomiendan para este tipo de aplicaciones es decir manejo de hardware del propio computador y por que no para compilarlo en ensamblador de los diversos microcontroladores de momento estoy con delphi porque es con el que solucione este probema asi que no se si sea bueno aprender delphi o bien realmente visual basic o algun compilador de c++ y por que no java, son mucho mejores para este tipo de aplicaciones



El único lenguaje que reúne todas las caracterísitcas que vos necesitas es el Lenguaje C y tendrías que aprenderlo bien, por que está ampliamente soportado por la comuindad de software libre, por lo que va a encontrar una gran cantidad de bilbiotecas y recursos, de primer nivel y sin costo alguno, al igual que compiladores y entornos de desarrollo.

Saludos!


----------



## felixls (Abr 30, 2009)

alpharsp dijo:
			
		

> -estaba pensando en un buen compilador de c porque dije ya basta turbo c ya no hay que evolucionar, y despues de un poco de investigacion me decidi por borland c++ builder 6.0 pero ps tenia problemas con los serials y como traigo el tiempo recortado tube que regresar a turbo c  pues no tuve problema con librerias compilaba perfectamente pero los leds que conecte seguian en el mismoe stado  aun cuando ya habia bajado el inpout.dll a final de cuentas no supe como hacer la llamada desde turbo c al dll (habia escuchado que esta dificultad solo se presenta en compiladores basados en msdos y como winxp restrinjia el acceso a puertos hayq ue meterse en un problemota :S pero esto no ocurre en compiladores con interfaz de windows?) el punto esque dije nah c tampoco
> 
> -finalmente lei que delphi era bueno para esto de los puertos lo descargue y vi que era orientado a objetos y basado en pascal asi que dije nah porque no, consegui una unit (no se que diablos sea pero lo hice ) que hacia esta llamada al dll y me permitia usar las funciones inp32 y out32 y funciono perfectamente!



Si bien programé 2 años en Delphi, y se que es un excelente lenguaje (object pascal), es recomendable el C/C++ o C#.

El problema que tuviste con los puertos y el turbo c se debe a la capa HAL (Hardware Abstraction Layer) de windows NT (en adelante), esta capa impide que cualquier aplicación use directamente los puertos, para proveer una interfaz unificada para los consumidores y ocultar la implementación del hardware.

Actualmente hay gente programando interfaces para usuarios en C# (o mono si querés portar tu código a un linux), que es un lenguaje muy bueno también, para Java hay librerías de JNI que te ayudarían, el IDE que usarías en ambos casos son gratuitos.

También puedes usar C y aunque es un poco más dificil, es el mejor.


----------



## alpharsp (Abr 30, 2009)

lo imagine  muchas gracias a ambos
entonces serian tan amables de 2 cosas:

-recomendarme un compilador de c para estas aplicaciones solo he probado turbo c v3.0 que no he tenido problemas mas aya de los puertos y dev c++ que no me gusto por problrmas con las librerias tanto dos.h como conio.h 

-y tambien podrian informaciónrmarme como puedo indicarle al inpout.dll a traves de c que manipule el puerto paralelo, es decir como solucionar el problema que tube y que si pude solucionar en delphi pero ahora en c

si pudieran hacerlo estaria sumamente agradecido


----------



## felixls (Abr 30, 2009)

Si te vas a decidir por el C:

1. El compilador es el GNU C
2. Te paso un ejemplo (y entiende que es solo eso), de como usar el puerto serie y que se pueda compilar en linux y en windows:

2.1 Baja el entorno de desarrollo CodeBlocks
http://www.codeblocks.org/downloads

2.2 Baja la librería de comunicación serial:
http://lnxcomm.sourceforge.net/data/?page_id=3

Trae ejemplos, mira, lee, aprende y luego, disfruta jeje 

*EDIT*.

Para el puerto paralelo podrías intentar revisar el proyecto uniportio: http://sourceforge.net/projects/uniportio/


----------



## Chico3001 (Abr 30, 2009)

Puedes intentar con Eclipse, gratuito y para muchas plataformas... 

http://www.eclipse.org/

O el ya bien conocido GCC

http://gcc.gnu.org/


----------



## felixls (Abr 30, 2009)

Chico3001 dijo:
			
		

> Puedes intentar con Eclipse, gratuito y para muchas plataformas...
> 
> http://www.eclipse.org/
> 
> ...



GCC = GNU C  (GNU Compiler Collection)


----------



## Meta (May 1, 2009)

*alpharsp*.

Puedes programar con lo que desees, ahora la elección es tuya. 

En la actualidad las empresas y nosotros se están pasando cada vez más la era .net de Visual Studio. Te puedes descargar la distribución gratuita aquí abajo.

http://www.microsoft.com/express/download/

A lo largo del 2010 ya llegará las nuevas versiones con más funciones y novedades.

Con el tiempo, voy poniendo mi experiencia en PDF para que no se me olvide y los demás aprendan.

http://www.abcdatos.com/tutoriales/tutorial/v12.html
http://www.abcdatos.com/tutoriales/tutorial/z9521.html

Mi lenguaje favorito es el Visual C#, muy moderno y fácil, aunque a veces utilizo algo de Visual C++ y Visual Basic porque ustedes me lo piden...


----------



## Dr. Zoidberg (May 1, 2009)

Estimados compañeros  foristas:
Por favor lean la parte que  he remarcado en el post original.



			
				alpharsp dijo:
			
		

> Asi que que lenguaje me recomiendan para este tipo de aplicaciones *es decir manejo de hardware del propio computador y por que no para compilarlo en ensamblador de los diversos microcontroladores* de momento estoy con delphi porque es con el que solucione este probema asi que no se si sea bueno aprender delphi o bien realmente visual basic o algun compilador de c++ y por que no java, son mucho mejores para este tipo de aplicaciones



Como se darán cuenta, no le pueden recomendar C# ni Visual Basic por que no hay soporte para microcontroladores ni hardware en esos lenguajes (al menos por ahora). Pueden que sean fáciles o bonitos o eficientes, *pero el unico lenguaje que le permite manejar el hardware tanto en la PC como en un microcontrolador es el C* (y tal vez el C++). A menos que sepan como armar un device-driver en C# o VB...

Saludos!


----------



## Meta (May 1, 2009)

Hay cada vez más, a lo largo del tiempo, con paciencia y todo...

... hay más facilidades para el futuro.

El mejor es el ASM, luego el C, hay lenguajes que ya programa hasta los PIC con PicBasic, pascal, etc...

Al menos en Visual C# puedo controlar el puerto serie.

YouTube - RS232 con PIC 16F84A y Visual C#

Saludo.


----------



## Dr. Zoidberg (May 1, 2009)

Sep...pero el puerto serie es hardware estándard en una computadora. Que sucede si, como la mayoríapor acá, querés manejar el pùerto paralelo para conectar algun aparatejo? Uhh...usas la dll esa que anda por ahí (que está escrita en C), pero si es un hardware tuyo que requiere una operación rápida por parte del puerto y no mover los bits individuales como  para algun proyecto muy simple, si no sabés C ni siquiera te podés acercar al control del puerto... y ni te digo si usas hardware conectado en un slot PCI o PCI-E.

Querés manejar ese dispositivo de JAVA? Tenes que usar JNI con una DLL escrita en C o C++.
Querés usar C#...otra DLL en C..etc, ect, etc...

Lo querés hacer en Assembler...y si...se puede, ahora...si vas a armar la tabla de  decriptores globales para memoria o interrupciones y queres usar assembler...se puede...pero sentate en una silla comoda, preparate una damajuana de café y dedicale los proximos 6 meses...

Te lo digo por 15 años de experiencia: *Sin C no hay acceso al hardware desde la programación.*

Saludos!


----------



## Meta (May 1, 2009)

Se que el C está ahí. 

Antes el C# no se podía usar el puerto serie desde que salió en el 2002, al final de tanta petición que lo hicieron. C es muy bueno para hacer driver. C# funciona muy con USB pero C++ mejor.

Poco a poco irán complementando cosas, por algún motivo no se quieren esforzar demasiado en C# para hacer lo que hace C, el C es un lenguaje de más bajo nivel que el C#. Se que Visual C++ está muy bueno, no  lo niego, a mi me gusta más el C#, para cosas el C++/C. 

Alguien todavía no se ha puesto en hacer una dll seriamente para C#, como está la del C por ahí, ¿por qué y para qué complicarse la vida?

Con los años, esa dll se modificará o simplemente se dejará de usar ya que no será compatible en el futuro, otro motivo es que el puerto paralelo y puerto serie RS232 se dejarán de fabricar y estarán otros como el USB y algunos más. Al final de la Web de abajo, hay código en C.

http://cfievalladolid2.net/tecno/recursos/gt_zorrilla2001/archivos/puente.htm

Saludo.

*EDITO:*
Vi el anuncio del Visual Studio .net 2010 FrameWork 4.0 y hablan del Win32/C++.


----------



## Eduardo (May 1, 2009)

ezavalla dijo:
			
		

> Lo querés hacer en Assembler...y si...se puede, ahora...si vas a armar la tabla de  decriptores globales para memoria o interrupciones y queres usar assembler...se puede...pero sentate en una silla comoda, preparate una damajuana de café y dedicale los proximos 6 meses...


Tenes o sabes donde puede haber algo sobre las interrupciones bajo XP o W2000 ?  (te extraño DOS   )

Te pregunto porque hace bastante necesite un servicio de interrupcion en tiempo real (con un V),  no hubo caso. No encontre forma de que se ingrese directamente a la ISR, siempre el SO  (era con W95) te la atendia primero y con demoras variables que en las pruebas que hice la maxima fue de ~50uS.

Tratando de averiguar como se debia hacer, encontre un articulo ahora mas viejo (A V to Monitor Hardware Interrupts
, Jean-François Larvoire) de un tipo que habia estado queriendo monitorear las interrupciones por hardware,  que despues de investigar encontro que ante diferentes eventos el SO *cambiaba la IDT de lugar*.
El tipo busco información sobre aspectos indocumentados de Windows y termino preguntando al soporte de Microsoft, que le contesto "Yes, there is more than one IDT . . . but this topic is verboten."  ("Si, hay mas de una IDT... pero ese topico es *prohibido*")

No creo que haya cambiado la postura de Microsoft en este aspecto, pero si tenes algo de información, me interesa. No porque en este momento este trabajando con eso, sino por si a futuro llegara a un servicio de interrupcion rapido.


----------



## Dr. Zoidberg (May 1, 2009)

Algo tengo, por que con otro vago estamos tratando de armar un V para interceptar la interrupción del timer de la PC, por que tenemos que correr una rutina en Tiempo Real. Seguro que se puede hacer en forma consistente por que el Real Time Windows Target de Matlab tiene un V que lo hace, pero como bien decís hay muy poca información y la mayoría no sirve para nada.

Tengo otro compañero de laburo que hizo una maestría en España y también escribió un driver en modo kernel para W2K y lo usaba en tiempo real con interrupciones de no se que hardware que tenía. No se si le midieron el jitter a la entrada de la ISR para saber si era razonable, pero al menos dice que andaba...

El lunes lo veo al otro compañero de laburo y te digo que es lo que tiene, por que de esa parte se encarga él.

Saludos!


----------

