matlab生成底层驱动封装库的main.tlc文件

/%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 雨的旋律汽车电子开发板
% 网店地址:http://shop108493800.taobao.com/
% 技术支持QQ群:153167747
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%/
//作用是控制主程序的生成
%selectfile NULL_FILE
%function s12xSingleTaskingMain() void

%if GenerateSampleERTMain
  %assign CompiledModel.GenerateSampleERTMain = TLC_FALSE
  **//上面这里设置为TLC_FALSE是因为不想让他生成ert.c**
  %warning Overriding example main.c!
  **//上面这一行是设置它想让他输出main.c,就是想让他生成自己想要的模板**
%endif
%assign cFile = LibCreateSourceFile("Source", "Custom", "main")**//这个就是main.c**

%openfile tmpinc
    #include "mc9s12xep100.h"
    #include "Cansend.h"
    boolean_T MSCAN0SendMsg(struct can_msg msg);
    boolean_T MSCAN1SendMsg(struct can_msg msg);
    struct can_msg cansendmsg;
    static uint8_T cansenddatalength= 0;
%closefile tmpinc
%assign model_cFile = LibGetModelDotCFile()

//上面那一行应该是赋值
%<LibSetSourceFileSection(model_cFile, “Includes”, tmpinc)>
//上面这行代码的作用是将上面 %openfile tmpinc到%closefile tmpinc之间的内容添加到model.c文件中去,LibGetModelDotCFile()这个函数就是model.c(就是模型的名字开头的.c文件中),
//这一行应该是添加tmpinc文件到model.c文件中去(应该是)

%% 添加包含文件 
%openfile tmpBuf
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include "onestepdelay.h"
#include "Cansend.h"  
#include "%<LibGetMdlPubHdrBaseName()>.h"
%closefile tmpBuf 
%<LibSetSourceFileSection(cFile, "Includes", tmpBuf)>

//这一行的作用是将tmpBuf文件的内容添加到main.c文件中去,是将这一部分的tmpBuf文件内容添加到main.c的includes部分
%assign tid01Eq = LibGetTID01EQ()

