exponenta event banner

Имена типов управляющих данных в сгенерированном коде

По умолчанию созданный код использует псевдонимы типов данных Simulink ® Coder™ для определения скалярных переменных и переменных массива. Например, тип Simulink Coderreal32_T соответствует типу Simulink single. Код определяет эти типы через typedef операторы, которые строятся на примитивных типах C, таких как float и short. Можно настроить код на использование пользовательских имен типов.

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

Управляйте этими именами типов, чтобы помочь:

Для пользовательских типов можно также указать, что созданные определения типов кода используются повторно, например: typedef операторы, из вашего внешнего кода.

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

Информирование генератора кода о длине битов универсальных типов C, таких как int и short для целевого оборудования используйте параметры конфигурации реализации оборудования. См. раздел Настройка параметров среды выполнения.

Управляющие имена примитивных типов данных

Переименование типа данных примитива Simulink Coder, например int8_T, создайте Simulink.AliasType объект, имя которого соответствует имени типа, которое должен использовать созданный код. Например, для создания типа с именем myType, в командной строке введите:

myType = Simulink.AliasType;

Установите BaseType для имени типа данных Simulink, соответствующего целевому типу данных Simulink Coder. Например, если целевой тип int8_T, указать int8. Чтобы определить тип данных Simulink, используйте информацию в таблице.

Имя типа кодера SimulinkСоответствующее имя типа Simulink

real_T

double

real32_T

single

int32_T

int32

int16_T

int16

int8_T

int8

uint32_T

uint32

uint16_T

uint16

uint8_T

uint8

boolean_T

boolean

Для настройки замены типа данных во всей модели (Параметры конфигурации > Создание кода > Замена типа данных) можно также использовать один из следующих типов:

  • uint8

  • int8

  • intn*

int_T

intn*

uint_T

uintn*

char_T

intn*

uint64_T

uint64

int64_T

int64

* Заменить n с количеством битов, отображаемым в Configuration Parameters > Hardware Implementation для количества битов: int или количества битов: char. Используйте соответствующее количество битов для типа данных, который требуется переименовать.

Примечание

boolean_T BaseType должен повысить до подписанного int.

Например, для замены имени типа uint8_T с myType, установите BaseType имущества Simulink.AliasType объект в 'int8'.

myType.BaseType = 'int8';

Затем используйте один или оба из этих методов, чтобы применить тип к элементам данных в модели.

  • Настройка замен типов данных. По всему коду, создаваемому из модели, можно заменить имя типа данных Simulink Coder именем Simulink.AliasType объект. Замены типов данных настраиваются с помощью параметров конфигурации модели (Параметры конфигурации > Генерация кода > Замена типов данных.

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

  • Используйте имя Simulink.AliasType объект для указания типа данных отдельного сигнала, то есть блочного выходного сигнала или блочного параметра. По умолчанию из-за распространения и наследования типов данных (см. Правила наследования типов данных) сигналы, состояния и параметры других дочерних блоков обычно наследуют один и тот же тип данных. При необходимости можно настроить элементы данных в родительских блоках для наследования типа (Inherit: Inherit via back propagation) или остановить распространение в произвольном блоке, указав параметр типа данных без наследования.

    Чтобы указать тип данных для отдельного элемента данных, используйте Редактор данных модели (на вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor)). Можно использовать то же имя Simulink.AliasType для указания типов данных нескольких элементов данных.

    Для примера, который показывает, как использовать a Simulink.AliasType объект непосредственно в модели, см. раздел Создание псевдонима типа данных в сгенерированном коде.

Управляющие имена типов примитивовТехника
Изменение имени типа примитива, используемого сгенерированным кодом для определения переменных по умолчанию (например, int8_T).

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

Чтобы заменить имя типа данных Simulink Coder по умолчанию соответствующим именем типа Simulink, например, для замены int8_T с int8, не нужно создавать Simulink.AliasType объект. См. раздел Использование имен типов данных Simulink вместо имен типов данных Simulink Coder.

