Stateflow中的除法运算 您所在的位置:网站首页 matlab中的取余运算 Stateflow中的除法运算

Stateflow中的除法运算

2023-11-11 21:30| 来源: 网络整理| 查看: 265

将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 }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有