打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
怎样生成我想要的 C 代码系列(4)
userphoto

2022.09.17 广东

关注

C 代码中有一种特殊的运算,即按位操作。那么在 Simulink 模型里可以实现按位来操作吗,能继而生成按位操作的代码吗?


位操作

要得到:

        y1 = (uint8_T)(u1 & 217); 或者

        y1 = (uint8_T)(u1 & 0xD9);

怎么做:

        在 Simulink 框图模型里使用 Bitwise Operator 系列的模块;在 Stateflow里则直接使用按位操作符,比如&,|;在 MATLAB Function 的 m 脚本里则使用 bitor (bitxx)系列的命令。

举个例子

1. 新建个简单的 Simulink 模型

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


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

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

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


2. 代码生成基本配置:

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

系统目标文件:ert.tlc

3. 新建数据对象

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

4. 信号关联

在信号线上右键,将信号与 Base Workspace 的数据对象关联在一起。鼠标操作的方式,可以参考之前的帖子里的菜单截图。

因为这里的信号略多,所以可以使用命令的方式来实现:

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

5. 生成代码

Ctrl+B,生成代码。

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

总结

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

在 Simulink 框图模型里使用 Bitwise Operator 模块;在 Stateflow里则直接使用按位操作符,比如&,|;在脚本里则使用 bitor (bitxx)系列的命令。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
怎样生成我想要的C代码系列 | MATLAB Function实现数学运算
在simulink环境下实现实时仿真
Simulink中使用已有的c代码进行仿真和代码生成
【MBD开发】Simulink重定义数据类型
使用Matlab
[转载]基于模型开发之代码集成(一)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服