/%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 雨的旋律汽车电子开发板
% 网店地址: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