Чтобы совместно использовать замены типов данных в иерархии ссылок на модели, используйте наборы конфигураций, на которые имеются ссылки (см. раздел Совместное использование конфигурации в ссылочных моделях).

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

В модели найдите элемент данных, соответствующий переменной. Например, трассировка из отчета о создании кода в модель. Используйте имя Simulink.AliasType для установки типа данных элемента.

Если необходимо, чтобы другие элементы данных в восходящем и нисходящем блоках не использовали одно и то же имя типа, настройте эти элементы на использование параметра типа данных, который не наследуется. По умолчанию большинство сигналов использует унаследованный тип Inherit: Inherit via internal rule.

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

В модели используйте имя Simulink.AliasType объект для установки типа данных одного из сигналов в пути, например, корневого блока Inport или блока Constant. Например, если путь начинается с блока Inport на корневом уровне модели, можно указать тип этого блока. По умолчанию из-за распространения типа данных элементы данных в других блоках обычно наследуют один и тот же тип.

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

Сконфигурируйте созданный код для замены зависящего от реализации типа, например, char_T или boolean_Tи другой тип эквивалентной длины бита с одним указанным именем типа.Используйте имя Simulink.AliasType объект для одновременной настройки нескольких замен типов данных. См. раздел Замена зависимых от реализации типов с одинаковым именем типа.

Использовать имена типов данных Simulink вместо имен типов данных Simulink Coder

Для обеспечения согласованности между именами типов данных, которые отображаются в модели, и в сгенерированном коде можно настроить замены типов данных, чтобы код использовал имена типов Simulink вместо имен Simulink Coder. Для каждого типа кодера Simulink, который требуется переименовать, используйте имя типа данных Simulink, чтобы указать имя замены. Создавать не нужно Simulink.AliasType объекты.

Заменять boolean_T, int_T, или uint_T, используйте информацию в таблице.

Имя типа кодера SimulinkИспользуемые имена для замены

boolean_T

Одно из следующих имен:

  • boolean

  • uint8

  • int8

  • intn*

int_T

intn*

uint_T

uintn*

char_T

intn*

* Заменить n с количеством битов, отображаемым в Configuration Parameters > Hardware Implementation для количества битов: int или количества битов: char. Используйте соответствующее количество битов для типа данных, который требуется заменить.

Этот метод нельзя использовать для замены real_T с double или real32_T с single.

Замена зависимых от реализации типов с одинаковым именем типа

Некоторые имена типов Simulink Coder сопоставляются с примитивами C, зависящими от реализации. Например, тип Simulink Coder int_T сопоставляется с типом C int, длина бита которого зависит от собственного целого размера целевого оборудования. Другие типы, зависящие от внедрения, включают boolean_T, char_T, и uint_T.

Для более читаемого и простого кода можно использовать одно и то же имя типа для замены нескольких типов Simulink Coder одинакового размера. Например, если собственный размер оборудования равен 32 битам, можно заменить int_T и int32_T с тем же именем типа, скажем, myInt.

  1. Настройте параметры целевого оборудования в разделе Параметры конфигурации > Реализация оборудования.

  2. Создать Simulink.AliasType объект с именем myInt. В этом случае, потому что int_T и int32_T представляют 32-разрядное целое число со знаком, набор BaseType кому int32.

    myInt = Simulink.AliasType('int32')

  3. Настройка замены того же типа данных для int32_T и int_T.

Примечание

Замена типа данных «многие к одному» не поддерживает char (char_T) встроенный тип данных. Использовать char только в заменах типа данных «один к одному».

Замена типа данных «многие к одному» не поддерживается для типов данных Simulink Coder различных размеров.

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

Эта модель показывает определяемые пользователем типы, состоящие из числовых и псевдонимов. Числовые типы позволяют определять абстрактные числовые типы, что особенно полезно для типов с фиксированной точкой. Типы псевдонимов позволяют переименовывать типы, что позволяет создавать связи для типов.

Изучение примера модели

