2013-05-13 59 views
1

我正在爲該目標創建一個Simulink(嵌入式編碼器)目標和一些sfunction驅動程序。在主模板文件(TLC)中,如果模型中至少存在一個驅動程序塊,則需要包含一些頭文件並調用初始化函數。有條件的#include如果功能塊存在於模型中

例如,如果我的模型使用IO sfunction驅動器模塊,在rpp_srmain.tlc(我的模板文件的名稱),我需要這樣的東西:

%<LibSetSourceFileSection(cFile, "Includes", tmpBuf)> 
%openfile tmpBuf 
%<IfBlockPresentInModel("gio")> 
#include "gio.h" 
%<EndIf> 
%closefile tmpBuf 
(...) 
%<LibSetSourceFileSection(cFile, "Declarations", tmpBuf)> 
%openfile tmpBuf 
void main(void) 
{ 
    %<IfBlockPresentInModel("gio")> 
    gioInit(); 
    %<EndIf> 
    (...) 
} 

如何做到這一點任何幫助是非常歡迎的。

+0

什麼樣的S-功能的是你的「吉奧」 IO驅動程序塊? 假設它是一個內聯S函數,爲什麼你不在TLC代碼塊中包含這個#include和init函數調用,而不是在主TLC中? – pmb 2013-06-20 09:40:15

+0

因爲我不知道我在做什麼。所以是的,這基本上是答案。如果你把它作爲答案,我會將其標記爲解決方案。 – Havok 2013-06-21 03:04:21

回答

0

假設您的「gio」IO驅動程序塊爲inlined S-Function(如果您使用的是Simulink/Embedded Coder,通常會出現這種情況),您可以在塊的TLC中包含特定於塊的代碼,而不是主TLC。

例如它可能是這個樣子:

%implements "gio" "C" 

%function BlockTypeSetup(block, system) Output 

    %% include header files 
    %openfile buffer 
    #include "gio.h" 
    %closefile buffer 
    %<LibCacheIncludes(buffer)> 

%endfunction 


%function Start(block,system) Output 
{ 
    gioInit(); 
} 
%endfunction