概述
将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中的除法运算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复