BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

c y puerto paralelo

BocaDePez
BocaDePez

1--hola, querria saber con que comandos se puede manejar el puerto paralelo en c con el compilador dev-c++
lo he intentado con _outp(0x378,111);
no me da error, pero no obtengo salida.

2--por otra parte, he intentado compilar este codigo
(link roto)
y me da error en las sentencias del puerto paralelo, por eso intente despues con el _outp
porque hace bucles de 60 iteraciones para la salida del puerto?
(no me refiero a los bucles externos)
yo el que he echo con _outp es una unica sentencia sin ningun bucle

3--por ultimo, una cosa que no me queda clara de programacion es por ejemplo, en lenguaje c, lo que se programa tiene que ser ejecutado por cojones en un sistema operativo no? me refiero a que pones malloc() o fopen() y es el sistema el que te da memoria y te abre los archivos.

4--pero en cambio como es que dicen que es el lenguaje para programar sistemas operativos por excelencia? como vas a programar en ese lenguaje si todo son llamadas al sistema?

5--y si por ejemplo quiero hacer en c un gestor de arranque sencillo tipo lilo? cuando haga malloc no hay nada que me reserve memoria.
seria obligatorio utilizar partes del programa en ensamblador o con las propias sentencias de c se podria hacer?

6--como se hace para cargar una dll desde un programa en c?

7--como se utiliza la sentencia goto?

8--es posible descompilar un programa en c?

9--cual es la sintaxis basica de ensamblador resumida en una o dos frases? son solo instrucciones de procesador junto con las direcciones de memoria de los openrandos o algo mas?

contestarme a todo por favor
gracias

Este tema está cerrado a nuevas respuestas. Abre un nuevo tema para retomar la conversación.
Frankie2004

1. ¿Qué quieres decir con que "no obtienes salida"?
¿Cómo lo estás comprobando en el otro extremo del cable paralelo?

2. outportb es una función de la librería conio de Borland C, no de GCC
¿Por qué hace bucles? Pregúntaselo al programador.

3/4/5. Lee un libro sobre sistemas operativos, o haz la carrera y llega a quinto curso.

6. ¿DLL? Juraría que este es el foro de Linux.

Creo que ya me he cansado ... por que si sigo me voy a cabrear :-D

🗨️ 7
BocaDePez
BocaDePez

en primer lugar gracias por contestar, bandaancha es un sitio donde se suelen resolver bien las dudas y aunque este hilo esta enfocado hacia programacion, es una subcategoria de linux y a su vez de unix.

1-porque los leds que tengo no se encienden

2-outport no me funciona (y me dice que no reconoce el comando) por eso utilizo _outp que no me da error pero tampoco me funciona
pregunto lo de los bucles por si no me funciona por no hacerlos, es decir ¿con poner el comando una vez el led se queda encendido fijo, o hay que refrescarlo?

3-me refiero solo a que si es posible programar en c algo que no corra en un sistema operativo, como es el ejemplo de programar un sistema operatico, o un gestor de arranque, solo es curiosidad
en ello ando (empezando la carrera, tengo dudas)

4-como se cargaria una dll desde un programa en c? si lo sabes tanto te cuesta ponerlo? no lo encuentro en internet

5-como se pueden insertar instrucciones de ensamblador en c?

saludos

🗨️ 6
Frankie2004

Como expliqué, la librería CONIO.H no es una librería estándar y su creador original fue Borland para su Turbo C, posteriormente Borland C/C++. El ejemplo que has pegado sigue dicha sintaxis, que puede que tal vez valga para algún otro compilador de Windows.

El compilador básico en Linux y otros Unix es el GNU C, GCC para los amigos. Allí el comando cambia a _outp, pero en esencia hace lo mismo: manda un valor a un puerto de salida.

El comportamiento dependerá siempre de lo que hay al otro extremo. El aparato puede necesitar un determinado protocolo de inicialización ("handshaking") para funcionar. Puede necesitar que se envíen una determinada secuencia de valores en orden, y recibir confirmación en el PC mediante un puerto de entrada. El puerto paralelo tiene una señal "strobe" para esos temas. En definitiva, que cada aparato es un mundo y dependerá de sus características.