Откройте примерную модель и настройте ее для отображения сгенерированных имен блоков.

load_system('rtwdemo_udt')
set_param('rtwdemo_udt','HideAutomaticNames','off')
open_system('rtwdemo_udt')

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

  • Отображается и распространяется на сигнальных линиях

  • Используется для параметризации модели по типу (например, In1 указывает ее тип выходных данных как ENG_SPEED)

  • Типы с общим предком могут быть смешаны, посредством чего распространяется общий предок (например, выход Sum1)

  • Изначально поддерживается обозревателем моделей Simulink

  • Включить необязательный атрибут файла заголовка, который идеально подходит для импорта устаревших типов (игнорируется для целей GRT)

  • Типы, используемые в сгенерированном коде (игнорируются для целей GRT)

Инструкции

  1. Проверьте определяемые пользователем типы в обозревателе моделей, дважды нажав на первую желтую кнопку ниже.

  2. Проверьте сопоставление типа данных замены, дважды нажав вторую желтую кнопку ниже.

  3. Скомпилировать схему для отображения типов в этой модели (Отладка > Обновить модель > Обновить модель или Ctrl + D).

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

  5. Изменение атрибутов ENG_SPEED и ENG_SPEED_OFFSET и повторите шаги 1-4.

Примечания

  • Определяемые пользователем типы - это функция Simulink, облегчающая параметризацию типов данных в модели. Встроенный кодер сохраняет имена типов данных псевдонимов (например, ENG_SPEED) в сгенерированном коде, тогда как Simulink Coder реализует определяемые пользователем типы в качестве их базового типа (например, real32_T).

  • Embedded Coder также позволяет заменить встроенные типы данных пользовательскими типами данных в созданном коде.

Управляющие имена типов структур

Управление именами стандартных структур, создаваемых Simulink Coder по умолчанию для хранения данных (model_P например, для данных параметров) используйте Параметры конфигурации > Создание кода > Идентификаторы > Глобальные типы, чтобы указать правило именования. Дополнительные сведения см. в разделе Настройка сгенерированных идентификаторов.

При использовании невиртуальных шин и структур параметров для объединения сигналов и блокирования параметров в пользовательскую структуру в сгенерированном коде управляйте именем типа структуры путем создания Simulink.Bus объект. Дополнительные сведения см. в разделе Организация данных в структуры в сгенерированном коде.

Создание кода, который повторно использует типы данных из внешнего кода

Чтобы создать код, который повторно использует определение типа данных из внешнего кода C, укажите область данных соответствующего объекта типа данных или перечисления в Simulink как Imported. При этом параметре генерируемый код включает в себя (#include) определение из вашего кода. Дополнительные сведения об управлении размещением файлов пользовательского типа данных см. в разделе Управление размещением файлов пользовательских типов данных.

Вместо создания отдельных объектов типов данных и перечисляемых типов, а затем их настройки, рекомендуется создать объекты и типы с помощью Simulink.importExternalCTypes функция. По умолчанию функция настраивает новые объекты и типы таким образом, что созданный код импортирует (повторно использует) определения типов из кода. Затем можно использовать объекты и типы, чтобы задать типы данных в модели и настроить замены типов данных. Дополнительные сведения см. в разделе Simulink.importExternalCTypes и обмен структурированными и перечисленными данными между сгенерированным и внешним кодом.

Создание псевдонима типа данных в сгенерированном коде

В этом примере показано, как настроить сгенерированный код для использования имени типа данных (typedef), который вы указываете.

Определение типа экспорта

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

Создать Simulink.AliasType объект с именем mySingleAlias который действует как псевдоним для встроенного типа данных single.

mySingleAlias = Simulink.AliasType('single');

Настройте объект для экспорта его определения в файл заголовка с именем myHdrFile.h.

mySingleAlias.DataScope = 'Exported';
mySingleAlias.HeaderFile = 'myHdrFile.h';

Открытие модели rtwdemo_configinterface.

open_system('rtwdemo_configinterface')

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

set_param('rtwdemo_configinterface','HideAutomaticNames','off')

На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).

