Проверки Simulink Coder

Simulink Coder проверяет обзор

Используйте Simulink® Coder™ проверки Model Advisor, чтобы сконфигурировать вашу модель для генерации кода.

Смотрите также

Проверяйте повторное использование кода подсистемы

ID проверки: mathworks.codegen.SubsysCodeReuse

Идентифицируйте блоки CodeReuseSubsystem, которые не снова используют код.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Один или несколько блоков CodeReuseSubsystem в модели не снова используют код.Измените блоки CodeReuseSubsystem в модели так, чтобы они снова использовали код.

Возможности и ограничения

Вы можете:

  • Осуществите эту проверку своих моделей библиотеки.

  • Посмотрите под масками,

  • Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check™.

Смотрите также

Идентифицируйте блоки, использующие индексацию на основе одну

ID проверки: mathworks.codegen.cgsl_0101

Идентифицируйте блоки, использующие индексацию на основе одну.

Описание

Основанная на нуле индексация более эффективна в сгенерированном коде, чем индексация на основе одна.

Используя основанную на нуле индексацию увеличивает КПД выполнения сгенерированного кода.

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Модель или подсистема содержат блоки, сконфигурированные для индексации на основе одной.Сконфигурируйте блоки для основанной на нуле индексации. Обновите блоки поддержки.

Возможности и ограничения

Вы можете:

  • Осуществите эту проверку своих моделей библиотеки.

  • Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.

Смотрите также

Проверяйте решатель на генерацию кода

ID проверки: mathworks.codegen.SolverCodeGen

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

Описание

Неправильные параметры конфигурации могут мешать генератору кода произвести код. Шаги расчета Underspecifying могут привести к нежелательным результатам. Постарайтесь не генерировать код, который может повредить данные или произвести непредсказуемое поведение.

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Тип решателя установлен неправильно для генерации кода уровня модели.

В диалоговом окне Configuration Parameters, на панели Solver, устанавливает Type на Fixed-step.

Многозадачные диагностические опции не установлены в error.

В диалоговом окне Configuration Parameters, на панели Diagnostics, наборе

Советы

Вы не должны изменять настройки решателя, чтобы сгенерировать код от подсистемы. Процесс сборки автоматически изменяет Solver type в fixed-step когда вы щелкаете правой кнопкой по подсистеме и выбираете C/C++ Code> Build This Subsystem или C/C++ Code> Generate S-Function из контекстного меню подсистемы.

Смотрите также

Проверяйте на блоки, не поддержанные генерацией кода

ID проверки: mathworks.codegen.codeGenSupport

Идентифицируйте блоки, не поддержанные генерацией кода.

Описание

Эта проверка частично идентифицирует построения модели, которые не подходят для генерации кода, как идентифицировано в таблицах Simulink Block Support для Simulink Coder и Embedded Coder®. Если вы используете блоки с примечаниями поддержки для генерации кода, рассматриваете информацию и следуете данному совету.

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Модель или подсистема содержат блоки, которые не должны использоваться для генерации кода.Рассмотрите заменяющий блоки перечисленный в результатах. Кликните по элементу из списка сомнительных элементов, чтобы определить местоположение условия.

Возможности и ограничения

Вы можете:

  • Осуществите эту проверку своих моделей библиотеки.

  • Анализирует содержимое соединенных блоков библиотеки.

  • Анализирует содержимое в подсистемах маскированных.

  • Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.

Смотрите также

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

ID проверки: mathworks.codegen.toolchainInfoUpgradeAdvisor.check

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

Описание

Проверки, использует ли модель подход make-файла шаблона или подход набора инструментальных средств, чтобы создать сгенерированный код.

Доступный с Simulink Coder.

Когда вы открываете модель, созданную перед R2013b, которому установили System target file на ert.tlc, ert_shrlib.tlc, или grt.tlc программное обеспечение автоматически пытается обновить модель от использования подхода make-файла шаблона к использованию подхода набора инструментальных средств.

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

