exponenta event banner

Проверки кодера Simulink

Обзор проверок кодера Simulink

Используйте проверки Simulink ® Coder™ Model Advisor для настройки модели для создания кода.

См. также

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

Код чека: mathworks.codegen.SubsysCodeReuse

Определите блоки CodeReuseSubsystem, которые не используют код повторно.

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

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

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

Вы можете:

  • Выполните эту проверку для моделей библиотек.

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

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

См. также

Идентификация блоков с помощью индексирования на основе одного элемента

Код чека: mathworks.codegen.cgsl_0101

Определение блоков с помощью индексирования на основе одного элемента.

Описание

Индексация на основе нуля более эффективна в создаваемом коде, чем индексация на основе единицы.

Использование индексации на основе нуля повышает эффективность выполнения генерируемого кода.

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

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

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

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

Вы можете:

  • Выполните эту проверку для моделей библиотек.

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

См. также

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

Код чека: mathworks.codegen.SolverCodeGen

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

Описание

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

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

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

СостояниеРекомендуемое действие
Неверно задан тип решателя для генерации кода уровня модели.

В диалоговом окне «Параметры конфигурации» на панели «Решатель» задайте для параметра «Тип» значение Fixed-step.

Параметры диагностики многозадачности не установлены в значение error.

В диалоговом окне Параметры конфигурации (Configuration Parameters) на панели Диагностика (Diagnostics) задайте

Совет

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

См. также

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

Код чека: mathworks.codegen.codeGenSupport

Определите блоки, не поддерживаемые генерацией кода.

Описание

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

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

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

СостояниеРекомендуемое действие
Модель или подсистема содержит блоки, которые не должны использоваться для создания кода.Рассмотрите возможность замены блоков, перечисленных в результатах. Щелкните элемент из списка сомнительных элементов, чтобы найти условие.

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

Вы можете:

  • Выполните эту проверку для моделей библиотек.

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

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

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

См. также

Проверка и обновление модели для использования подхода toolchain для создания сгенерированного кода

Код чека: mathworks.codegen.toolchainInfoUpgradeAdvisor.check

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

Описание

Проверяет, использует ли модель подход makefile шаблона или подход toolchain для построения созданного кода.

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

При открытии модели, созданной перед R2013b, для которой для целевого файла системы задано значение ert.tlc, ert_shrlib.tlc, или grt.tlc программа автоматически пытается обновить модель с использования подхода make-файла шаблона до использования подхода toolchain.

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

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

В подходе makefile шаблона для построения сгенерированного кода используются следующие параметры настройки:

  • Уровень оптимизации компилятора

  • Пользовательские флаги оптимизации компилятора

  • Создать makefile

  • Файл создания шаблона

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

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

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

  • Создать makefile (по умолчанию включено)

  • Файл создания шаблона (по умолчанию: Target-specific default TMF)

  • Уровень оптимизации компилятора (по умолчанию: Optimizations off (faster builds))

  • Создать команду (по умолчанию: make_rtw без аргументов)

См. раздел Обновление модели для использования подхода на основе инструментальной цепочки

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

Если щелкнуть Обновить модель (Update model), модель будет обновлена, чтобы использовать подход цепочки инструментов для построения сгенерированного кода.

См. также

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

Код чека: mathworks.codegen.codertarget.check

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

Описание

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

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

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

СостояниеРекомендуемое действие
Системный целевой файл имеет значение ert.tlc - Embedded Coder.Никаких действий

Системный целевой файл имеет значение, отличное от ert.tlc и параметр Hardware board устанавливается на процессор, который поддерживается пакетом поддержки встроенного кодера для Texas Instruments C2000 Processors.

Выполните соответствующую проверку в помощнике по обновлению:

  1. На вкладке «Моделирование» редактора Simulink выберите «Помощник по модели».

  2. Откройте панель Помощник по обновлению (Upgrade Advisor) и выберите Проверить и обновить встроенную целевую модель, чтобы использовать файл назначения системы ert.tlc.

  3. Щелкните правой кнопкой мыши по чеку и выберите Выполнить эту проверку.

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

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

