Инкапсулирует операции записи при диагностической передаче данных и координирует выполнение через обработчики записи.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 6f5de6951762ПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Инкапсулирует операции записи при диагностической передаче данных и координирует выполнение через обработчики записи.
Класс ara::diag::DataTransferWriteSession инкапсулирует операции записи при диагностической передаче данных и координирует перенаправление в ориентированные на приложение обработчики записи ([SWS_DM_01555]). При входящих службах UDS, таких как TransferData (0x36) или RequestTransferExit (0x37), экземпляр диагностического сервера вызывает соответствующие методы Write или Exit зарегистрированных обработчиков ([SWS_DM_01317]). Поскольку конструктор по умолчанию и конструктор копирования удалены, сессия существует как исключающий создание копий безопасный относительно исключений одиночный экземпляр, создание которого, вероятно, осуществляется через шаблонные конструкторы. Вопрос (открытый)
Контекст
Класс ara::diag::DataTransferWriteSession инкапсулирует все варианты операций записи при передаче данных в функциональной области Adaptive Platform Diagnostics ([SWS_DM_01555]). Он выступает связующим элементом между экземпляром диагностического сервера платформы и специализированными реализациями приложения, которые осуществляют фактическую передачу данных на запись.
В рамках диагностических служб, таких как RequestFileTransfer (например, при режиме работы ReplaceFile (0x03) согласно [SWS_DM_01313]), экземпляр диагностического сервера принимает запросы на передачу. Если в дальнейшем поступают диагностические запросы службы UDS TransferData (0x36), сервер делегирует их методу Write того класса обработчика, который привязан к соответствующей DataTransferWriteSession ([SWS_DM_01317]). После передачи всех блоков данных служба RequestTransferExit (0x37) сигнализирует о завершении, после чего экземпляр диагностического сервера вызывает метод Exit зарегистрированного обработчика ([SWS_DM_01318]).
Контекстная диаграмма: взаимодействие между диагностическим сервером, DataTransferWriteSession и классом обработчика уровня приложения. Источники: [SWS_DM_01555], [SWS_DM_01317], [SWS_DM_01318].
Для обеспечения однозначного владения DataTransferWriteSession не поддерживает ни копирование, ни присваивание копированием: как конструктор копирования ([SWS_DM_01559]), так и оператор присваивания копированием ([SWS_DM_01560]) объявлены как delete. Следовательно, экземпляры существуют как исключительные одиночные экземпляры.
Напротив, класс поддерживает полную семантику перемещения: конструктор перемещения ([SWS_DM_01557]) и оператор присваивания перемещением ([SWS_DM_01558]) объявлены как стандартная реализация и специфицированы как noexcept, а также как безопасные относительно исключений («exception safe»). Они позволяют эффективно передавать состояние сессии между контекстами программы. Уничтожение осуществляется через безопасный относительно исключений стандартный деструктор (~DataTransferWriteSession() noexcept = default, [SWS_DM_01556]). В отношении параллелизма использование, вероятно, происходит преимущественно последовательно в рамках исполняющего потока сервера, поскольку механизмы синхронизации для конкурентного доступа не документированы. Вопрос Q-2c2278884fa11b21 (открытый)
Путь использования
Штатный процесс передачи данных на запись осуществляется в следующие этапы:
Инициализация: при поступлении запроса на запись (например, RequestFileTransfer с kReplace согласно [SWS_DM_01313]) настраивается DataTransferWriteSession. При этом обработчик операций записи уровня приложения регистрируется через шаблонные конструкторы (AUTOSAR_AP_SWS_Diagnostics §8.10 «Context of RequestFileTransfer»).
Передача блоков данных: для каждого поступающего запроса службы UDS TransferData (0x36) экземпляр диагностического сервера вызывает метод Write зарегистрированного класса обработчика ([SWS_DM_01317]). Этот шаг циклически повторяется для всех блоков передачи.
Завершение сессии: после полной передачи диагностический сервер принимает RequestTransferExit (0x37) и затем вызывает метод Exit класса обработчика ([SWS_DM_01318]).
Очистка: после успешного завершения или при преждевременном прерывании объект сессии уничтожается ([SWS_DM_01556]).
Обработка ошибок и надежность в ara::diag::DataTransferWriteSession существенным образом опираются на статическую типобезопасность и безопасность исключений:
Предотвращение недопустимых состояний объекта: удаление конструктора по умолчанию ([SWS_DM_01339]) предотвращает возможность существования неинициализированных объектов сессии без привязанного обработчика. Запрет операций копирования ([SWS_DM_01559], [SWS_DM_01560]) исключает противоречивые состояния из-за множественного владения уже на этапе компиляции.
Безопасность исключений при перемещении и уничтожении: объявление конструктора перемещения ([SWS_DM_01557]), присваивания перемещением ([SWS_DM_01558]) и деструктора ([SWS_DM_01556]) как noexcept гарантирует, что при передаче ресурсов и освобождении сессии во время выполнения исключения не генерируются.
Преждевременное прерывание: если передача данных завершается преждевременным сбоем, деструктор noexcept гарантирует надежную очистку объекта сессии также и в рамках раскрутки стека при исключениях ([SWS_DM_01556]).
Данное руководство основано на документах спецификации AUTOSAR Adaptive Platform Release R25-11.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал