Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola, quisiera que me recomendarais algun programa, gratuito si es posible, para compilar y programar en c, y saber si se puede hacer programas en c, que ademas de escribir texto en pantalla pueda manejar graficos, crear entorno grafico propio y similares (como los entornos graficos de un videojuego) y como se puede programar que se muestren imagenes en pantalla con c. Igualmente agradeceria cualquier referencia a manuales lo mas completos posibles sobre programacion en c, preferiblemente en castellano.
Gracias por cualquier ayuda que me podais ofrecer.
Todos los periféricos están "mapeados" en la memoria del ordenador, es decir, para acceder a la tarjeta gráfica lo que haces es acceder a la memoria asignada a la tarjeta gráfica y cambiar los valores, la tarjeta gráfica lo que hace es acceder a esta misma memoria, y enviar los valores que encuentra a la pantalla.
Hoy en día eso se hace siempre por medio de drivers y llamadas al sistema operativo, ya no te tienes que preocupar de dónde está mapeada la memoria de la gráfica, sino que le envías la información directamente a la tarjeta gráfica por medio de las librerías (drivers) que te pone a tu disposición el fabricante.
Esto por un lado permite programar sin tener que preocuparte del hardware que venga debajo, pero por otro lado tienes menos control de la situación, el sistema operativo y los drivers deciden cuándo se ponen las cosas que tú les has enviado, dado la velocidad de los ordenadores hoy en día eso no supone mayor problema y facilita mucho la programación.
pero si a un puntero no se le puede asignar una direccion de memoria que uno quiera sino que se debe hacer el "casting" a ver que memoria es la que devuelve y se puede usar, ¿como le podria asignar a un puntero la direccion de memoria que yo quisiera para, por ejemplo, ponerle la direccion de memoria del teclado?
Entiendo lo de que eso lo haga el sistema y los drivers y todo eso de que faciliten la programacion, pero ¿como se aria "a mano", por asi decirlo, programando uno mismo, pues por ponerte un ejemplo, leer una tecla del teclado? es en parte por curiosidad de como el lenguaje C puede tener un acceso de bajo nivel a perifericos por memoria (la programacion contra mas a bajo nivel y mas control más me gusta) y en parte, aunque despues no lo use cada dos por tres en cada programa, pues por almenos tener los conocimientos por si me hacen falta, o por tenerlos simplemente, por si cualquier dia quiero algo mas de control de lo que me pueda dar un driver o el sistema...
En cuanto a lo de la wiki, no se demasiado bien como se crean los articulos o temas, estuve hace algun tiempo en wikipedia pero solo ayudando un poco, nunca cree un articulo nuevo, y despues la parte de resolver las dudas, tengo yo las dudas, como para explicar la respuesta XD.
Pero cuando sepa mejor c, que ya no tenga tantas dudas, mirare como se hace lo de la wiki (¿con estar registrado en el foro, en la web de A.R.D.E., es suficiente o hay que hacer alguna otra cueta?) y como explicolas cosas, pues resulta aveces más sencillo entender algo que explicarlo.
Una ultima cosa, he leido que SDL esta escrita en C, entonces, ¿el acceso a todo lo multimedia lo hace como has dicho, por la memoria accediendo a los perifericos mapeados en la memoria, no?, entonces, ¿lo mismo que hace SDL lo podria hacer cualquiera (mejor o peor, yo porlomenos peor) mientras hace el programa, quiero decir, que es como programar cualquier programa?
lacabra25, tú puedes hacer perfectamente esto:
int *i;
i = 10;
*i = 102;
Otra cosa es que el compilador/sistema operativo te lo permita hacer.
S2
Ranganok Schahzaman
PD: "¿como se aria?" duele de ver usa el corrector ortográfico de vez en cuando.
PDD: Para el tema wiki simplemente haciendo un FAQ sirve, es decir, pones la pregunta que has formulado (de una en una) y las respuestas que se han dado en este tema (o las que has encontrado tú).
lacabra25, tú puedes hacer perfectamente esto:
int *i;
i = 10;
*i = 102;
Otra cosa es que el compilador/sistema operativo te lo permita hacer.
PDD: Para el tema wiki simplemente haciendo un FAQ sirve, es decir, pones la pregunta que has formulado (de una en una) y las respuestas que se han dado en este tema (o las que has encontrado tú).
Pero, si aunque pueda hacerlo, el compilador no me deja compilarlo asi, o despues el sistema no me deja ejecutar eso, ¿como pongo como direccion a la que apunta la que yo quiera, de forma que me deje tanto el compilador como el sistema?, un enlace que pusistes, el del archivo de texto sobre perifericos, me gusto, pero no pude ponerlo en practica por que no sabia como darle a un puntero la direccion que ponia para el teclado (me parece que ponia una que era del teclado o de la pantalla); decir que puedo hacerlo pero despues que el compilador o el sistema no deja hacerlo es como un coche, si un coche supera los 120 Km, claro que puede ir por una autopista o carretera a mas de 120, pero ¿de que le sirve si acaba detenido? pues poder hacer eso con un puntero no es util si despues no voy a poder, ya no ejecutarlo, ni compilarlo. ¿hay forma de poner a un puntero, la direccion de un periferico, y poder compilarlo, y a ser posible, ejecutarlo?
Ahora mismo es un poco tarde, pero mañana me paso por el wiki para mirar como va y empezar poniendo una o dos preguntas con sus respuestas.
lacabra25, es que para acceder a los periféricos ya tienes los drivers, eso no quiere decir que los programadores de los drivers o del SO no utilicen esta técnica para acceder a la memoria de los dispositivos (ellos tienen permisos suficientes para hacer esto).
En MSDOS creo recordar que excepto algunas pocas posiciones de memoria reservada (principalmente para no joder el SO) podías acceder a la memoria de los periféricos sin ningún problema.
S2
Ranganok Schahzaman
entonces, ¿un codigo como el que pusistes de ejemplo, podria ser compilado con dev-c++, por ejemplo?, y ¿podria ejecutarlo en windows con derechos de administrador (con todos los derechos por ser la unica cuenta de usuario).