关于C代码中的特殊运算按位操作的介绍和应用

描述

C代码中有一种特殊的运算,即按位操作。那么,

在Simulink模型里可以实现按位来操作吗?

能继而生成按位操作的代码吗?

位操作

要得到:

y1 = (uint8_T)(u1 & 217)

或者

y1 = (uint8_T)(u1 & 0xD9)

怎么做:

在Simulink框图模型里使用Bitwise Operator系列的模块;

在Stateflow里则直接使用按位操作符,比如&,|;

在MATLAB Function的m脚本里则使用bitor (bitxx)系列的命令。

实例四

1. 新建一个简单的Simulink模型

这三个模块都只实现了一个简单的运算:对输入u1执行按位运算。

C代码

双击上图中Bitwise Operator模块,设置如下图:

C代码

Chart 里则直接写单个 & 符号表示 “按位与”,同时需要注意 Enable C-bit operations 勾选,不然会计算出错。它默认是勾选上的。

C代码

MATLAB Function 里的语句,直接使用 bitxx 系列的命令。点击 Edit Data,也可以手动设置输入输出口的数据类型。

C代码

2. 代码生成基本配置

求解器:定步长—离散求解器

系统目标文件:ert.tlc

3. 新建数据对象

打开Model Explorer,点击菜单的Add,在Base Workspace里定义输入输出信号的数据对象,数据对象类型为Simulink.Signal,并如图设置输入输出均为uint8类型,StorageClass设置为ExportedGlobal:

C代码

4. 信号关联

在信号线上右键,将信号与Base Workspace的数据对象关联在一起。鼠标操作的方式,可以参考之前的帖子里的菜单截图。因为这里的信号略多,所以可以使用命令的方式来实现:

C代码

此时,第一张模型截图中信号名前方的蓝色小叉子就会出现。

5. 生成代码

Ctrl+B,生成代码。

如前面所设置的,得到这三个按位操作的代码:

C代码

所以说,在Simulink建模也可以实现按位运算:

在Simulink框图模型里使用Bitwise Operator模块;

在Stateflow里则直接使用按位操作符,比如&,|;

在脚本里则使用bitor (bitxx)系列的命令。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分