Требуется проект C и Assembly для класса по программному обеспечению низкого уровня - PullRequest
5 голосов
/ 09 ноября 2010

У меня есть класс по низкоуровневому программированию, который требует окончательного проекта (учебный план в конце).Это в основном часть программного обеспечения, которая использует все, что вы узнали.

У меня было несколько идей, таких как проектирование моего собственного Roguelike (должно быть, вроде Nethack, только для одного игрока), но я быкак некоторые предложения об альтернативах.Это не должно быть игрой, может быть чем угодно.Срок составляет полтора месяца, и у меня есть другие проекты и т. Д., Поэтому он не должен быть слишком трудоемким для реализации.

Требования:

  • Используйте, по крайней мере, 4 устройства ввода-вывода, одно из которых должно быть мышью или последовательным портом
  • Некоторые из этих устройств должны использовать прерывания, другие должны использовать опрос
  • Языки: C иСборка (обязательно, в противном случае есть штраф)
  • Реализация конечных автоматов

Периферийные устройства, на которых мы читали лекции:

  • Видеокарта - Графический режим
  • Графическая карта - текстовый режим
  • Мышь
  • Клавиатура
  • Счетчик реального времени
  • Встроенный динамик (через таймеры 0 и 2)
  • Последовательный порт

Это сокращенная программа:

Периферийные устройства ввода / вывода и их работа Прямое сопоставление в адресном пространстве процесса Доступ к периферийным устройствамв режиме опроса и прерывания Процессор прерывает в архитектуре IA-32Ture и контроллер прерываний.Написание процедур обработки прерываний в ассемблере и в C Изучение некоторых типичных периферийных устройств персонального компьютера, таких как клавиатура, мышь, видеокарта, часы реального времени, таймер, громкоговоритель и последовательный порт.

Программирование на языке программирования C:основные отличия по отношению к языку C ++;структурированное программирование на языке C. Компоновка памяти процесса.Вызовы функций: механизмы, передача параметров, хранение локальных переменных и возвращаемых значений.Комбинированное программирование на C и сборке семейства процессоров IA-32.Создание и использование библиотек.Статическое связывание объектного кода.

Использование инструментов разработки программного обеспечения: gcc, make, gdb, ar, prof, diff, patch и SVN

Спасибо за потраченное время!

Ответы [ 5 ]

2 голосов
/ 09 ноября 2010

Если вы можете соединить два компьютера друг с другом через последовательный порт и внедрить один и тот же код на каждом компьютере, то теоретически вы можете разделить время кодирования между вами и владельцем другого компьютера, что минимизирует некоторые усилия! (Ну, возможно, доводим до максимума аргументы над дизайном!)

Один проект, который приходит на ум, - это реализация простого текстового сетевого приложения между двумя компьютерами. Вы вводите текст в экранный буфер, с помощью мыши нажимаете на цель, которая инициирует отправку сообщения через последовательный порт на другой компьютер, который отображает его на своем собственном экране и подает звуковой сигнал говорящему о том, что сообщение был получен. Также компьютер-отправитель может подавать звуковой сигнал другому динамику для успешной передачи, ошибок передачи или повторных попыток. Это охватывает все оборудование, с которым вы познакомились.

Для дополнительного бонусного дизайна протокол обмена сообщениями должен быть отказоустойчивым или обнаруживать ошибки приема.

Звучит как отличный проект, что бы вы ни делали! Однако будьте осторожны, если вы не согласны с проектом. В ваших требованиях достаточно мяса, чтобы занять все ваше время, не разрабатывая при этом целую игру. Используйте принцип Kiss

2 голосов
/ 09 ноября 2010

Один простой вариант - пойти на игры.Они всегда могут использовать несколько устройств, таких как мышь, клавиатура, таймеры, видеокарта и (в зависимости от того, что вы делаете) RTC.

Другой вариант - использовать приложение «Music Composer».Например, вы можете написать (используя клавиатуру и мышь) песню (частоту нот, длительность), а затем позволить компьютерному динамику воспроизводить ее.

Вы также можете выбрать «приложение для часов / календаря».Он может нарисовать часы на экране (которые могут быть сложнее, чем могут показаться, если вы нарисуете аналоговые часы на экране), а затем позволить пользователю настроить время дня (сохраняя изменения в RTC).Часы могут также включать будильник и немного тикающего звука.Что касается календаря, вы также можете позволить пользователю создавать «события» в календаре, которые могут работать немного как сигналы тревоги.

Вы также можете попробовать написать свой собственный блокнот-подобное приложение.Для этого потребуется рабочий GUI (область записи, меню и т. Д.).Это может быть либо в текстовом или графическом режиме.Вы можете обнаружить нажатие клавиатуры, чтобы добавить символ, обрабатывать CAPS LOCK (что дает вам возможность испортить светодиоды клавиатуры).Вы можете использовать положение мыши / щелчки, чтобы изменить положение в текстовом редакторе или вызвать меню.Затем таймеры должны иметь мигающую карету в текстовом редакторе.Нажатие на отключенную опцию меню может привести к тому, что короткий звук динамика будет указывать на недопустимое действие.

Я бы порекомендовал написать большую часть кода на C, за исключением маленьких битов в Assembly.ISR - хорошая возможность для кода сборки.

Относительно конечных автоматов:

  1. У игр может быть много состояний («Главное меню», «Игра в игру», «Меню паузы», «»Высокие баллы ") с четко определенными переходами между состояниями.
  2. Композитор музыки может иметь и некоторые состояния (" Стоп "," Пауза "," Воспроизведение ")
  3. Приложение часов может иметь состояниятакие как «Показать часы», «Показать календарь», «Окно сообщений о событиях», «Окно сообщений о событиях», «Окно сообщений о событиях с ожидающим сигналом тревоги.
  4. Приложение« Блокнот »может иметь такие состояния, как« Редактирование текста », «В меню» или «В окне сообщения»)

Доступ к большинству упомянутых вами устройств возможен с прерываниями. К сожалению, я не могу придумать хороших возможностей для опроса ...

2 голосов
/ 09 ноября 2010

Разбейте его на две программы.

Program One - это программа, похожая на графический интерфейс, которая показывает некоторые интерактивные графические элементы для набора тестов, которые можно выполнить.После нажатия появляется какое-то текстовое поле, и вы можете нажать START, чтобы начать тестирование.Команда отправляет последовательный порт на удаленный компьютер, на котором запущена программа Two.Программа 2 выполняет тестирование и возвращает какой-то статус обратно в программу 1. Статус отображается, и можно щелкнуть другой рисунок.

Программа два прослушивает последовательный порт и получает команду от программы 1, выполняет его и отправляет обратно статус.

Когда программа 1 получает щелчок по значку ВЫЙТИ, она также сообщает программе 2 о необходимости выключения.

При необходимости добавляйте прибамбасы.1009 *

2 голосов
/ 09 ноября 2010

Музыкальный синтезатор / трекер как программа?Используйте клавиатуру для «воспроизведения», сохранения / записи песен, обработки аудио и IO-фрагментов.Может быть, использовать мышь в качестве контроллера высоты тона или связать два компьютера последовательным портом для совместной игры?

1 голос
/ 10 ноября 2010

Как насчет игры PONG для двух игроков, управляемой мышью и играемой через последовательный порт?

...