exponenta event banner

Настройка стандартной библиотеки математических данных для целевой системы

Укажите стандартные расширения библиотеки, используемые генератором кода для математических операций. При создании кода для новой модели или с новым объектом набора конфигурации генератор кода по умолчанию использует библиотеку ISO ®/IEC 9899:1999 C (C99 (ISO)). Для существующих моделей и объектов набора конфигурации генератор кода использует библиотеку, заданную параметром Библиотека формул (Standard math library).

Если компилятор поддерживает расширения математической библиотеки ISO ®/IEC 9899:1990 (C89/C90 (ANSI)), ISO/IEC 14882:2003 (C++ 03 (ISO) или ISO/IEC 14882:2011 (C++ 11 (ISO)), можно изменить настройки стандартной математической библиотеки. Библиотека C++ 03 (ISO) или C++ 11 (ISO) является опцией при выборе языка программирования C++.

Библиотека C99 использует производительность компилятора по сравнению со стандартной ANSI C. При использовании библиотеки C99 генератор кода по возможности вызывает функции ISO C. Например, сгенерированный код вызывает функцию sqrtf(), который работает с данными с одной точностью, а не sqrt().

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

Создание и проверка кода ANSI C

1. Открыть пример модели rtwdemo_clibsup.

2. Создать код.

### Starting build procedure for: rtwdemo_clibsup
### Successful completion of code generation for: rtwdemo_clibsup

Build Summary

Top model targets built:

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

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

3. Проверьте код в созданном файле rtwdemo_clibsup.c. Обратите внимание, что код вызывает sqrt функция.

  if (rtb_Abs2 < 0.0F) {
    rtb_Abs2 = -(real32_T)sqrt((real32_T)fabs(rtb_Abs2));
  } else {
    rtb_Abs2 = (real32_T)sqrt(rtb_Abs2);
  }

Создание и проверка кода ISO C

1. Изменение настройки библиотеки стандартных формул на C99 (ISO). В качестве альтернативы в командной строке задайте TargetLangStandard кому C99 (ISO).

2. Восстановите код.

### Starting build procedure for: rtwdemo_clibsup
### Successful completion of code generation for: rtwdemo_clibsup

Build Summary

Top model targets built:

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

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

3. Повторно проверьте код в созданном файле rtwdemo_clibsup.c. Теперь созданный код вызывает функцию sqrtf вместо sqrt.

  if (rtb_Abs2 < 0.0F) {
    rtb_Abs2 = -sqrtf(fabsf(rtb_Abs2));
  } else {
    rtb_Abs2 = sqrtf(rtb_Abs2);
  }

Связанная информация