starline

  1. Разработать модуль управления кольцевыми буферами размером до 256 байт включительно, предоставляющий пользователю следующие возможности: Инициализация буфера. Извлечение байта из буфера (всегда по принципу FIFO). Добавление байта в буфер (при переполнении новые данные пишутся поверх старых). Получение данных о количестве свободных байт в буфере. Предусмотреть работу функций модуля в обработчиках прерываний.

  2. Реализовать проект в Keil, демонстрирующий использование буфера в следующей ситуации: В любом районе некоторого города должно быть расположено 10x домов, пронумерованных последовательно от 1 до 10^x, где x < 10. На каждом доме висит табличка с его номером, записанным в десятичной системе счисления, других записей в районе нет. Нанятые градостроителями урбанисты сообщили, что для гармонии на улицах должно быть определенное количество написанных цифр "6", и разработали с использованием кольцевого буфера эффективный алгоритм, подсчитывающий количество шестёрок при определённом числе домов в этом районе. Проект в Keil имитирует тестирование демо-платы урбанистов с программой подсчёта шестёрок следующим образом: сразу после инициализации программа усыпляет процессор, при нажатии на кнопку будит ядро, после чего начинает каждые 1-50мс класть в буфер случайные данные со случайным размером от 1 до 50 байт. Как только буфер оказывается не пуст, из него извлекается байт, интерпретируется как целое знакового типа Y, и:

Если Y меньше 10 по модулю, по UART отправляется второй значимый байт числа, равного суммарному количеству шестёрок, написанных на табличках в районе города с 10 в степени модуль Y домов. Если Y больше или равно 10 по модулю, в UART отправляется извлечённый байт.