В модели выберите блок «Ввод» с меткой In1.

Используйте столбец «Тип данных», чтобы установить тип данных в mySingleAlias.

set_param('rtwdemo_configinterface/In1','OutDataTypeStr','mySingleAlias')

Настроить In1 для использования хранилища по умолчанию.

На вкладке Код C выберите Интерфейс кода > Сопоставления кодов по умолчанию.

В редакторе сопоставлений кодов в разделе «Входы и выходы» выберите категорию «Входы». Задать класс хранения по умолчанию как Default.

На вкладке «Inports» установите класс хранения в значение Model default.

cm = coder.mapping.api.get('rtwdemo_configinterface');
setDataDefault(cm,'Inports','StorageClass','Default');
setInport(cm,'In1','StorageClass','Model default');

Создайте код из модели.

slbuild('rtwdemo_configinterface')
### Starting build procedure for: rtwdemo_configinterface
### Successful completion of code generation for: rtwdemo_configinterface

Build Summary

Top model targets built:

Model                    Action          Rebuild Reason                                    
===========================================================================================
rtwdemo_configinterface  Code generated  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 7.0789s

В отчете о создании кода просмотрите файл rtwdemo_configinterface_types.h. Код создает #include директива для созданного файла myHdrFile.h.

file = fullfile('rtwdemo_configinterface_ert_rtw','rtwdemo_configinterface_types.h');
rtwdemodbtype(file,'#include "myHdrFile.h"',...
    '#include "myHdrFile.h"',1,1)
#include "myHdrFile.h"

Просмотр файла myHdrFile.h. Код использует идентификатор mySingleAlias как псевдоним для типа данных real32_T. По умолчанию созданный код представляет тип данных Simulink single с помощью идентификатора real32_T.

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

file = fullfile('slprj','ert','_sharedutils','myHdrFile.h');
rtwdemodbtype(file,'#ifndef RTW_HEADER_myHdrFile_h_',...
    ' * File trailer for generated code.',1,0)
#ifndef RTW_HEADER_myHdrFile_h_
#define RTW_HEADER_myHdrFile_h_
#include "rtwtypes.h"

typedef real32_T mySingleAlias;
typedef creal32_T cmySingleAlias;

#endif                                 /* RTW_HEADER_myHdrFile_h_ */

/*

Просмотр файла rtwdemo_configinterface.h. Код использует псевдоним типа данных mySingleAlias для определения поля структуры input1, который соответствует блоку Inport с меткой In1.

file = fullfile('rtwdemo_configinterface_ert_rtw','rtwdemo_configinterface.h');
rtwdemodbtype(file,...
    '/* External inputs (root inport signals with default storage) */',...
    '} ExtU_rtwdemo_configinterface_T;',1,1)
/* External inputs (root inport signals with default storage) */
typedef struct {
  mySingleAlias input1;                /* '<Root>/In1' */
  MYTYPE input2;                       /* '<Root>/In2' */
  MYTYPE input3;                       /* '<Root>/In3' */
  MYTYPE input4;                       /* '<Root>/In4' */
} ExtU_rtwdemo_configinterface_T;

Определение типа импорта

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

Используйте текстовый редактор для создания файла заголовка для импорта. Назовите файл ex_myImportedHdrFile.h. Поместите его в рабочую папку. Скопируйте следующий код в файл.

#ifndef HEADER_myImportedHdrFile_h_
#define HEADER_myImportedHdrFile_h_

typedef float myTypeAlias;

#endif 

Код использует идентификатор myTypeAlias для создания псевдонима для типа данных float. Код также использует макрозащиту формы HEADER_filename_h. При импорте определения типа данных для интеграции сгенерированного кода с кодом из других источников можно использовать макрозащиты этой формы для предотвращения непреднамеренных конфликтов идентификаторов.

В командной строке создайте Simulink.AliasType объект с именем myTypeAlias который создает псевдоним для встроенного типа single. Тип данных Simulink single соответствует типу данных C float.

