В этом примере показано, как совместно использовать строковые данные между диаграммой Stateflow ® и пользовательским кодом C. Можно экспортировать строковые данные из диаграммы Stateflow в функцию C с помощью str2ascii оператор. Можно импортировать выходные данные кода C в виде строковых данных в диаграмму Stateflow с помощью ascii2str оператор. Совместное использование данных с пользовательским кодом позволяет расширить возможности Stateflow и использовать программное обеспечение для использования преимуществ существующего кода. Дополнительные сведения см. в разделе Повторное использование пользовательского кода в диаграммах Stateflow.

Эта модель содержит диаграмму Stateflow, которая вызывает две функции из пользовательского кода C. Во время моделирования диаграмма принимает в качестве входных данных строку, содержащую текст, представляющий число с плавающей запятой в экспоненциальной форме. Диаграмма состоит из трех состояний, которые:
Поиск по входной строке начальных нулей, десятичной запятой и e.
Разбор строки на числа с двойной точностью, представляющие значительную и экспоненциальную части ввода.
Объедините числовую информацию в выходную строку, выражающую входные данные в научной нотации.
Например, если входная строка "0123.456e789", то диаграмма выводит строку "0123.456e789 means 1.23456 times ten to the 791th power".

Вы можете использовать str2ascii для преобразования строковых данных в массив, который можно экспортировать из диаграммы Stateflow в пользовательскую функцию кода C.
В функции пользовательского кода объявите входную переменную как имеющую тип char*.
В диаграмме Stateflow преобразуйте строку в массив типа uint8 путем вызова оператора str2ascii.
Вызовите функцию пользовательского кода, передав uint8 массив в качестве входных данных.
Например, на предыдущей диаграмме Search состояние преобразует входную строку str в uint8 множество Asrt. Search состояние передает этот массив как вход в пользовательскую функцию кода searchfun:
extern void searchfun(int* nout, char* strin)
{
nout[0] = strspn(strin,"0");
nout[1] = strcspn(strin,".e");
nout[2] = strcspn(strin,"e");
nout[3] = strlen(strin);
} Search состояние вызывает эту функцию с помощью команды searchfun(n,Astr). Функция заполняет целочисленный массив n с этими значениями:
n[0] содержит число начальных нулей во входной строке str.
n[1] содержит число символов перед первым экземпляром десятичной запятой или e. Этот результат показывает количество символов перед десятичной запятой в str.
n[2] содержит количество символов перед первым экземпляром e. Этот результат обеспечивает количество символов в значимом str.
n[3] содержит длину входной строки str.
Parse состояние использует эти результаты для извлечения значений значимой и экспоненциальной частей входных данных.
Можно импортировать строковые данные в диаграмму Stateflow, передав указатель на массив типа uint8 как вход в пользовательскую функцию C.
В функции пользовательского кода объявите входную переменную, содержащую указатель, как имеющую тип char*.
Сохраните выходные строковые данные из пользовательской кодовой функции в местоположении, указанном указателем.
В диаграмме Stateflow преобразуйте uint8 массив в строку путем вызова оператора ascii2str.
Например, на предыдущей диаграмме Merge состояние объединяет числовую информацию, полученную Parse состояние в выходную строку путем вызова пользовательской кодовой функции mergefun:
extern void mergefun(char* strout, char* strin, int in0, double in1, double in2)
{
sprintf(strout, "%s means %1.*f times ten to the %dth power", strin, in0, in1, (int) in2);
} Merge состояние вызывает mergefun функция с командой mergefun(Asout,Astr,y0,y1,y2):
Asout является массивом типа uint8 указывает на вывод пользовательской функции.
Astr является массивом типа uint8 соответствует входной строке диаграммы.
y0 - целое число, содержащее число цифр справа от десятичной запятой в значащем.
y1 и y2 - числа с двойной точностью, представляющие значительную и экспоненциальную части входного сигнала.
Функция mergefun вызывает функцию библиотеки C sprintf, объединение содержимого Astr, y1, и y2 и сохранение результата в ячейке памяти, указанной Aout. Диаграмма использует оператор ascii2str для преобразования выходных данных в строку sout. Таким образом, модель импортирует строку, созданную функцией пользовательского кода, обратно в Stateflow.
ascii2str | str2ascii | str2double | strcat | substr