Stateflow中的除法运算

将Stateflow中的Action Language设置为MATLAB;

在Chart中,让两个数相除,如下图所示;Tsig、Tstep、Rate的类型均为uint8 (对应C语言的unsigned char)
Stateflow中的除法运算_第1张图片
如果对该模型进行编译,那么上图中的 Rate = Tsig/Tstep,将生成如下代码:

41	  uint8_T x;  // 此为生成的中间变量
42	  ttt_DW.counter = 0U;
43	  ttt_B.out = 0.0;
44	  if (ttt_B.Tstep == 0) { //对分母为0的情况进行处理
45	    if (ttt_B.Tsig == 0) {
46	      ttt_B.Rate = 0U; // 如果分母和分子同时为0,那么计算结果为0
47	    } else {
48	      ttt_B.Rate = MAX_uint8_T; // 如果仅仅是分母为0,分子并不为0,那么结果为此类型的最大值,即255
49	    }
50	  } else { // 对分母不为0的情况进行处理

		// 如果分母为0,那么结果为类型最大值;
		// 否则,进行正常运算
		// 为了运算的需要,这里将分子的数据长度进行了临时性的强制转换;
		// 计算结束后,数据类型会自动转为Rate的设定类型(uint8)
51	    ttt_B.Rate = (uint8_T)(ttt_B.Tstep == 0U ? MAX_uint32_T : (uint32_T)
52	      ttt_B.Tsig / ttt_B.Tstep); 

		// 处理计算结果的“四舍五入”问题
53	    x = (uint8_T)((uint32_T)ttt_B.Tsig - (uint8_T)((uint32_T)ttt_B.Rate *
54	      ttt_B.Tstep));
		// 如果
55	    if ((x > 0) && (x >= (int32_T)((uint32_T)ttt_B.Tstep >> 1) + (ttt_B.Tstep &
56	          1))) {
57	      ttt_B.Rate++;
58	    }
59	  }


你可能感兴趣的:(学习笔记)