myTypeAlias = Simulink.AliasType('single')
myTypeAlias = 

  AliasType with properties:

    Description: ''
      DataScope: 'Auto'
     HeaderFile: ''
       BaseType: 'single'

Настройте объект таким образом, чтобы созданный код импортировал определение типа из файла заголовка ex_myImportedHdrFile.h.

myTypeAlias.DataScope = 'Imported';
myTypeAlias.HeaderFile = 'ex_myImportedHdrFile.h';

Открытие модели rtwdemo_configinterface.

open_system('rtwdemo_configinterface')

На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).

В модели выберите блок «Ввод» с меткой In1.

Используйте столбец «Тип данных», чтобы установить тип данных в myTypeAlias.

set_param('rtwdemo_configinterface/In1','OutDataTypeStr','myTypeAlias')

Создайте код из модели.

slbuild('rtwdemo_configinterface')
### Starting build procedure for: rtwdemo_configinterface
### Successful completion of code generation for: rtwdemo_configinterface

Build Summary

Top model targets built:

Model                    Action          Rebuild Reason                   
==========================================================================
rtwdemo_configinterface  Code generated  Generated code was out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 7.1019s

В отчете о создании кода просмотрите файл rtwdemo_configinterface_types.h. Код создает #include директива для файла заголовка ex_myImportedHdrFile.h.

file = fullfile('rtwdemo_configinterface_ert_rtw','rtwdemo_configinterface_types.h');
rtwdemodbtype(file,'#include "ex_myImportedHdrFile.h',...
    '/* Forward declaration for rtModel */',1,0)
#include "ex_myImportedHdrFile.h"
#include "MYTYPE.h"

/* Model Code Variants */
#ifndef DEFINED_TYPEDEF_FOR_Table1_Type_
#define DEFINED_TYPEDEF_FOR_Table1_Type_

typedef struct {
  MYTYPE BP[11];
  MYTYPE Table[11];
} Table1_Type;

#endif

#ifndef DEFINED_TYPEDEF_FOR_Table2_Type_
#define DEFINED_TYPEDEF_FOR_Table2_Type_

typedef struct {
  MYTYPE BP1[3];
  MYTYPE BP2[3];
  MYTYPE Table[9];
} Table2_Type;

#endif
#endif                         /* RTW_HEADER_rtwdemo_configinterface_types_h_ */

/*
 * File trailer for generated code.
 *
 * [EOF]
 */

Просмотр файла rtwdemo_configinterface.h. Код использует псевдоним типа данных myTypeAlias для определения поля структуры input1, который соответствует блоку Inport с меткой In1.

file = fullfile('rtwdemo_configinterface_ert_rtw','rtwdemo_configinterface.h');
rtwdemodbtype(file,...
    '/* External inputs (root inport signals with default storage) */',...
    '} ExtU_rtwdemo_configinterface_T;',1,1)
/* External inputs (root inport signals with default storage) */
typedef struct {
  myTypeAlias input1;                  /* '<Root>/In1' */
  MYTYPE input2;                       /* '<Root>/In2' */
  MYTYPE input3;                       /* '<Root>/In3' */
  MYTYPE input4;                       /* '<Root>/In4' */
} ExtU_rtwdemo_configinterface_T;

Отображение базовых типов данных и псевдонимов на схеме модели

При отображении типов данных сигналов на схеме модели можно выбрать отображение псевдонимов (например, myTypeAlias) и базовые типы данных (например, int16). Для отображения псевдонимов на вкладке «Отладка» выберите «Информационные наложения» > «Типы данных псевдонимов». Для отображения базовых типов выберите «Информационные наложения» > «Базовые типы данных». Дополнительные сведения см. в разделе Типы данных портов.

Создание именованного типа данных с фиксированной точкой в сгенерированном коде

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

Пример модели rtwdemo_fixpt1 использует типы данных с фиксированной точкой. Для упрощения просмотра типа данных с фиксированной точкой в создаваемом коде в этом примере создается Simulink.Parameter , который отображается в коде как глобальная переменная.

