2012-11-28 3 views
3

CODEGEN은 다음과 같이 명령 : CODEGEN 및 스칼라 구조체 인수

codegen -config:dll ep1 -args single(0) ep2 -args {0,0} 

는 다음과 같이 기능에 대한 쉬운 :

function y = ep1(u) %#codegen 
y = u; 

function y = ep2(u, v) %#codegen 
y = u + v; 

난 그냥 스칼라 구조체 인수를 정의하는 방법을 궁금해하고있다. 우리가 위의 인수가 유 (2 개 필드로 구성 - 즉, 하나 개의 문자와 더블)과 같이해야한다고 가정 해 봅시다 :

u.FirstName = 'Loren'; 
u.Height = 150 

PS :

s = struct('a',42,'b',4711); 
codegen topfun.m -args { s } 
:

그냥 이런 식으로 뭔가를 발견

이것이 해결책일까요? 나는 이것이 예에 의한 정의라고 믿는다.

이 나를 위해 작동하는 것 같다

답변

1

:

codegen -report -config:dll ep1 ... 
          ep2 

실제 '기능 서명'(따라서 스칼라 구조체는) 다음과 같은 함수를 정의 할 수 있습니다 : 내가 가지고있는

function [bla] = ep1(parameters) 
%#codegen 

assert(isstruct(parameters)); 
assert(isa(parameters.x1,'char')); 
assert(size(parameters.x1, 1) >= 1); 
assert(size(parameters.x1, 1) <= 1024); 
assert(isa(parameters.x2,'double')); 
... 

문제가 부모 함수에서 모든 매개 변수를 정의해야하는 것처럼 보이지만 부모 함수에서 매개 변수를 사용하지는 않습니다.

위의 내용을 살펴보십시오. 우리가 ep1이 ep2의 부모 함수이고 ep1이 parameters.x2를 사용하지 않는다고 말하면, 나는 여전히 ep1에서 그것을 주장해야합니다. 이것이 의미가 있기를 바랍니다.

0

구조체의 정의는 coder.typeof 기능을 사용하여 캡처 할 수 있습니다. 아래와 같이

우선 -args를 사용하여 정의를 전달하는 스크립트를 이용하여 구조체를 초기화하고 coder.typeof 사용 구조체 정의 캡쳐 :

u = Initialise(u); 
p = InitialiseParameters(); 

tx = coder.typeof(u); 
tp = coder.typeof(p); 

codegen topfun.m -args {tx, tp} -config:dll