我是靠谱客的博主 喜悦往事,最近开发中收集的这篇文章主要介绍simulink模型逻辑与生成代码简单比较                           模型与生成代码对照,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

                           模型与生成代码对照

1、以下以一个简单的模型为例将模型与生成的代码做一个对照

生成代码中会有一个维持着整个状态的 结构体变量

DW_PS_SearchKey_T PS_SearchKey_DW;  //全局变量

void PS_SearchKey_step(void)

{

// 模型的四个输入 非模型之间传递的输入 是在模型ADD的输入

  uint8_T BrakeSw_prev;

  uint8_T PushButtonStatus_prev;

  uint8_T DR_Ajar_prev;

  uint8_T IGN_Status_prev;

 

//系统计时后面有用到after(maxtime,tick) 比如5 可作为整个局部系统的计时

  if (PS_SearchKey_DW.temporalCounter_i1 < 65535U) {

    PS_SearchKey_DW.temporalCounter_i1++;

  }

//给模型的四个信号赋初值

  BrakeSw_prev = PS_SearchKey_DW.BrakeSw_start;

  PS_SearchKey_DW.BrakeSw_start = get_BrakeSw();

  PushButtonStatus_prev = PS_SearchKey_DW.PushButtonStatus_start;

  PS_SearchKey_DW.PushButtonStatus_start = get_PushButtonStatus();

  DR_Ajar_prev = PS_SearchKey_DW.DR_Ajar_start;

  PS_SearchKey_DW.DR_Ajar_start = get_DR_Ajar();

  IGN_Status_prev = PS_SearchKey_DW.IGN_Status_start;

  PS_SearchKey_DW.IGN_Status_start = get_IGN_Status();

//判断是不是第一次进入模型 如果是第一次进入会执行 默认转移

//然后执行默认转移模块中的 enter (状态被激活时执行) 

if (PS_SearchKey_DW.is_active_c81_PS_SearchKey == 0U) {

    PS_SearchKey_DW.is_active_c81_PS_SearchKey = 1U;

    PS_SearchKey_DW.is_c81_PS_SearchKey = PS_SearchKey_IN_IDLE(A); // 进入模型的初始状态机

    //状态的切换都是以switch 的形试

    set_PS_KeyInCarFlag((uint16_T)((uint8_T)mFALSE));

    set_KeySearchRqst_PS(((uint8_T)KEYSEARCH_NULL));

     set_PEPS1_W_KeyNotDetected(((uint8_T)WARNING));

}

else

{   

   // 开始执行状态机的切换

   

switch (PS_SearchKey_DW.is_c81_PS_SearchKey)

{

 Case A:

if(1||2||3||4)

{

   执行B的 enter

   PS_SearchKey_DW.is_c81_PS_SearchKey = B

}else{} Break;

 Case B:

 If(5)

{

    执行F的enter

    PS_SearchKey_DW.is_c81_PS_SearchKey = F;

}

else

{

       执行10

      执行C的enter

      PS_SearchKey_DW.is_c81_PS_SearchKey = C;

}break;

Case C:

If(8)

{

  执行F的enter;

 PS_SearchKey_DW.is_c81_PS_SearchKey = F;

}

else if(9)

{

   执行B的 enter

   PS_SearchKey_DW.is_c81_PS_SearchKey = B;

}

else

{

   If(13)

    {

         执行D的enter

        PS_SearchKey_DW.is_c81_PS_SearchKey = D;

}

}

Case D:

 {

 If(11)

{

     执行F的enter;

     PS_SearchKey_DW.is_c81_PS_SearchKey = F;

}

else

{

       If(13)

    {

        PS_SearchKey_DW.is_c81_PS_SearchKey = E;

       清空条件13中的累加值

   }

}

}

 

Case F:

{

执行F的enter;

If(15)

{

       执行A的enter;

PS_SearchKey_DW.is_c81_PS_SearchKey = A; //然后在循环

}

else

{

       If( 7 || 5)

       {

         执行B的 enter

         PS_SearchKey_DW.is_c81_PS_SearchKey = B

    }

}
}

Default:   //其实就是执行的最后一个模块的处理

If(12)

{

         执行D的enter

      PS_SearchKey_DW.is_c81_PS_SearchKey = D;

}

else

{

     If(14)

   {

              执行A的enter;

           PS_SearchKey_DW.is_c81_PS_SearchKey = A; //然后在循环

}

}

}

}

 

最后

以上就是喜悦往事为你收集整理的simulink模型逻辑与生成代码简单比较                           模型与生成代码对照的全部内容,希望文章能够帮你解决simulink模型逻辑与生成代码简单比较                           模型与生成代码对照所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部