Matlab Coder с использованием boolean_T

Я пытаюсь сгенерировать код C для простой функции Matlab funciton:

function[] = myfunc()
%#codegen
fprintf('Executing myfun\n');
fid = fopen('file_created_by_myfun.txt','w');
fwrite(fid,'This is written by myfun upon execution');
fclose(fid);
end

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

config_obj = coder.config('exe');
config_obj.GenCodeOnly = 'on';
codegen -config config_obj myfun

При вызове make с пользовательским make-файлом я получаю следующие сообщения об ошибках:

error: unknown type name 'boolean_T'
error: 'false' undeclared (first use in this function)
error: 'true' undeclared (first use in this function)

Я могу запросить один файл и добавить собственный код с помощью:

config_obj = coder.FilePArtitioningMethod('SingleFile');
config_obj.CustomSourceCode = ['typedef unsigned int boolean_T;',newline,...
                               '#define true 1U',newline,...
                               '#define false 0U'];

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

Есть ли способ избежать использования типа boolean_T? Или есть какая-то директива, которую я должен был использовать, но я пропал?


person Mefitico    schedule 25.01.2019    source источник


Ответы (1)


boolean_T и, возможно, другие типы, такие как int_T, определены в файлах заголовков, которые не генерируются, а поставляются с MATLAB. Обычно определения находятся в tmwtypes.h, который вы можете найти в /extern/include. Сгенерированный make-файл включает путь к нему в список включаемых каталогов в качестве опции для компилятора. Если вы не используете сгенерированный make-файл, вам нужно вручную добавить пути к этим заголовкам в параметры компилятора.

person Navan    schedule 25.01.2019
comment
Сгенерированный код имеет базовые определения типов в файле rtwtypes.h. Как говорит Наван, в некоторых случаях этот файл включает tmwtypes.h. А именно, когда вашим целевым оборудованием является хост-компьютер MATLAB. Это обеспечивает совместимость с поставляемыми библиотеками MathWorks. Если вы установите аппаратное обеспечение на что-то другое, вы увидите, что rtwtypes.h содержит определения типов, характерные для запрошенного вами оборудования. - person Ryan Livingston; 27.01.2019