%% 添加主函数
%openfile tmpBuf
void main(void) {

static boolean_T OverrunFlags[%<LibNumDiscreteSampleTimes()>];
%if (LibNumDiscreteSampleTimes() - tid01Eq) > 2
boolean_T eventFlags[%<LibNumDiscreteSampleTimes()>];
int_T i;
%endif
%<LibCallModelInitialize()>
//上面这句话的作用是调用模型的初始化函数
initialize_ect();
EnableInterrupts; /* enable interrupts */
for(;😉 {
delay1ms(1);

/* Check for overun */
if (OverrunFlags[0]++) {
  %<LibSetRTModelErrorStatus("\"Overrun\"")>;
  return;
}

/* Save FPU context here (if necessary) */
/* Re-enable timer or interrupt here */
%assign varbuf = LibWriteModelInput(0,RollThreshold)
%if !WHITE_SPACE(varbuf)
  /* Remove conditional, and set model inputs associated with base rate here */
  #if 0
  %<varbuf>\
  #endif
%endif

%if (LibNumDiscreteSampleTimes() - tid01Eq) > 2
  %<LibCallSetEventForThisBaseStep("eventFlags")>\
%endif
  %<LibCallModelStep(0)>\
  

%assign varbuf = LibWriteModelOutput(0,RollThreshold)
%if !WHITE_SPACE(varbuf)
  /* Remove conditional, and get model outputs associated with base rate here */
  #if 0
  %<varbuf>\
  #endif
%endif

OverrunFlags[0]--;

%if (LibNumDiscreteSampleTimes() - tid01Eq) > 2
for (i = %<1+tid01Eq>; i < %<LibNumDiscreteSampleTimes()>; i++) {
if (eventFlags[i]) {
if (OverrunFlags[i]++) {
%<LibSetRTModelErrorStatus("“Overrun”")>;
return;
}

  %foreach idx = LibNumDiscreteSampleTimes()
   %assign varbuf = LibWriteModelInput(idx+1,RollThreshold)
    %if !WHITE_SPACE(varbuf)
      /* Remove conditional and set model inputs associated with subrates here */
    #if 0
    if (i == %<idx+1>) {
      %<varbuf>\
     }
    #endif
   %endif
  %endforeach

  switch(i) {
    %foreach idx = LibNumDiscreteSampleTimes() - 1 - tid01Eq
      %assign tid = idx + 1 + tid01Eq
	case %<tid> :
	   %<LibCallModelStep(tid)>\

       %if (EXISTS(CCPDaqListEnabled)==TLC_TRUE)
       %<SLibCCPDaqListFire(tid)>\
       %endif

	break;
    %endforeach
      default : 
      break;
    }

  %foreach idx = LibNumDiscreteSampleTimes()
   %assign varbuf = LibWriteModelOutput(idx+1,RollThreshold)
   %if !WHITE_SPACE(varbuf)
     /* Remove conditional and set model outputs associated with subrates here */
    #if 0
    if (i == %<idx+1>) {
      %<varbuf>\
    }
    #endif
   %endif
  %endforeach

  %% // Fire all DAQ signals after all step() functions have completed
  %% %<SLibCCPDaqListMultiRateSingleTaskFire()>

  OverrunFlags[i]--;
 }
}

%endif

/* Disable interrupts here */
/* Restore FPU context here (if necessary) */
/* Enable interrupts here */
    } 
}
%closefile tmpBuf
%<LibSetSourceFileSection(cFile, "Functions", tmpBuf)>

%% 添加实时中断宏定义
%if EXISTS(Vct_Int_Period)
  %openfile tmpBuf
       %assign  Int_Time_Index = SIZE(Vct_Int_Period) 
       %foreach i = Int_Time_Index[1]
            unsigned int flag_%<Vct_Int_Period[i]>ms;
       %endforeach
  %closefile tmpBuf
  %<LibSetSourceFileSection(cFile, "Definitions", tmpBuf)>\

  %openfile tmp
       #pragma CODE_SEG __NEAR_SEG NON_BANKED
       void interrupt 7 RTI_ISR(void){
            if(CRGFLG_RTIF==1){
                 CRGFLG_RTIF=1;       // 清中断标志位
                 %foreach i = SIZE(Vct_Int_Period,1)
                      flag_%<Vct_Int_Period[i]>ms++;  
                      if(flag_%<Vct_Int_Period[i]>ms==%<Vct_Int_Period[i]>){
                           flag_%<Vct_Int_Period[i]>ms=0;
                           task_%<Vct_Int_Period[i]>ms();
                      }
                 %endforeach
            }
       }
       #pragma CODE_SEG DEFAULT
 %closefile tmp
 %<LibSetSourceFileSection(cFile, "Functions", tmp)>\

%endif

%% 添加实时中断宏定义
%if EXISTS(Pit0_Int_Period)
%openfile tmpBuf
%assign Int_Time_Index = SIZE(Pit0_Int_Period)
%foreach i = Int_Time_Index[1]
unsigned int Pit0_%<Pit0_Int_Period[i]>_100ms;
%endforeach
%closefile tmpBuf
%<LibSetSourceFileSection(cFile, “Definitions”, tmpBuf)>\

  %openfile tmp
       #pragma CODE_SEG __NEAR_SEG NON_BANKED
       void interrupt 66 Pit0_ISR(void){
            if(PITTF_PTF0==1){
                 PITTF=0x01;              // 清中断标志位
                 %foreach i = SIZE(Pit0_Int_Period,1)
                      Pit0_%<Pit0_Int_Period[i]>_100ms++;
                      if(Pit0_%<Pit0_Int_Period[i]>_100ms==%<Pit0_Int_Period[i]>){
                           Pit0_%<Pit0_Int_Period[i]>_100ms=0;
                           Pit0task_%<Pit0_Int_Period[i]>_100ms();
                      }
                 %endforeach
            }
       }
       #pragma CODE_SEG DEFAULT
 %closefile tmp
 %<LibSetSourceFileSection(cFile, "Functions", tmp)>\

%endif

%% 添加实时中断宏定义
%if EXISTS(Pit1_Int_Period)
%openfile tmpBuf
%assign Int_Time_Index = SIZE(Pit1_Int_Period)
%foreach i = Int_Time_Index[1]
unsigned int Pit1_%<Pit1_Int_Period[i]>_100ms;
%endforeach
%closefile tmpBuf
%<LibSetSourceFileSection(cFile, “Definitions”, tmpBuf)>\

  %openfile tmp
       #pragma CODE_SEG __NEAR_SEG NON_BANKED
       void interrupt 67 Pit1_ISR(void){
            if(PITTF_PTF1==1){
                 PITTF=0x02;                  // 清中断标志位
                 %foreach i = SIZE(Pit1_Int_Period,1)
                      Pit1_%<Pit1_Int_Period[i]>_100ms++;
                      if(Pit1_%<Pit1_Int_Period[i]>_100ms==%<Pit1_Int_Period[i]>){
                           Pit1_%<Pit1_Int_Period[i]>_100ms=0;
                           Pit1task_%<Pit1_Int_Period[i]>_100ms();
                      }
                 %endforeach
            }
       }
       #pragma CODE_SEG DEFAULT
 %closefile tmp
 %<LibSetSourceFileSection(cFile, "Functions", tmp)>\

%endif
%% 添加实时中断宏定义
%if EXISTS(Pit2_Int_Period)
%openfile tmpBuf
%assign Int_Time_Index = SIZE(Pit2_Int_Period)
%foreach i = Int_Time_Index[1]
unsigned int Pit2_%<Pit2_Int_Period[i]>_100ms;
%endforeach
%closefile tmpBuf
%<LibSetSourceFileSection(cFile, “Definitions”, tmpBuf)>\

  %openfile tmp
       #pragma CODE_SEG __NEAR_SEG NON_BANKED
       void interrupt 68 Pit2_ISR(void){
            if(PITTF_PTF2==1){
                PITTF=0x04;                  // 清中断标志位
                 %foreach i = SIZE(Pit2_Int_Period,1)
                      Pit2_%<Pit2_Int_Period[i]>_100ms++;
                      if(Pit2_%<Pit2_Int_Period[i]>_100ms==%<Pit2_Int_Period[i]>){
                           Pit2_%<Pit2_Int_Period[i]>_100ms=0;
                           Pit2task_%<Pit2_Int_Period[i]>_100ms();
                      }
                 %endforeach
            }
       }
       #pragma CODE_SEG DEFAULT
 %closefile tmp
 %<LibSetSourceFileSection(cFile, "Functions", tmp)>\

%endif

%% 添加实时中断宏定义
%if EXISTS(Pit3_Int_Period)
%openfile tmpBuf
%assign Int_Time_Index = SIZE(Pit3_Int_Period)
%foreach i = Int_Time_Index[1]
unsigned int Pit3_%<Pit3_Int_Period[i]>_100ms;
%endforeach
%closefile tmpBuf
%<LibSetSourceFileSection(cFile, “Definitions”, tmpBuf)>\

  %openfile tmp
       #pragma CODE_SEG __NEAR_SEG NON_BANKED
       void interrupt 69 Pit3_ISR(void){
            if(PITTF_PTF3==1){
                 PITTF=0x08;                  // 清中断标志位
                 %foreach i = SIZE(Pit3_Int_Period,1)
                      Pit3_%<Pit3_Int_Period[i]>_100ms++;
                      if(Pit3_%<Pit3_Int_Period[i]>_100ms==%<Pit3_Int_Period[i]>){
                           Pit3_%<Pit3_Int_Period[i]>_100ms=0;
                           Pit3task_%<Pit3_Int_Period[i]>_100ms();
                      }
                 %endforeach
            }
       }
       #pragma CODE_SEG DEFAULT
 %closefile tmp
 %<LibSetSourceFileSection(cFile, "Functions", tmp)>\

%endif

%% 添加实时中断宏定义
%if EXISTS(Pit4_Int_Period)
%openfile tmpBuf
%assign Int_Time_Index = SIZE(Pit4_Int_Period)
%foreach i = Int_Time_Index[1]
unsigned int Pit4_%<Pit4_Int_Period[i]>_100ms;
%endforeach
%closefile tmpBuf
%<LibSetSourceFileSection(cFile, “Definitions”, tmpBuf)>\

  %openfile tmp
       #pragma CODE_SEG __NEAR_SEG NON_BANKED
       void interrupt 80 Pit4_ISR(void){
            if(PITTF_PTF4==1){
                 PITTF=0x10;              // 清中断标志位
                 %foreach i = SIZE(Pit4_Int_Period,1)
                      Pit4_%<Pit4_Int_Period[i]>_100ms++;
                      if(Pit4_%<Pit4_Int_Period[i]>_100ms==%<Pit4_Int_Period[i]>){
                           Pit4_%<Pit4_Int_Period[i]>_100ms=0;
                           Pit4task_%<Pit4_Int_Period[i]>_100ms();
                      }
                 %endforeach
            }
       }
       #pragma CODE_SEG DEFAULT
 %closefile tmp
 %<LibSetSourceFileSection(cFile, "Functions", tmp)>\

%endif

%% 添加实时中断宏定义
%if EXISTS(Pit5_Int_Period)
%openfile tmpBuf
%assign Int_Time_Index = SIZE(Pit5_Int_Period)
%foreach i = Int_Time_Index[1]
unsigned int Pit5_%<Pit5_Int_Period[i]>_100ms;
%endforeach
%closefile tmpBuf
%<LibSetSourceFileSection(cFile, “Definitions”, tmpBuf)>\

  %openfile tmp
       #pragma CODE_SEG __NEAR_SEG NON_BANKED
       void interrupt 81 Pit5_ISR(void){
            if(PITTF_PTF5==1){
                 PITTF=0x20;                  // 清中断标志位
                 %foreach i = SIZE(Pit5_Int_Period,1)
                      Pit5_%<Pit5_Int_Period[i]>_100ms++;
                      if(Pit5_%<Pit5_Int_Period[i]>_100ms==%<Pit5_Int_Period[i]>){
                           Pit5_%<Pit5_Int_Period[i]>_100ms=0;
                           Pit5task_%<Pit5_Int_Period[i]>_100ms();
                      }
                 %endforeach
            }
       }
       #pragma CODE_SEG DEFAULT
 %closefile tmp
 %<LibSetSourceFileSection(cFile, "Functions", tmp)>\

%endif
%% 添加实时中断宏定义
%if EXISTS(Pit6_Int_Period)
%openfile tmpBuf
%assign Int_Time_Index = SIZE(Pit6_Int_Period)
%foreach i = Int_Time_Index[1]
unsigned int Pit6_%<Pit6_Int_Period[i]>_100ms;
%endforeach
%closefile tmpBuf
%<LibSetSourceFileSection(cFile, “Definitions”, tmpBuf)>\

  %openfile tmp
       #pragma CODE_SEG __NEAR_SEG NON_BANKED
       void interrupt 82 Pit6_ISR(void){
            if(PITTF_PTF6==1){
                PITTF=0x40;                  // 清中断标志位
                 %foreach i = SIZE(Pit6_Int_Period,1)
                      Pit6_%<Pit6_Int_Period[i]>_100ms++;
                      if(Pit6_%<Pit6_Int_Period[i]>_100ms==%<Pit6_Int_Period[i]>){
                           Pit6_%<Pit6_Int_Period[i]>_100ms=0;
                           Pit6task_%<Pit6_Int_Period[i]>_100ms();
                      }
                 %endforeach
            }
       }
       #pragma CODE_SEG DEFAULT
 %closefile tmp
 %<LibSetSourceFileSection(cFile, "Functions", tmp)>\

%endif

%% 添加实时中断宏定义
%if EXISTS(Pit7_Int_Period)
%openfile tmpBuf
%assign Int_Time_Index = SIZE(Pit7_Int_Period)
%foreach i = Int_Time_Index[1]
unsigned int Pit7_%<Pit7_Int_Period[i]>_100ms;
%endforeach
%closefile tmpBuf
%<LibSetSourceFileSection(cFile, “Definitions”, tmpBuf)>\

  %openfile tmp
       #pragma CODE_SEG __NEAR_SEG NON_BANKED
       void interrupt 83 Pit7_ISR(void){
            if(PITTF_PTF7==1){
                 PITTF=0x80;                  // 清中断标志位
                 %foreach i = SIZE(Pit7_Int_Period,1)
                      Pit7_%<Pit7_Int_Period[i]>_100ms++;
                      if(Pit7_%<Pit7_Int_Period[i]>_100ms==%<Pit7_Int_Period[i]>){
                           Pit7_%<Pit7_Int_Period[i]>_100ms=0;
                           Pit7task_%<Pit7_Int_Period[i]>_100ms();
                      }
                 %endforeach
            }
       }
       #pragma CODE_SEG DEFAULT
 %closefile tmp
 %<LibSetSourceFileSection(cFile, "Functions", tmp)>\

%endif

%endfunction

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值