Typedef

Создайте псевдонимы типов данных путем генерации typedef операторы.

Конструкция C

typedef float float_32;

Процедура

Чтобы создать псевдоним типа данных в Simulink ®, используйте Simulink.AliasType. Генератор кода создает typedef оператор в сгенерированном коде.

Встроенный тип данных Simulink single соответствует типу данных C float.

1. В командной строке создайте Simulink.AliasType объект с именем float_32 который представляет псевдоним single.

float_32 = Simulink.AliasType('single');

float_32 = Simulink.AliasType('single');

2. Откройте пример модели ex_typedef.

ex_typedef

3. В Model Data Editor откройте вкладку Inports/Outports.

4. В меню «Изменить вид» выберите Design.

5 В модели выберите блок Inport.

6. В Model Data Editor для блока Inport установите значение Data Type float_32.

set_param('ex_typedef/In1','OutDataTypeStr','float_32');

7. Откройте приложение Embedded Coder.

8. На вкладке C Code выберите Code Interface > Individual Element Code Mappings.

9. В редакторе Отображения на вкладке Inports установите значение класса памяти для блока Inport равным ExportedGlobal. Блок Inport появляется в сгенерированном коде как отдельная глобальная переменная.

10. В Property Inspector для блока Inport задайте значение свойства Code > Identifier mySig.

cm = coder.mapping.api.get('ex_typedef');
setInport(cm,'In1','StorageClass','ExportedGlobal','Identifier','mySig');

11. Чтобы создать модель и сгенерировать код, нажмите Ctrl + B.

currentDir = pwd;
[~,cgDir] = rtwdemodir();
evalc('slbuild(''ex_typedef'')');

Результаты

Сгенерированный заголовочный файл ex_typedef.h определяет псевдоним типа данных float_32.

file = fullfile('ex_typedef_ert_rtw','ex_typedef.h');
rtwdemodbtype(file,'#ifndef DEFINED_TYPEDEF_FOR_float_32_', ...
    '/* External outputs',1,1);
#ifndef DEFINED_TYPEDEF_FOR_float_32_
#define DEFINED_TYPEDEF_FOR_float_32_

typedef real32_T float_32;

#endif

По умолчанию генератор кода также создает псевдоним real32_T, что соответствует типу данных C float. Вы можете увидеть typedef оператор в сгенерированном заголовочном файле rtwtypes.h.

file = fullfile('ex_typedef_ert_rtw','rtwtypes.h');
rtwdemodbtype(file,'typedef float real32_T;', ...
    'typedef float real32_T;',1,1);
typedef float real32_T;

Сгенерированный исходный файл ex_typedef.c использует float_32 для определения глобальной переменной mySig.

file = fullfile('ex_typedef_ert_rtw','ex_typedef.c');
rtwdemodbtype(file,'/* Exported block signals */', ...
    '/* External outputs',1,1);
/* Exported block signals */
float_32 mySig;                        /* '<Root>/In1' */

См. также

Похожие темы