2010-11-09 8 views
5

Tengo una clase en programación de bajo nivel que requiere un proyecto final (plan de estudios al final). Básicamente es una pieza de software que pone en uso todo lo que aprendió.C y sugerencia de proyecto de ensamblaje necesaria para clase en software de bajo nivel

Tenía algunas ideas, como el diseño de mi propio Roguelike (debería ser algo así como Nethack, solo para un jugador), pero me gustaría algunas sugerencias sobre alternativas. No necesita ser un juego, puede ser cualquier cosa. El plazo es de un mes y medio, y tengo otros proyectos, etc. por lo que no debería ser demasiado que lleva mucho tiempo implementar.

Requisitos:

  • uso, al menos, 4 E/S dispositivos, uno de los cuales debe ser el ratón o el puerto serie
  • Algunos de esos dispositivos deben utilizar interrupciones, otros deben utilizar sondeo
  • Idiomas: C y de montaje (obligatoriamente, de lo contrario hay una penalización)
  • Implementar las máquinas de estado

el pER ipherals nos dio una conferencia sobre fueron:

  • tarjeta gráfica - Modo gráfico
  • Tarjeta gráfica - el modo de texto
  • ratón
  • teclado
  • tiempo real Contador
  • de a bordo Altavoz (a través de temporizadores 0 y 2)
  • Puerto serie

Este es el programa abreviada: periféricos

de entrada/salida y su operación de asignación directa en un proceso direcciones del espacio de acceso a los periféricos en modo de sondeo y por Procesador de interrupción interrupciones en la arquitectura IA-32 y el controlador de interrupción. Escribiendo rutinas de servicio de interrupción en la Asamblea y en C Estudio de algunos periféricos típicos de los ordenadores personales, tales como teclado, ratón, tarjeta gráfica, reloj de tiempo real , temporizador, altavoz y puerto serie.

Programación en la programación C idioma: diferencias principales con respecto del lenguaje C++; programación estructurada en C. Disposición de la memoria de un proceso . Llamadas de función: mecanismos, paso de parámetro , almacenamiento de variables locales y valores devueltos. Programación combinada de en C y el conjunto de la familia de procesadores IA-32 . Creación y uso de bibliotecas. Enlace estático del código de objeto.

uso de herramientas de desarrollo de software: gcc, make, GDB, ar, prof, diff, parche y SVN

Gracias por su tiempo!

+1

Alguien, por favor CW. –

+0

Wow. Una escuela con un departamento de CS y un maestro lo suficientemente serio como para tener un proyecto de programación realmente agradable. ¿A dónde asistes, Francisco? –

+1

Michael, Facultad de Ingeniería de la Universidad de Oporto, Portugal. http://www.fe.up.pt/si_uk/ –

Respuesta

2

Una opción simple es ir para juegos. Siempre pueden usar varios dispositivos, como mouse, teclado, temporizadores, tarjeta gráfica y (dependiendo de lo que haga) el RTC.

Otra opción es ir a una aplicación de "compositor de música". Por ejemplo, podría escribir (usando el teclado y el mouse) una canción (frecuencia de nota, duración) y luego dejar que el altavoz de la computadora la reproduzca.

También puede optar por una "aplicación de reloj/calendario". Podría dibujar un reloj en la pantalla (que podría ser más difícil de lo que podría parecer si dibuja uno analógico en la pantalla), y luego permitir que el usuario ajuste la hora del día (guardando los cambios en el RTC). El reloj también podría incluir alarma y algunos tics. En cuanto al calendario, también podría permitir al usuario crear "eventos" en el calendario, que podría funcionar un poco como las alarmas.

También podría intentar escribir su propia aplicación tipo "bloc de notas". Esto requeriría tener una GUI en funcionamiento (área de escritura, menús, etc.). Esto podría ser en modo texto o gráficos. Podrías detectar el teclado que se está presionando para agregar un carácter, manejar el BLOQUEO DE MAYÚSCULAS (lo que te da la oportunidad de cometer errores con los LED del teclado). Puede usar la posición/clic del mouse para cambiar de posición en el editor de texto o en los menús desencadenantes. Luego, los temporizadores tienen el cursor intermitente en el editor de texto. Hacer clic en una opción de menú deshabilitada podría causar un sonido corto de altavoz para indicar una acción no válida.

