Инициализация ветки develop
This commit is contained in:
parent
63fcaff3be
commit
8a38d78c25
14
.gitignore
vendored
14
.gitignore
vendored
@ -1,14 +1,2 @@
|
|||||||
# ---> CMake
|
build/
|
||||||
CMakeLists.txt.user
|
|
||||||
CMakeCache.txt
|
|
||||||
CMakeFiles
|
|
||||||
CMakeScripts
|
|
||||||
Testing
|
|
||||||
Makefile
|
|
||||||
cmake_install.cmake
|
|
||||||
install_manifest.txt
|
|
||||||
compile_commands.json
|
|
||||||
CTestTestfile.cmake
|
|
||||||
_deps
|
|
||||||
CMakeUserPresets.json
|
|
||||||
|
|
||||||
|
|||||||
77
readme.md
Normal file
77
readme.md
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# Тестовое задание
|
||||||
|
|
||||||
|
## Описание
|
||||||
|
Программа демонстрирует взаимодействие клиента с сервером посредством протокола HDLC
|
||||||
|
|
||||||
|
## Структура проекта
|
||||||
|
- **fifo** - исходные коды для работы с fifo
|
||||||
|
- fifo_type.h - структуры и типы для работы с fifo
|
||||||
|
- fifo.h
|
||||||
|
- fifo.c
|
||||||
|
- **hdlc** - исходные коды для работы с hdlc
|
||||||
|
- hdlc_type.h - структуры и типы для работы с hdlc
|
||||||
|
- hdlc.h
|
||||||
|
- hdlc.c
|
||||||
|
- main.h
|
||||||
|
- main.c
|
||||||
|
- tools.c - вспомагательные функции
|
||||||
|
- worker - исходные коды обработчиков (хостов)
|
||||||
|
- worker.h
|
||||||
|
- worker.c
|
||||||
|
- worker_master.c - файл с ведущим хостом
|
||||||
|
- worker_slave.c - файл с ведомым хостом
|
||||||
|
|
||||||
|
|
||||||
|
## Задача
|
||||||
|
Необходимо разработать программу на языке C без использования сторонних
|
||||||
|
библиотек и наработок (ChatGPT, исходники с github и т.п.) для реализации
|
||||||
|
её основных функций. Для реализации вспомогательных функций типа ввода-вывода,
|
||||||
|
расчёта CRC и т.п. можно использовать библиотечные функции или исходные
|
||||||
|
тексты библиотек с github или аналогичного ресурса.
|
||||||
|
|
||||||
|
Программа должна реализовывать модель системы, состоящей из двух узлов
|
||||||
|
(ведущего и ведомого), взаимодействующих друг с другом по протоколу
|
||||||
|
HDLC (https://ru.wikipedia.org/wiki/HDLC) через два байтовых FIFO размером 8 байт.
|
||||||
|
Один блок FIFO должен обеспечивать передачу байт данных от ведущего к ведомому,
|
||||||
|
а другой в обратном направлении. Программная реализация FIFO должна обеспечивать
|
||||||
|
возможность записи и чтения одного байта в FIFO, а также проверку его состояния:
|
||||||
|
FIFO пуст или FIFO полон. Вся логика работы программы должна быть реализована
|
||||||
|
в виде общего цикла в функции main (big loop OS) и демонстрировать отправку
|
||||||
|
ведущим узлом команды в направлении ведомого, ожидание получения ответа от ведомого,
|
||||||
|
получение и обработку ответа. При этом на экран в текстовом виде должны
|
||||||
|
выводиться сообщения, позволяющие понять что сейчас происходит и в каком из
|
||||||
|
узлов моделируемой системы.
|
||||||
|
|
||||||
|
Адреса на виртуальной шине HDLC можно выбрать константными.
|
||||||
|
Управляющее поле пакета должно обеспечивать выбор команды, которая будет
|
||||||
|
выполняться на стороне ведомого устройства. Размер информационного поля пакета должен
|
||||||
|
быть не менее 16 байт. При реализации обработки команды на стороне
|
||||||
|
ведомого не требуется реализовывать какую-то сложную обработку, достаточно например
|
||||||
|
поменять порядок байт в исходной полученной команде или что-то вроде этого.
|
||||||
|
|
||||||
|
Сразу уточню, что по условиям задачи посылка от ведущего к ведомому целиком
|
||||||
|
не влезет в FIFO между ними. Поэтому по сути необходимо будет реализовать работу в
|
||||||
|
асинхронном режиме записи в FIFO с опросом его состояния и возвратом управления
|
||||||
|
в главный цикл при невозможности чтения или записи из/в FIFO.
|
||||||
|
|
||||||
|
При оценке будет учитываться как логика работы, так и стиль написания
|
||||||
|
(имена функций и переменных должны быть осмысленными, комментарии должны
|
||||||
|
пояснять ключевые решения в коде и т.п.).
|
||||||
|
|
||||||
|
Программа должна компилироваться типовым компилятором и не должна требовать
|
||||||
|
наличия нестандартных библиотек (для реализации достаточно stdio, stdlib и т.п.
|
||||||
|
стандартных библиотек С).
|
||||||
|
|
||||||
|
Апдейт
|
||||||
|
Протокол нужно реализовать как транспорт для своих тестовых команд. Поэтому в нём должны быть реализованы только самые базовые вещи: фрейминг, проверка контрольных сумм, байт-стаффинг и т.п. Минимальная реализация.
|
||||||
|
Никаких множественных буферов пакетов не требуется, достаточно одного буфера на приём и одного буфера на передачу на каждом из участников обмена. Ведущий всегда отправляет один пакет данных с командой и параметрами, а далее ждёт получения ответа на свою команду от ведомого. Аналогично и у ведомого - он ждёт получения команды от ведущего, а дальше отправляет ответ ведущему и пока не отправил новые запросы от ведущего не обрабатывает. Никаких очередей команд. FIFO, указанный в задании, используется для эмуляции канала между ведущим и ведомым устройствами, т.к. как RX и TX FIFO UART. В канале предполагается наличие контроля потока и блокировка передачи при заполнении FIFO, т.е. если FIFO оказалось забито, то отправитель данных будет ждать пока оно освободится.
|
||||||
|
|
||||||
|
|
||||||
|
## Функции и их параметры
|
||||||
|
### tools
|
||||||
|
- TOOL_workerPrintBlocks
|
||||||
|
- hdlcHost_s *worker - указатель на машину
|
||||||
|
- uint8_t mode - режим
|
||||||
|
- 0 - не выводить ничего
|
||||||
|
- 1 - вывести содержимое пакета
|
||||||
|
- 3 - вывести содержимое буфера
|
||||||
Loading…
x
Reference in New Issue
Block a user