Инициализация ветки develop
This commit is contained in:
parent
63fcaff3be
commit
8a38d78c25
14
.gitignore
vendored
14
.gitignore
vendored
@ -1,14 +1,2 @@
|
||||
# ---> CMake
|
||||
CMakeLists.txt.user
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
CMakeScripts
|
||||
Testing
|
||||
Makefile
|
||||
cmake_install.cmake
|
||||
install_manifest.txt
|
||||
compile_commands.json
|
||||
CTestTestfile.cmake
|
||||
_deps
|
||||
CMakeUserPresets.json
|
||||
build/
|
||||
|
||||
|
||||
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