Создать Simulink.AliasType объект, определяющий тип данных с фиксированной точкой. Назовите объект myFixType. Созданный код использует имя объекта в качестве типа данных.

myFixType = Simulink.AliasType('fixdt(1,16,4)');

Открытие модели rtwdemo_fixpt1.

open_system('rtwdemo_fixpt1')

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

set_param('rtwdemo_fixpt1','HideAutomaticNames','off')

На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).

В Редакторе данных модели (Model Data Editor) выберите вкладку Параметры (Parameters).

В модели выберите блок усиления.

В Редакторе данных модели для строки, представляющей параметр усиления блока «Усиление», в столбце «Значение» укажите myParam.

Нажмите кнопку действия (с тремя вертикальными точками) рядом со значением параметра. Выберите Создать.

В диалоговом окне «Создание новых данных» задайте Value кому Simulink.Parameter(8). В этом примере для удобочитаемого кода необходимо установить значение параметра 8 вместо -3.2. Щелкните Создать (Create). A Simulink.Parameter объект с именем myParam отображается в базовой рабочей области. Объект сохраняет реальное значение 8, который блок усиления использует для значения параметра усиления.

В диалоговом окне свойства Simulink.Parameter установите для класса Storage значение ExportedGlobal. Нажмите кнопку OK. С помощью этого параметра myParam отображается в созданном коде как отдельная глобальная переменная.

В редакторе данных модели используйте столбец Тип данных (Data Type), чтобы задать тип данных параметра Усиление (Gain) блока Усиление (Gain) равным myFixType.

На вкладке «Сигналы» используйте столбец «Тип данных», чтобы установить тип данных на выходе блока усиления в myFixType.

Используйте столбец «Тип данных» для установки типа данных Conversion вывод блока в myFixType.

Кроме того, для настройки блоков и создания объекта в командной строке можно использовать следующие команды:

set_param('rtwdemo_fixpt1/Gain','Gain','myParam','OutDataTypeStr','myFixType',...
    'ParamDataTypeStr','myFixType')
myParam = Simulink.Parameter(8);
myParam.StorageClass = 'ExportedGlobal';
set_param('rtwdemo_fixpt1/Conversion','OutDataTypeStr','myFixType')

В модели установите Параметры конфигурации > Создание кода > Целевой файл системы в значение ert.tlc. При этом параметре генератор кода распознает псевдонимы типа данных, такие как myFixType.

set_param('rtwdemo_fixpt1','SystemTargetFile','ert.tlc')

Выберите параметр конфигурации Generate code only.

set_param('rtwdemo_fixpt1','GenCodeOnly','on')

Создайте код из модели.

slbuild('rtwdemo_fixpt1')
### Starting build procedure for: rtwdemo_fixpt1
### Successful completion of code generation for: rtwdemo_fixpt1

Build Summary

Top model targets built:

Model           Action          Rebuild Reason                                    
==================================================================================
rtwdemo_fixpt1  Code generated  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 9.1889s

В отчете о создании кода просмотрите файл rtwdemo_fixpt1_types.h. Код определяет тип myFixType на основе целого типа указанной длины слова (16).

file = fullfile('rtwdemo_fixpt1_ert_rtw','rtwdemo_fixpt1_types.h');
rtwdemodbtype(file,'#ifndef DEFINED_TYPEDEF_FOR_myFixType_',...
    '/* Forward declaration for rtModel */',1,0)
#ifndef DEFINED_TYPEDEF_FOR_myFixType_
#define DEFINED_TYPEDEF_FOR_myFixType_

typedef int16_T myFixType;
typedef cint16_T cmyFixType;

#endif

Просмотр файла rtwdemo_fixpt1.c. Код использует тип myFixType, который является псевдонимом целого типа int16, для определения переменной myParam.