El ejemplo mandaba determinados valores una vez cada segundo, durante 60 segundos, repitiendo 15 veces. Pero eso sería para un determinado aparato. Yo he programado protocolos de transferencia complejos (hace ya 14 años de esto) para otros aparatos via puerto paralelo, y cada uno tenía su algoritmo. Desde aquí no te podemos ayudar.

Los sistemas operativos se programan en C, hasta donde ya no se puede llegar y se recurre al ensamblador. Pero obviamente la salida binaria de un ejecutable no deja al final de ser código máquina. Parece la pescadilla que se muede la cola, pero sí se pueden generar sistemas operativos completos en un lenguaje de medio nivel como C.

Una DLL es un formato típico de Windows. En Unix las librerías que se incluyen en un programa suelen estar empaquetadas en archivos .a y las del sistema en archivos .so, por lo tanto foro equivocado. Dependerá del compilador, dudo que tengas problemas en encontrarlo en Internet. No es prepotencia, es que nos salimos de tema.

Las cosas por pasos. Si no sabes si "goto" es una instrucción de C, miedo me da que pienses en usar DLLs. Te veo verde.

Las instrucciones en ensamblador se introducen de forma diferente en cada compilador. En realidad el ensamblador de GNU usa una sintaxis completamente al revés en el orden que los ensambladores típicos y la nomenclatura Intel. Por supuesto debes saber previamente las instrucciones del código máquina antes de meterte en más berenjenales.

Otros dirían: RTFM! ;-)

🗨️ 3
GetA1

Hay alguna excepción de Sistema Operativo que no está escrito en C.
El MVS (z/OS) está programado entero en Ensamblador (no tiene nada que ver con el de los Pc's).

(Sin ánimo de polemizar la exposición que has hecho me parece muy instructiva)

BocaDePez
BocaDePez

lo que hay detras del puerto paralelo son solo unos leds, asi que me extraña que mandando el comando con todos los valores posibles no haga nada.
lo estoy corriendo en w98, ya se que en xp no funciona.
sobre ensamblador solo quiero saber un poco por encima la tecnica de incluirlas en programas en c.
si se hace metiendolo en el propio codigo (que sentencia habria que poner), enlazando los codigos objetos de varios lenguajes, etc
tres cuartos de lo mismo me pasa con las dll o las bibliotecas correspondientes al sistema operativo, no lo voy a hacer pero quiero saber con que sentencias se cargaria una biblioteca dinamica desde c.
por ultimo lo del goto, se que es lo pero que se puede hacer en programacion, por eso no nos han explicado como se utiliza y queria saber la sintaxis de este comando en c.
saludos

🗨️ 1
Frankie2004

Añado: en el caso de que el objetivo sea programar esto en Windows, te he de decir que en sistemas operativos basados en NT, solo los drivers del núcleo (pertenecientes al nivel Ring 0 del sistema operativo) tienen acceso directo al hardware.

En cristiano, ningún programa de usuario tiene posibilidad de enviar datos al puerto paralelo directamente usando _outp() en sistemas operativos como NT, W2000, W2003, XP o Vista. Solo es factible en MSDOS, W95, W98 y WMe.

Hay parches que instalan un kernel driver de terceros para acceder a ello y poder usar _inp() y _outp() en estos sistemas. Hay 2 conocidos, pero en este PC no tengo la información. Usa Google.

🗨️ 1
KarmaZenBuffer

te vas a quedar SOLO explicando todo desdel el GOTO,( aunque no es una buena instruccion para usarlo en C, mal programa si empezamos a saltos.) ;-)... el pez esta usando bibliografia del año la pera. como dices eso se llevaba en sistemas antiguos...

hay ejemplos de programas de C para controlar el serial o el paralelo.

Pero bajo windows el rollo no va asi. sino por events,

Y no es comodo. tampoco.

PD: bendita borland y conio.h ;-)