Чтобы определить, который использует подход ваша модель, можно также посмотреть на панель Генерации кода в диалоговом окне Configuration Parameters. Подход набора инструментальных средств использует следующие параметры, чтобы создать сгенерированный код:

Подход make-файла шаблона использует следующие настройки, чтобы создать сгенерированный код:

  • Compiler optimization level

  • Custom compiler optimization flags

  • Generate makefile

  • Template makefile

Результаты и рекомендуемые действия

УсловиеРекомендуемое действиеКомментарий
Модель сконфигурирована, чтобы использовать подход набора инструментальных средств.Никакое действие.Модель была автоматически обновлена.
Модель не сконфигурирована, чтобы использовать подход набора инструментальных средств. Модель не может быть автоматически обновлена, чтобы использовать подход набора инструментальных средств.Системный конечный файл не совместим набором инструментальных средств. Установите System target file на совместимую набором инструментальных средств цель, такую как ert.tlc, ert_shrlib.tlc, или grt.tlc.
Модель не сконфигурирована, чтобы использовать подход набора инструментальных средств. (Значения параметров не являются значениями по умолчанию.)Модель может быть автоматически обновлена, чтобы использовать подход набора инструментальных средств. Нажмите Update Model.Параметры устанавливаются на свои значения по умолчанию, кроме Compiler Optimization Level, который является набором Optimizations on (faster runs). Нажатие на Update Model устанавливает Compiler Optimization Level на свое значение по умолчанию, Optimizations off (faster builds), и затем обновляет модель. Обновленной модели установили Build Configuration на Faster Builds. Сохранение модели делает эти изменения постоянными.
Модель не сконфигурирована, чтобы использовать подход набора инструментальных средств. (Значения параметров не являются значениями по умолчанию.)Модель не может быть автоматически обновлена, чтобы использовать подход набора инструментальных средств.

Один или несколько следующих параметров не устанавливается на его значение по умолчанию:

  • Generate makefile (значение по умолчанию: Enabled)

  • Template makefile (значение по умолчанию: Целевой TMF по умолчанию)

  • Compiler optimization level (значение по умолчанию: Optimizations off (faster builds))

  • Make command (значение по умолчанию: make_rtw без аргументов)

См. модель обновления, чтобы использовать подход набора инструментальных средств

Результаты действия

Нажатие на Update model обновляет модель, чтобы использовать подход набора инструментальных средств, чтобы создать сгенерированный код.

Смотрите также

Проверяйте и обновите модель целевого процессора, чтобы использовать ert.tlc системный конечный файл

ID проверки: mathworks.codegen.codertarget.check

Проверяйте и обновите модель целевого процессора, чтобы использовать ert.tlc системный конечный файл.

Описание

Проверяйте и обновите модели, System target file которых установлен в файл кроме ert.tlc и чей целевой компьютер является одним из поддерживаемых процессоров Instruments™ C2000™ Техаса, чтобы использовать ert.tlc и подобные настройки.

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
System target file установлен в ert.tlc - Embedded Coder.Никакое действие

System target file установлен в файл кроме ert.tlc и параметр Hardware board устанавливается на процессор, который поддерживается Пакетом поддержки Embedded Coder для Процессоров Texas Instruments C2000.

Запустите соответствующую регистрацию Советника по вопросам Обновления:

  1. Во вкладке Modeling Редактора Simulink нажмите Model Advisor.

  2. Откройте панель Upgrade Advisor и выберите, проверяют Check and update embedded target model to use ert.tlc system target file.

  3. Щелкните правой кнопкой по проверке и выберите Run This Check.

  4. После передач проверки откройте диалоговое окно Configuration Parameters, перейдите к Hardware Implementation, разделяют на области и подтверждают, что правильный Hardware board выбран.

Результаты действия