Recomendaría escribir la mayor parte del código en C, a excepción de pequeñas partes en el conjunto. Los ISR son una buena oportunidad para el código de ensamblaje.

En cuanto a las máquinas de estado:

  1. juegos pueden tener muchos estados ("Menú Principal", "juega al juego", "Pausa Menú", "High Scores") con las transiciones entre estados bien definidos.
  2. Un compositor de música también podría tener algunos estados ("Parar", "Pausa", "Reproducir")
  3. Una aplicación de reloj podría tener estados como "Mostrar reloj", "Mostrar calendario", "Cuadro de mensaje de alarma" "Evento cuadro de mensaje", "Evento cuadro de mensaje con una alarma pendiente.
  4. La aplicación bloc de notas podría tener estados como 'Edición de texto', 'en el menú' o 'en la casilla de mensajes')

La mayor parte de Puede acceder a los dispositivos que ha mencionado con interrupciones. Desafortunadamente, no puedo pensar en buenas oportunidades para sondear ...

+0

Encantado de leerlo aquí;) Me gustó la aplicación de reloj/calendario, pero me parece demasiado fácil. No puedo encontrar un juego que 1 - no se haya hecho antes por anterior. años estudiantes, 2 - cumple con las especificaciones. El roguelike sería complejo solo en cuanto a algoritmos, tal vez ni siquiera eso. –

+1

@Francisco P. Acerca de la aplicación "demasiado simple": siempre puedes complicarla una vez que tienes algo funcionando. – luiscubal

+0

Bueno, lo pensé un poco, y ya me encontré con algunos problemas difíciles: P –

2

Sintetizador de música/rastreador como programa? Use el teclado para "reproducirlo", guardar/grabar canciones, manejar las porciones de audio y IO. ¿Tal vez usar el mouse como controlador de pitch o vincular dos computadoras con el puerto serie para jugar cooperativamente?

+0

Lo siento, no obtengo la parte 'rastreador'. –

+1

Tal vez se refiera a http://en.wikipedia.org/wiki/Tracker_%28music_software%29 – luiscubal

+0

Tonto, pregunta antes de buscar. –

2

Divídalo en dos programas.

Program One es una especie de gui que muestra algunos gráficos clicables para un conjunto de pruebas que se pueden realizar. Una vez que hace clic, aparece una especie de cuadro de texto y puede escribir START para comenzar la prueba. El comando sale por el puerto serie, a una máquina remota donde se está ejecutando el programa Dos. El programa 2 hace la prueba y devuelve algún tipo de estado al programa 1.Se muestra el estado y se puede hacer clic en otro gráfico.

El programa dos escucha en el puerto serie, y recibe un comando del programa 1, lo realiza y devuelve el estado.

Cuando el programa 1 hace clic en el ícono QUIT, le dice al programa dos que se apague también.

Agregue campanas y silbatos según sea necesario.

2

Si puede conectar dos computadoras entre sí a través del puerto serie e implementar el mismo código en cada computadora, teóricamente podría dividir el tiempo de codificación entre usted y el propietario de la otra computadora, ¡minimizando así un poco el esfuerzo! (Bueno, tal vez maximizar los argumentos sobre el diseño!)

Un proyecto que me viene a la mente es implementar una sencilla aplicación de red de texto punto a punto entre dos computadoras. Escribe el texto en un búfer en pantalla, use el mouse para hacer clic en un destino, lo que activa el envío del mensaje a través del puerto serie a la otra computadora, que lo muestra en su propia pantalla y emite un bip para indicar que un mensaje sido recibido. Además, la computadora que envía podría emitir un pitido a su altavoz con un tono diferente para una transmisión exitosa, errores de transmisión o reintentos. Eso cubre todo el hardware que le han presentado.

Para un diseño de bonificación adicional, el protocolo de mensajes debe ser tolerante a errores o detectar errores de recepción.

¡Suena como un gran proyecto lo que sea que hagas! Sin embargo, tenga cuidado de ir al agua con el proyecto. Hay suficiente carne en tus requisitos para ocupar todo tu tiempo sin diseñar un juego completo también. Use el pricipio de Kiss

+0

¡Gracias por su sugerencia! Tendría que hacer toda la codificación, sin embargo, son asignaciones grupales: P –

1

¿Qué tal un juego PONG para dos jugadores, controlado por el mouse y reproducido en el puerto serie?

+0

hecho demasiadas veces, desafortunadamente: –

Cuestiones relacionadas