Если щелкнуть Выполнить эту проверку (Run This Check), на панели Создание кода (Code Generation) диалогового окна Параметры конфигурации модели (model Configuration Parameters) автоматически будут заданы следующие параметры.

  • Параметр целевого файла системы для ert.tlc.

  • Параметр «Цепь инструментов», соответствующий предыдущей цепи инструментов.

  • Параметр конфигурации построения, соответствующий конфигурации построения.

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

В новом рабочем процессе используется подход toolchain, который основан на расширенных makefile для создания сгенерированного кода. Он не эквивалентен заданию для параметра формата построения значения Project в предыдущей конфигурации. Поэтому новый поток операций не может автоматически создавать проекты среды IDE в среде CCS 3.3.

См. также

Конфигурация цепочки инструментов

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

Код чека: mathworks.codegen.realtime2CoderTargetInfoUpgradeAdvisor.check

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

Описание

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

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

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

СостояниеРекомендуемое действие
Модель использует целевой объект, который значительно изменился с момента выпуска MATLAB, в котором он был первоначально сохранен.Сохранить модель
Модель не использует целевой объект Simulink или использует последнюю версию целевого объекта.Никаких действий
Модель обновляется автоматически.Сохранить модель
Недопустимая конфигурация внешнего режима.На панели «Параметры конфигурации» > «Интерфейс» обновите настройки параметров внешнего режима в соответствии с характеристиками соединения хост-объект.

Модель повреждена.

Закройте и снова откройте модель. Если проблема сохраняется, сбросьте Параметры конфигурации > Аппаратная реализация > Аппаратная плата.

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

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

См. также

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

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

Код чека: mathworks.codegen.ConstraintsTunableParam

Определение блоков с ограничениями на настраиваемые параметры.

Описание

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

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

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

СостояниеРекомендуемое действие
Блоки таблицы подстановки имеют настраиваемые параметры.

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

  • Сохранение монотонности настройки параметра Vector of input values.

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

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

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

  • Сохранение монотонности настройки входных значений индекса строки и индекса столбца параметров входных значений.

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

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

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

При наличии лицензии Simulink Check из этой проверки можно исключить блоки и диаграммы.

См. также

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

Код чека: mathworks.codegen.MdlrefConfigMismatch

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

Описание

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

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

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

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

См. также

Проверка времени образца и режима задания

Код чека: mathworks.codegen.SampleTimesTaskingMode

Настройка времени выборки и режима задания для системы.

Описание

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

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

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

СостояниеРекомендуемое действие
Модель представляет многоскоростную систему, но не настроена для многозадачности.Выберите параметр конфигурации модели Рассматривать каждую дискретную скорость как отдельную задачу. При выборе параметра для многоскоростной модели применяется многозадачное выполнение. Дополнительные сведения см. в разделах Планирование на основе времени и Создание кода.
Модель настроена для многозадачности, но многозадачность нежелательна на целевом оборудовании. Например, операционная система не поддерживает многопроцессорный, или целевые аппаратные средства - голый металл (не управляет операционной системой), и приложение не предусматривает многозадачную схему выполнения.Очистить параметр конфигурации модели Рассматривать каждую дискретную скорость как отдельную задачу. При сбросе параметра применяется однозадачное выполнение. Дополнительные сведения см. в разделах Планирование на основе времени и Создание кода.

См. также

Планирование на основе времени и создание кода

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

Код чека: mathworks.codegen.ModelRefRTWConfigCompliance

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

Описание

В ссылочных моделях, если следующие параметры конфигурации > Создание кода > Параметры идентификаторов имеют настройки, которые не содержат $R token (который представляет имя ссылочной модели), генерация кода предшествует $R маркер к формату идентификатора.

  • Глобальные переменные

  • Глобальные типы

  • Методы подсистем

  • Постоянные макросы

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

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

