How can I implement recursion in code-generated Simulink models?
13 views (last 30 days)
Show older comments
I am wanting to implement a recursive function call inside a "MATLAB Function" block in my Simulink model. However, it fails when I want to run in Rapid-Accelerator mode because recursive function calls are not allowed/supported in code-generation.
You can think of the function I am calling as listing a directory's content which should obviously recurse into child directories if there are any. The method being called is not implemented in the block itself but in an m-file on my userpath.
Is there a way to facilitate using recursive function calls inside a "MATLAB Function" block or do I have to design the block differently?
0 Comments
Answers (2)
Andrew Schenk
on 15 Jun 2015
Edited: Andrew Schenk
on 15 Jun 2015
As you are aware, recursion is not supported for Simulink Code Generation. An alternative algorithm design for this recursive directory list would be to use a while loop with a dynamic list of directories. An example is shown below, but note that this example needs some modifications to support code generation since Cell Arrays are not supported.
%the initial directory
directories = {'./'};
while numel(directories) > 0
%the current directory
currentDir = directories{end};
%the current directory listing
listing = dir(currentDir);
%remove the current directory listing
directories(end) = [];
for i=1:numel(listing)
if strcmp(listing(i).name, '.') || strcmp(listing(i).name, '..')
%don't add the . or .. to the list
continue;
end
disp(fullfile(currentDir, listing(i).name));
if listing(i).isdir
directories{end+1} = fullfile(currentDir, listing(i).name);
end
end
end
0 Comments
See Also
Categories
Find more on Simulink Coder in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!