Нажатие на Run This Check автоматически устанавливает следующие параметры на панели Code Generation в диалоговом окне модели Configuration Parameters:

  • Параметр System target file к ert.tlc.

  • Параметр Toolchain, чтобы совпадать с предыдущим набором инструментальных средств.

  • Параметр Build configuration, чтобы совпадать с конфигурацией сборки.

Возможности и ограничения

Новый рабочий процесс использует подход набора инструментальных средств, который использует расширенные make-файлы, чтобы создать сгенерированный код. Это не обеспечивает эквивалент установке параметра Build format на Project в предыдущей настройке. Поэтому новый рабочий процесс не может автоматически сгенерировать проекты IDE в CCS 3.3 IDE.

Смотрите также

Настройка набора инструментальных средств

Проверяйте и обновите модели, которые используют цели, которые значительно изменились через различные релизы MATLAB

ID проверки: mathworks.codegen.realtime2CoderTargetInfoUpgradeAdvisor.check

Проверяйте и обновите модели с целями Simulink, которые значительно изменились через различные релизы MATLAB®.

Описание

Сохраните модель, которую вы обновили, чтобы работать с текущей установкой MATLAB.

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Модель использует цель, которая изменилась значительно начиная с релиза MATLAB, в котором это было первоначально сохранено.Модель Save
Модель не использует цель Simulink или использует последнюю версию цели.Никакое действие
Модель автоматически обновляется.Модель Save
Недопустимая настройка режима external mode.В Configuration Parameters> панель Interface, обновите установки параметров режима external mode, чтобы совпадать с характеристиками вашей целевой хостом связи.

Модель повреждается.

Закройте и вновь откройте модель. Если проблема сохраняется, сбросьте Configuration Parameters> Hardware Implementation> Hardware board.

Результаты действия

Нажатие на Save model обновляет модель, чтобы работать с текущей установкой MATLAB и сохраняет модель.

Смотрите также

Сконфигурируйте производство и протестируйте оборудование

Проверяйте на блоки, которые имеют ограничения на настраиваемые параметры

ID проверки: mathworks.codegen.ConstraintsTunableParam

Идентифицируйте блоки с ограничениями на настраиваемые параметры.

Описание

Блоки Lookup Table имеют строгие ограничения, когда они являются настраиваемыми. Если вы нарушаете ограничения блока интерполяционной таблицы, сгенерированный код производит неправильные ответы.

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Блоки Lookup Table имеют настраиваемые параметры.

При настройке параметров в процессе моделирования или при выполнении сгенерированного кода, вы должны:

  • Сохраните монотонность установки для параметра Vector of input values.

  • Сохраните номер и местоположение нулевых значений, которые вы задаете для Vector of input values и параметров Vector of output values, если вы задаете несколько нулевых значений для параметра Vector of input values.

Блоки Lookup Table (2-D) имеют настраиваемые параметры.

При настройке параметров в процессе моделирования или при выполнении сгенерированного кода, вы должны:

  • Сохраните монотонность установки для параметров Column index of input values и Row index input values.

  • Сохраните номер и местоположение нулевых значений, которые вы задаете для Row index input values, Column index of input values и параметров Vector of output values, если вы задаете несколько нулевых значений для параметров Column index of input values или Row index input values.

Блоки Lookup Table (n-D) имеют настраиваемые параметры.При настройке параметров в процессе моделирования или при выполнении сгенерированного кода, необходимо сохранить увеличивающуюся монотонность значений точки останова для каждой табличной размерности Breakpoints n.

Возможности и ограничения

Если у вас есть лицензия Simulink Check, можно исключить блоки и графики от этой проверки.

Смотрите также

Проверяйте на несоответствие настройки модели - ссылки

ID проверки: mathworks.codegen.MdlrefConfigMismatch

Идентифицируйте настройки параметра конфигурации модели, на которые ссылаются, которые не совпадают с настройками параметра конфигурации топ-модели.

Описание