СостояниеРекомендуемое действие

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

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

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

Код чека: com.mathworks.sorting.datastoresimrtwcmp

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

Описание

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

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

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

СостояниеРекомендуемое действие

Порядок выполнения блоков чтения хранилища данных и записи хранилища данных отличается в зависимости от режима моделирования и режима генерации кода.

В результатах помощника по модели в разделе Действие (Action) щелкните Изменить приоритеты блоков (Modify block priorities). Помощник по модели изменяет блоки таким образом, чтобы порядок выполнения в режиме моделирования был таким же, как и в режиме генерации кода.

См. также

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

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

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

ПроверитьЭффективность выполнения
(все цели)
Эффективность ПЗУ
(целевые показатели, основанные на ERT)
Эффективность ОЗУ
(целевые показатели, основанные на ERT)
Меры безопасности
(целевые показатели, основанные на ERT)
Отслеживаемость
(целевые показатели, основанные на ERT)
Отладка
(все цели)
Рекомендации MISRA C:2012
(целевые показатели, основанные на ERT)
Полиспейс ®
(целевые показатели, основанные на ERT)
Проверка параметров конфигурации модели по целям создания кодаВключенныйВключенныйВключенныйВключенныйВключенныйВключенныйВключено (см. примечание ниже)Включенный
Проверка оптимальной виртуальности шиныВключенныйВключенныйВключенныйН/ДН/ДН/ДН/ДН/Д
Определение сомнительных блоков в указанной системеВключенный ВключенныйВключенныйН/ДН/ДН/ДН/ДН/Д
Проверка реализации аппаратных средств (встроенный кодер)Включено при наличии встроенного кодераВключено при наличии встроенного кодераН/ДН/ДН/ДН/ДН/ДН/Д
Определение сомнительных спецификаций среды программного обеспечения (встроенный кодер)Включено, когда отслеживание не имеет более высокого приоритета и доступен встроенный кодерВключено, когда отслеживание не имеет более высокого приоритета и доступен встроенный кодерН/ДН/ДН/ДН/ДН/ДН/Д
Определение сомнительного кода (ввод/вывод данных) (встроенный кодер)Включается, когда отслеживаемость или отладка не имеют более высокого приоритета, и доступен встроенный кодерВключается, когда отслеживаемость или отладка не имеют более высокого приоритета, и доступен встроенный кодерВключается, когда отслеживаемость или отладка не имеют более высокого приоритета, и доступен встроенный кодерН/ДН/ДН/ДН/ДН/Д
Определение сомнительных настроек подсистемы (встроенный кодер)Н/ДВключено при наличии встроенного кодераВключено при наличии встроенного кодераН/ДН/ДН/ДН/ДН/Д
Определение блоков, генерирующих дорогостоящий код округления (встроенный кодер)Включено при наличии встроенного кодераВключено при наличии встроенного кодераН/ДН/ДН/ДН/ДН/ДН/Д
Определение сомнительных операций с фиксированной точкой (встроенный кодер)Включено при наличии встроенного кодера или Designer™ с фиксированной точкойВключено при наличии встроенного кодера или конструктора фиксированных точекН/ДН/ДН/ДН/ДН/ДН/Д
Идентификация блоков с помощью индексирования на основе одного элементаВключенныйВключенныйН/ДН/ДН/ДН/ДН/ДН/Д
Определение блоков таблицы поиска, генерирующих дорогостоящий код проверки за пределами диапазона (встроенный кодер)Включено при наличии встроенного кодераВключено при наличии встроенного кодераН/ДН/ДН/ДН/ДН/ДН/Д
Проверка типов вывода логических блоков (встроенный кодер)Включено при наличии встроенного кодераН/ДН/ДН/ДН/ДН/ДН/ДН/Д

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

