matlabmatlab-coder

Matlab Coder using boolean_T


I'm trying to generate C code for a simple function 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

However, in the generated code a variable type boolean_T is used but not declared anywhere. It seems to me that no header with its declaration was included. The script to generate the code is:

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

By calling make with a custom makefile, I get the following error messages:

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

I can ask for single file and add custom code with:

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

This will allow me to compile the code properly, but it's a crappy solution, since I don't want to generate a single file, and the added source is not included in every file as needed.

Is there any way I can avoid having the boolean_T type being used? Or there some directive I should have used but I'm missing?


Solution

  • boolean_T and possibly other types like int_T are defined in header files that are not generated, but shipped with MATLAB. Usually the definitions are in tmwtypes.h which you can find in /extern/include. The generated makefile includes a path to this in the list of include directories as an option to the compiler. If you are not using the generated makefile you would need to add the paths to these headers manually to your compiler options.