Генератор кода не может создать код для топ-моделей, которые содержат модели, на которые ссылаются, с различными, несовместимыми настройками параметра конфигурации.

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
У топ-модели и модели, на которую ссылаются есть противоречивые настройки параметра конфигурации модели. Измените заданные настройки конфигурации модели.

Смотрите также

Времена контрольного образца и режим управления задачами

ID проверки: mathworks.codegen.SampleTimesTaskingMode

Настройте шаг расчета и режим управления задачами для вашей системы.

Описание

Неправильный режим управления задачами может привести к неэффективному выполнению кода или неправильному сгенерированному коду.

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Модель представляет многоскоростную систему, но не сконфигурирована для многозадачности.Выберите параметр конфигурации модели Treat each discrete rate as a separate task. Когда вы выбираете параметр, многозадачное выполнение применяется для многоскоростной модели. Для получения дополнительной информации смотрите Основанное на времени Планирование и Генерацию кода.
Модель сконфигурирована для многозадачности, но многозадачность не желательна на целевом компьютере. Например, операционная система не поддерживает многопроцессорную обработку, или целевой компьютер является пустым металлом (не запускает операционную систему), и приложение не предусматривает многозадачную схему выполнения.Параметр конфигурации модели Clear Treat each discrete rate as a separate task. Когда вы очищаете параметр, однозадачное выполнение применяется. Для получения дополнительной информации смотрите Основанное на времени Планирование и Генерацию кода.

Смотрите также

Основанное на времени планирование и генерация кода

Проверяйте на форматы идентификатора генерации кода, используемые для модели - ссылки

ID проверки: mathworks.codegen.ModelRefRTWConfigCompliance

Проверки на модели, на которые ссылаются, в модели, ссылающейся на иерархию, для которой генерация кода изменяет настройки параметра конфигурации, которые включают форматы идентификатора.

Описание

В моделях, на которые ссылаются, если следующий Configuration Parameters> Code Generation> параметры Identifiers имеют настройки, которые не содержат $R лексема (который представляет имя образца модели), генерация кода предварительно ожидает $R лексема к формату идентификатора.

  • Global variables

  • Global types

  • Subsystem methods

  • Constant macros

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие

Скрипт, который работает со сгенерированным кодом, использует имена модели та генерация кода изменения.

Обновите скрипт, чтобы использовать сгенерированное имя (который включает добавленный $R лексема).

Проверяйте на относительное изменение порядка выполнения для блоков Записи Чтения и Хранилища данных Хранилища данных

ID проверки: mathworks.design.datastoresimrtwcmp

Проверки, которые не изменяет порядок выполнения Data Store Read и блоков Data Store Write, когда модель скомпилирована для генерации кода.

Описание

Порядок выполнения задает последовательность, в которой Data Store Read и Data Store Write блокируют доступ блок Data Store Memory. Проверка Model Advisor сравнивает порядок выполнения от до осуществления проверки (нормальный режим симуляции) к порядку выполнения после компиляции проверки (режим генерации кода). Проверка передает, когда порядок выполнения является тем же самым. Когда существуют различия, проверка выпускает Warning и идентифицирует несоответствия в результатах.

Доступный с Simulink Coder.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие

Порядок выполнения Data Store Read и блоков Data Store Write отличается между режимом симуляции и режимом генерации кода.

В результатах Model Advisor, под Action, нажимают Modify block priorities. Model Advisor изменяет блоки, таким образом, порядок выполнения в режиме симуляции совпадает с этим в режиме генерации кода.

Смотрите также

Доступные проверки на цели генерации кода

Проверки целей генерации кода упрощают разработку и поиск и устранение неисправностей моделей Simulink и подсистем, которые вы хотите использовать, чтобы сгенерировать код.

Советник Генерации кода включает следующие проверки от Simulink, Simulink Coder и Embedded Coder для каждой из целей генерации кода. Две проверки, уникальные для Советника Генерации кода, включены ниже списка.