Н/ДН/ДН/ДВключенныйН/ДН/ДН/ДН/Д
Проверка блоков памяти хранилища данных на наличие проблем многозадачности, строгой типизации и затененияН/ДН/ДН/ДВключенныйН/ДН/ДН/ДН/Д
Определение блочных выходных сигналов с непрерывным временем выборки и типом данных без плавающей точкиН/ДН/ДН/ДВключенныйН/ДН/ДН/ДН/Д
Проверка блоков с ограничениями на настраиваемые параметрыН/ДН/ДН/ДВключенныйН/ДН/ДН/ДН/Д
Проверьте, включена ли диагностика чтения/записи для блоков хранения данныхН/ДН/ДН/ДВключенныйН/ДН/ДН/ДН/Д
Проверка использования параметров структуры по сигналам шиныН/ДН/ДН/ДВключенныйН/ДН/ДН/ДН/Д
Проверка времени блока хранилища данных на наличие ошибок моделированияН/ДН/ДН/ДВключенныйН/ДН/ДН/ДН/Д
Проверка потенциальных проблем заказа, связанных с доступом к хранилищу данныхН/ДН/ДН/ДВключенныйН/ДН/ДН/ДН/Д
Проверка блоков, не рекомендованных для развертывания производственного кода C/C + + (встроенный кодер)Н/ДН/ДН/ДН/ДН/ДН/ДВключено при наличии встроенного кодераН/Д
Проверка блоков, не рекомендованных для MISRA C:2012 (встроенный кодер)Н/ДН/ДН/ДН/ДН/ДН/ДВключено при наличии встроенного кодераН/Д
Проверьте наличие неподдерживаемых имен блоков (встроенный кодер)Н/ДН/ДН/ДН/ДН/ДН/ДВключено при наличии встроенного кодераН/Д
Проверка использования блоков назначения (встроенный кодер)Н/ДН/ДН/ДН/ДН/ДН/ДВключено при наличии встроенного кодераН/Д
Проверка побитовых операций со подписанными целыми числами (встроенный кодер)Н/ДН/ДН/ДН/ДН/ДН/ДВключено при наличии встроенного кодераН/Д
Проверка рекурсивных вызовов функций (встроенный кодер)Н/ДН/ДН/ДН/ДН/ДН/ДВключено при наличии встроенного кодераН/Д
Проверка операций равенства и неравенства для значений с плавающей запятой (встроенный кодер)Н/ДН/ДН/ДН/ДН/ДН/ДВключено при наличии встроенного кодераН/Д
Проверка выражений вариантов переключения без варианта по умолчанию (встроенный кодер)Н/ДН/ДН/ДН/ДН/ДН/ДВключено при наличии встроенного кодераН/Д
Проверка параметров конфигурации для генерации неэффективного кода насыщения (встроенный кодер)Включено при наличии встроенного кодераВключено при наличии встроенного кодераН/ДВключено при наличии встроенного кодераН/ДН/ДН/ДН/Д

Примечание

Когда помощник по созданию кода проверяет модель в соответствии с целью рекомендаций MISRA C:2012, инструмент не учитывает все настройки параметров конфигурации, которые проверяются при проверке рекомендаций MISRA C:2012 в помощнике по модели. Для полной проверки настроек параметров конфигурации:

  1. Откройте мастер модели.

  2. Перейдите в раздел По задаче > Рекомендации по моделированию для C:2012 MISRA.

  3. Выполните проверки в папке.

Дополнительные сведения об использовании Model Advisor см. в разделе Проверка модели с помощью Model Advisor.

См. также

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

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

Описание

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

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

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

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

Вы можете:

  • Выполните эту проверку для моделей библиотек.

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

См. также

Блоки и продукты, поддерживаемые для создания кода

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

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

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

Описание

Каждый параметр в диалоговом окне «Параметры конфигурации» может иметь различные рекомендуемые настройки для создания кода в зависимости от целей. Эта проверка помогает определить рекомендуемые параметры для каждого параметра, чтобы получить оптимизированный код в зависимости от цели.

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

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

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

Примечание

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

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

При нажатии кнопки «Изменить параметры» значения параметров изменяются на рекомендуемые.

См. также