我是靠谱客的博主 迷你裙子,最近开发中收集的这篇文章主要介绍Stateflow中的除法运算,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

将Stateflow中的Action Language设置为MATLAB;

在Chart中,让两个数相除,如下图所示;Tsig、Tstep、Rate的类型均为uint8 (对应C语言的unsigned char)
在这里插入图片描述
如果对该模型进行编译,那么上图中的 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	  }


最后

以上就是迷你裙子为你收集整理的Stateflow中的除法运算的全部内容,希望文章能够帮你解决Stateflow中的除法运算所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部