При генерации автономного кода из кода MATLAB® вы принимаете решение не сгенерировать инициализировать функцию:
В coder.EmbeddedCodeConfig
объект, IncludeInitializeFcn
установлен в false
.
В качестве альтернативы в приложении MATLAB Coder™, на вкладке All Settings, Initialize Function Required установлен в No
.
Кроме того, вы гарантируете, что пользовательский код, чтобы появиться в сгенерированном инициализирует функцию, пусто:
В coder.EmbeddedCodeConfig
объект, CustomInitializer
установлен в ''
.
В качестве альтернативы в приложении MATLAB Coder, на вкладке Custom Code, Custom C Code for Generated Files для инициализирует функцию, пусто.
Вы все еще получаете это сообщение об ошибке:
The initialize function is not empty, but the IncludeInitializeFcn configuration setting requests that the initialize function be omitted.
В определенных ситуациях генератор кода решает, что инициализировать функция должна быть непустой и производит код для инициализировать функции. Эта генерация кода может произойти, даже если пользовательский код для инициализировать функции, которую вы задаете, пуст. Не включая этот сгенерированный код в инициализировать функции заставляет сгенерированные функции точки входа работать с недопустимым состоянием. В таких ситуациях, если вы принимаете решение не сгенерировать инициализировать функцию, генератор кода производит сообщение об ошибке.
Чтобы устранить эту проблему, включайте инициализировать функцию в свой сгенерированный код путем выполнения одного из следующих действий:
В coder.EmbeddedCodeConfig
объект, набор IncludeInitializeFcn
к true
(это значение является значением по умолчанию).
В приложении MATLAB Coder, на вкладке All Settings, устанавливает Initialize Function Required на Yes
(эта установка является настройкой по умолчанию).
Примеры шаблонов кода MATLAB, которые требуют непустого, инициализируют функцию в сгенерированном коде:
Ваш код MATLAB содержит операцию, которая может сгенерировать неличные значения (Inf
или NaN
). Например, задайте функцию MATLAB foo
это вызывает factorial
. factorial
функция растет быстро и возвращает Inf
для входных параметров, больше, чем определенный порог. Для входа типа double
, порогом является 170
. Выполнение factorial(171)
в MATLAB возвращает Inf
.
function y = foo(a) y = factorial(a); end
Сгенерируйте статическую библиотеку для foo
. В coder.EmbeddedCodeConfig
объект cfg
, установите параметр CustomInitializer
к пустому символьному массиву. Установите параметр IncludeInitializeFcn
к true
. Эти значения являются значениями по умолчанию для параметров.
cfg = coder.config('lib'); cfg.CustomInitializer = ''; %These are the default values cfg.IncludeInitializeFcn = true; codegen -config cfg foo -args {1}
Генератор кода автоматически производит непустое, инициализируют функциональный foo_initialize
это вызывает код поддержки для неличных данных. Это вызовы функции rt_InitInfAndNaN
, который задан в другом сгенерированном файле rt_nonfinite.c
.
/* Include Files */ #include "foo_initialize.h" #include "foo.h" #include "foo_data.h" #include "rt_nonfinite.h" /* Function Definitions */ /* * Arguments : void * Return Type : void */ void foo_initialize(void) { rt_InitInfAndNaN(); isInitialized_foo = true; } /* * File trailer for foo_initialize.c * * [EOF] */
Ваше использование кода MATLAB global
или persistent
переменные. Например, задайте эту функцию MATLAB:
function y = bar global g y = g; end
Сгенерируйте статическую библиотеку для bar
. Задайте начальное значение g
как 1
. В coder.EmbeddedCodeConfig
объект cfg
, установите параметр CustomInitializer
к пустому символьному массиву. Установите параметр IncludeInitializeFcn
к true
. Эти значения являются значениями по умолчанию для параметров.
cfg = coder.config('lib'); cfg.CustomInitializer = ''; %These are the default values cfg.IncludeInitializeFcn = true; codegen -config cfg -globals {'g',1} bar
Генератор кода автоматически производит непустое, инициализируют функциональный bar_initialize
это инициализирует g
.
/* Include Files */ #include "bar_initialize.h" #include "bar.h" #include "bar_data.h" /* Function Definitions */ /* * Arguments : void * Return Type : void */ void bar_initialize(void) { g = 1.0; isInitialized_bar = true; } /* * File trailer for bar_initialize.c * * [EOF] */