file = fullfile('rtwdemo_fixpt1_ert_rtw','rtwdemo_fixpt1.c');
rtwdemodbtype(file,'myFixType myParam = 128;','myFixType myParam = 128;',1,1)
myFixType myParam = 128;               /* Variable: myParam

Сохраненное целое значение 128 из myParam не совпадает с реальной стоимостью 8 из-за масштабирования типа данных с фиксированной точкой myFixType указывает. Дополнительные сведения см. в разделе Масштабирование (Конструктор фиксированных точек) в документации Конструктор фиксированных точек.

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

rtwdemodbtype(file,...
    'rtwdemo_fixpt1_Y.Out1 = (myFixType)((myParam * rtb_Conversion) >> 4);',...
    'rtwdemo_fixpt1_Y.Out1 = (myFixType)((myParam * rtb_Conversion) >> 4);',1,1)
  rtwdemo_fixpt1_Y.Out1 = (myFixType)((myParam * rtb_Conversion) >> 4);

Переименовать объект типа данных

Переименование объекта типа данных, например Simulink.AliasType или Simulink.Bus после его создания (например, для переименования псевдонима при изменении стандартов кодирования или при возникновении конфликта имен) можно разрешить Simulink переименовать объект и исправить все ссылки на объект, которые появляются в модели или моделях. В обозревателе моделей щелкните правой кнопкой мыши переменную и выберите Переименовать все (Rename All). Дополнительные сведения см. в разделе Переименование переменных.

Отображение типов данных сигналов на блок-схеме

Для удобства чтения типы данных сигналов можно отображать непосредственно на блок-схеме. При использовании пользовательских имен для типов данных примитивов можно выбрать отображение пользовательского имени (псевдонима), базового примитива или обоих типов. См. раздел Типы данных портов.

Ограничения

  • Нельзя настроить созданный код для использования этих пользовательских типов данных C:

    • Типы массивов

    • Типы указателей

    • const или volatile типы

  • Нельзя настроить созданный код для использования универсальных примитивов C, таких как int и short.

Ограничения на замену типов данных

При выборе параметра конфигурации модели Заменить имена типов данных в сгенерированном коде на панели Создание кода (Code Generation) > Замена типа данных (Data Type Replacement) диалогового окна Параметры конфигурации (Configuration Parameters) применяются следующие ограничения.

  • Замена типа данных не поддерживает несколько уровней сопоставления. Каждое имя замещающего типа данных сопоставляется непосредственно с одним или несколькими встроенными типами данных.

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

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

  • При создании кода выполняется замена типов данных .c, .cpp, и .h файлы. Создание кода помещает эти файлы в папки сборки (включая верхние и ссылочные папки сборки модели) и в _sharedutils папка. Исключения заключаются в следующем:

    rtwtypes.h
    multiword_types.h
    model_reference_types.h
    builtin_typeid_types.h
    model_sf.c или .cpp(обертка S-функции ERT)
    model_dt.h(файл заголовка C, поддерживающий внешний режим)
    model_capi.c или .cpp
    model_capi.h
  • Замена типа данных не поддерживается для сложных типов данных.

  • Замена типа данных «многие к одному» не поддерживается для char тип данных. Попытка использования char как часть сопоставления «многие к одному» с пользовательским типом данных представляет собой нарушение спецификации MISRA C ®. Например, при сопоставленииchar (char_T) и либо int8 (int8_T) или uint8 (uint8_T) для того же типа замены, результатом является нарушение MISRA C. Если вы пытаетесь создать код C++, генератор кода делает недопустимые неявные слепки типов, что приводит к ошибкам времени компиляции. Использовать char только в заменах типа данных «один к одному».

    Замена типа данных «многие к одному» не поддерживается для типов данных Simulink Coder различных размеров. Дополнительные сведения см. в разделе Замена зависимых от реализации типов на одно и то же имя типа.

  • Для S-функций ERT замените boolean тип данных только с 8-битным целым числом, int8, или uint8.

  • Установите DataScope свойство Simulink.AliasType объект в Auto (по умолчанию) или Imported.

Связанные темы