ПроверятьКПД выполнения
(все цели)
КПД ROM
(Основанные на ERT цели)
КПД RAM
(Основанные на ERT цели)
Меры безопасности
(Основанные на ERT цели)
Трассируемость
(Основанные на ERT цели)
Отладка
(все цели)
Инструкции MISRA C:2012
(Основанные на ERT цели)
Polyspace®
(Основанные на ERT цели)
Проверяйте настройки конфигурации модели по целям генерации кодаВключенныйВключенныйВключенныйВключенныйВключенныйВключенныйВключенный (см. примечание ниже),Включенный
Проверяйте на оптимальную виртуальность шиныВключенныйВключенныйВключенныйN/AN/AN/AN/AN/A
Идентифицируйте сомнительные блоки в заданной системеВключенный ВключенныйВключенныйN/AN/AN/AN/AN/A
Проверяйте аппаратную реализацию (Embedded Coder)Включенный, если Embedded Coder доступенВключенный, если Embedded Coder доступенN/AN/AN/AN/AN/AN/A
Идентифицируйте сомнительные технические требования программной среды (Embedded Coder)Включенный то, когда Трассируемость не является более высоким приоритетом и Embedded Coder, доступноВключенный то, когда Трассируемость не является более высоким приоритетом и Embedded Coder, доступноN/AN/AN/AN/AN/AN/A
Идентифицируйте сомнительную отладку кода (ввод-вывод данных) (Embedded Coder)Включенный то, когда Трассируемость или Отладка не являются более высокими приоритетами и Embedded Coder, доступноВключенный то, когда Трассируемость или Отладка не являются более высокими приоритетами и Embedded Coder, доступноВключенный то, когда Трассируемость или Отладка не являются более высокими приоритетами и Embedded Coder, доступноN/AN/AN/AN/AN/A
Идентифицируйте сомнительные настройки подсистемы (Embedded Coder)N/AВключенный, если Embedded Coder доступенВключенный, если Embedded Coder доступенN/AN/AN/AN/AN/A
Идентифицируйте блоки, которые генерируют дорогой код округления (Embedded Coder)Включенный, если Embedded Coder доступенВключенный, если Embedded Coder доступенN/AN/AN/AN/AN/AN/A
Идентифицируйте сомнительные операции фиксированной точки (Embedded Coder)Включенный, если Embedded Coder или Fixed-Point Designer™ доступныВключенный, если Embedded Coder или Fixed-Point Designer доступныN/AN/AN/AN/AN/AN/A
Идентифицируйте блоки, использующие индексацию на основе однуВключенныйВключенныйN/AN/AN/AN/AN/AN/A
Идентифицируйте блоки интерполяционной таблицы, которые генерируют дорогой код проверки из области значений (Embedded Coder)Включенный, если Embedded Coder доступенВключенный, если Embedded Coder доступенN/AN/AN/AN/AN/AN/A
Проверяйте выходные типы логических блоков (Embedded Coder)Включенный, если Embedded Coder доступенN/AN/AN/AN/AN/AN/AN/A

Идентифицируйте несвязанные линии, входные порты и выходные порты

N/AN/AN/AВключенныйN/AN/AN/AN/A
Проверяйте Блоки памяти Хранилища данных на многозадачность, строгий контроль типов и проблемы затененияN/AN/AN/AВключенныйN/AN/AN/AN/A
Идентифицируйте выходные сигналы блока со временем непрерывной выборки и типом неданных с плавающей запятойN/AN/AN/AВключенныйN/AN/AN/AN/A
Проверяйте на блоки, которые имеют ограничения на настраиваемые параметрыN/AN/AN/AВключенныйN/AN/AN/AN/A
Проверяйте, включена ли диагностика чтения-записи для блоков хранилища данныхN/AN/AN/AВключенныйN/AN/AN/AN/A
Проверяйте использование параметра структуры с сигналами шиныN/AN/AN/AВключенныйN/AN/AN/AN/A
Проверяйте, что хранилище данных блокирует шаги расчета для моделирования ошибокN/AN/AN/AВключенныйN/AN/AN/AN/A
Проверяйте на потенциальные проблемы упорядоченного расположения, включающие доступ к хранилищу данныхN/AN/AN/AВключенныйN/AN/AN/AN/A
Проверяйте на блоки, не рекомендуемые для производственного развертывания C/C++ кода (Embedded Coder)N/AN/AN/AN/AN/AN/AВключенный, если Embedded Coder доступенN/A
Проверяйте на блоки, не рекомендуемые для MISRA C:2012 (Embedded Coder)N/AN/AN/AN/AN/AN/AВключенный, если Embedded Coder доступенN/A
Проверяйте на неподдерживаемые имена блока (Embedded Coder)N/AN/AN/AN/AN/AN/AВключенный, если Embedded Coder доступенN/A
Проверяйте использование блоков Присвоения (Embedded Coder)N/AN/AN/AN/AN/AN/AВключенный, если Embedded Coder доступенN/A
Проверяйте на битовые операции на целых числах со знаком (Embedded Coder)N/AN/AN/AN/AN/AN/AВключенный, если Embedded Coder доступенN/A
Проверяйте на (Embedded Coder) вызовов рекурсивной функцииN/AN/AN/AN/AN/AN/AВключенный, если Embedded Coder доступенN/A
Проверяйте на операции равенства и неравенства на значениях с плавающей точкой (Embedded Coder)N/AN/AN/AN/AN/AN/AВключенный, если Embedded Coder доступенN/A
Проверяйте на выражения случая переключателя без случая по умолчанию (Embedded Coder)N/AN/AN/AN/AN/AN/AВключенный, если Embedded Coder доступенN/A
Проверяйте параметры конфигурации на генерацию неэффективного кода насыщения (Embedded Coder)Включенный, если Embedded Coder доступенВключенный, если Embedded Coder доступенN/AВключенный, если Embedded Coder доступенN/AN/AN/AN/A

Примечание

То, когда Советник Генерации кода проверяет вашу модель по цели инструкций MISRA C:2012, инструмент не рассматривает все настройки параметра конфигурации, которые проверяются инструкциями MISRA C:2012, регистрируется в Model Advisor. Для полной проверки настроек параметра конфигурации:

  1. Откройте Model Advisor.

  2. Перейдите к By Task> Modeling Guidelines for MISRA C:2012.

  3. Запустите регистрации папки.

Для получения дополнительной информации об использовании Model Advisor смотрите Проверку Ваша Модель Используя Model Advisor.

Смотрите также

Идентифицируйте сомнительные блоки в заданной системе

Идентифицируйте блоки, не поддержанные генерацией кода или не рекомендуемые для развертывания.

Описание

Генератор кода создает код только для блоков, которые это поддерживает. Некоторые блоки не рекомендуются для производственного развертывания кода.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Блок не поддерживается генератором кода.Удалите заданный блок из модели или замените блок на рекомендуемый блок.
Блок не рекомендуется для производственного развертывания кода.Удалите заданный блок из модели или замените блок на рекомендуемый блок.
Проверяйте на блоки Gain, значение которых равняется 1.Замените блоки Gain на блоки Signal Conversion.

Возможности и ограничения

Вы можете:

  • Осуществите эту проверку своих моделей библиотеки.

  • Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.

Смотрите также

Блоки и продукты, поддержанные для генерации кода

Обзор исключения Model Advisor (Simulink Check)

Проверяйте настройки конфигурации модели по целям генерации кода

Проверяйте настройки параметра конфигурации на модель против целей генерации кода.

Описание

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

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Параметры устанавливаются на значения кроме значения, рекомендуемого для заданных целей.

Установите параметры на рекомендуемые значения.

Примечание

Изменение в одном значении параметров может повлиять на другие параметры. Передача проверки может взять несколько итераций.

Результаты действия

Нажатие на Modify Parameters изменяет значения параметров в рекомендуемые значения.

Смотрите также