simulink基础学习笔记

写在前面
这个笔记是看B站UP 快乐的宇航boy 所出的simulink基础教程系列视频过程中记下来的,写的很粗糙不完整,也不会补。视频教程很细跟着做就行。
lesson1-7节的笔记up有,可以加up的群,里面大佬挺活跃的。


lesson8 for循环 For iterator subsystem

在这里插入图片描述

例1 循环累加(迭代次数10次)
在这里插入图片描述

双击For Iterator可以配置迭代次数

在这里插入图片描述

例2 查找数组中大于5的数个数
在这里插入图片描述

在该样例中,设置项【开始时的状态】对运行结果影响很大,如果设置为【保持】,则在每次进入该模块运行时,累加器上一次的运行结果会被保留,导致最终的运算结果出错。设置为【重置】,每次进入模块时累加器都会清零从新计算,最终计算结果正常。

在这里插入图片描述

例3 查找数组中数值为5的数的下标

在这里插入图片描述

For iterator设置迭代次数(从内部或外部) 输出为索引值
可以根据输入值【设置下一个迭代变量 i】 set next i

在这里插入图片描述

在本例中,Next_i变量的作用是查到索引后跳出循环。
小结:simulink的for循环模块使用不如C语言for循环,一般实际工程中使用simulink的stateflow状态机实现for循环要更加灵活。


lesson9 while/if/switch case

while循环 while iterator subsystem

模块名 while iterator subsystem

在这里插入图片描述

IC - Init condition - 使能,若IC输入为0,则不进入循环
进入子系统,为循环累加模型,如下图
cond - condition - 控制循环是否继续的使能条件

在这里插入图片描述

双击【while iterator】模块设置【循环迭代次数】和【开始时的状态】

在这里插入图片描述


if模块

和 if action subsystem模块搭配使用(用于执行条件成立后动作

在这里插入图片描述

else if分支,双击模块配置实现,使用逗号分隔分支判断条件

在这里插入图片描述


switch case模块

相当于多分支if,执行模块同样为if action subsystem

在这里插入图片描述

双击配置分支case,中间用逗号分隔

在这里插入图片描述

在Action子系统内可以对数据保持状态进行配置

在这里插入图片描述


lesson10 各类常用子系统介绍

Enabled subsystem 使能子系统

在这里插入图片描述

该子系统为累加器,在Enable使能信号值为1时,运行子系统

在这里插入图片描述

运行结果如下图,符合预期(使能信号为1时,计数值累加)

在这里插入图片描述

Triggered subsystem 触发子系统

上升沿/下降沿时使能

在这里插入图片描述

pulse generator 脉冲信号 触发源
子系统内部模型同样为累加器

在这里插入图片描述

通过子系统内对Trigger的配置可以设置 上升沿/下降沿/上升沿或下降沿 触发

在这里插入图片描述

运行模型结果如下图,符合预期(在trigger信号为上升沿&下降沿时计数值增加)

在这里插入图片描述

function-call subsystem 函数调用子系统

在这里插入图片描述

用信号为function call 需使用模块生成信号进行调用 function-call generator,内外部时间设置必须一致,否则报错。
下图为Function-Call Generator的参数设置,采样时间为0.1,意味着0.1s进入一次Function-Call Subsystem

在这里插入图片描述

subsystem内部如下图,为累加器

在这里插入图片描述

双击function模块进行配置,注意配置项【采样时间】需与Function-Call Generator的参数设置一致,否则会报错。

在这里插入图片描述

运行结果如下图,符合预期(0.1秒进入一次子系统,0.1秒建个累加器数值增加)

在这里插入图片描述

【注:采样时间设置项必须为模型步长的倍数】

例2 使用stateflow调用Function-Call

【注:关于stateflow模块需看lesson15】

在这里插入图片描述

stateflow状态机内部

在这里插入图片描述

配置event信号如下图

在这里插入图片描述

结果如下图,符合预期(0.1秒计数值增加一)

在这里插入图片描述

Simulink Function

Simulink Function和Function Caller模块搭配使用,前者为定义,后者调用
simulink function类似于C语言函数定义
函数输入非单一,也支持数组输入 输入输出端口维度需要定义
例1 加法函数

在这里插入图片描述

Function内部实现,简单加法

在这里插入图片描述

Function Caller调用函数,模块参数配置如下
用逗号分隔开函数输入/输出的多个引脚

在这里插入图片描述

运行结果如下图

在这里插入图片描述

定义了Simulink Function后可以多次调用

例2 数组加法
Simulink Function内部实现如下图,实现维度为3的数组和数值相加的加法器,输出一个维度3的数组

在这里插入图片描述

双击对Simulink Function模块进行配置,可以修改函数名称,修改函数范围

在这里插入图片描述

Function Caller参数配置如下

在这里插入图片描述

两种调用方式如下,数组输入可以使用mux也可直接在Constant模块直接输入

在这里插入图片描述


lesson11 作业

【注:这节模型大,不好截图,看视频跟着做比较好】
搭建简易车辆动力学模型,公式如下图

在这里插入图片描述

参数如下
在这里插入图片描述

使用m脚本文件管理参数

使用m脚本管理模型参数优势在于,如果参数修改了,只需要修改m文件,而不需要修改模型


lesson12 查表模块 Lookup Table

一维查表 1-D Lookup Table

X-breakpoints断点 Y-TableData表数据

在这里插入图片描述

上图查表模块配置对应下表

x-2-1012
y12345

查表X-Y需一一对应,数组维度需要匹配。且breakpoints-X必须单调增加,否则会报错。
通过X来查找对应的Y数据,运行结果如下图所示,符合查找预期(输入1结果4)。

在这里插入图片描述

由于模块插值算法设置项选择了【线性点-斜率】方法,输入X值在表格中2个X之间时,会根据两点斜率计算中间点的值。

在这里插入图片描述

输入X=0.5得到结果Y=3.5

在这里插入图片描述

若插值方法选择【均一/Flat】,即X值和下一X值之间的所有X数值所对应的Y值均为前一X值所对应的Y值。(类似于取整)

在这里插入图片描述

若插值方法选择【最临近值/Nearest】,两X中间值所对应的Y值则由更临近的X值决定。(类似于四舍五入)

在这里插入图片描述

运行结果
在这里插入图片描述

当外插值方法选择【线性】时,系统根据最后两个点的斜率计算之后的数据

在这里插入图片描述

例如
在这里插入图片描述

如果外插选择【裁剪】

在这里插入图片描述

运行结果

在这里插入图片描述

使用m脚本进行参数管理

在matlab中编写m脚本

在这里插入图片描述

运行后matlab工作区会出现对应变量

在这里插入图片描述

将变量添加进模块配置

在这里插入图片描述

运行结果

在这里插入图片描述

设置表格数据为外部输入,即从输入端口输入表数据和断点。

在这里插入图片描述

从外部输入数据,模型如下,结果正确。

在这里插入图片描述

二维查表 2-D Lookup Table

使用m脚本管理参数,x1对应行标号,x2对应列标号,y2为表格数值。表格行数对应x1数组长度,表格列数对应x2数组长度。

在这里插入图片描述

模块配置

在这里插入图片描述

模型输入有2项,u1对应查找行,u2对应查找列

在这里插入图片描述

三维查表 3-D Lookup Table

使用m脚本配置三维表格参数

在这里插入图片描述

模块配置

在这里插入图片描述

模型结果

在这里插入图片描述

动态查表 Lookup Table Dynamic

表格数值在模型运行时变化,使用动态查表

在这里插入图片描述

运行结果

在这里插入图片描述

【使用场景:查表的数据由其他模块计算而来,可使用该模块】
在新版本matlab中,普通一维查表模块的配置表格数值从外部端口输入,也可实现动态查表的功能

在这里插入图片描述

模型如下

在这里插入图片描述

运行结果

在这里插入图片描述


Lesson13 Matlab Function

使用m脚本实现模块功能,双击模块进入编辑器
多输入输出函数

function [y1, y2] = fcn(u1, u2)
	  y1 = u1 + u2;
	  y2 = u1 - u2;
end

运行

在这里插入图片描述

在编辑器界面点击【编辑数据】,可以对输入输出参数进行配置,如配置参数大小、类型等

在这里插入图片描述

if语句

每个if需和end关键字配对

function y = fcn(u1)
	y = 0;
	if u1 > 0
		y = 1;
	elseif u1 < 0
    	y = -1;
  	elseif u1 == 0
    	y = 0;
  	end
  
end

运行

在这里插入图片描述

for循环

每个for循环 需要匹配end关键字
for循环参数说明 - 起始步 : 步长 : 终点

% 查找数组u中大于0的数个数
function y = fcn(u)
	y = uint8(0);
  	for i = 1:1:5
    	if u(i) > 0
      		y = y + 1;
    	end
  	end
  
end

结果

在这里插入图片描述

matlab库函数 排序sort
% 排序
function y = fcn(u)
	y = sort(u);
  
end

结果(sort函数默认从小到大排序)

在这里插入图片描述

persistent关键字 定义持久变量

在这里插入图片描述

一般函数内定义的变量为局部变量,函数结束后被清除。persistent持久变量相当于全局变量,不会在函数结束后被清除。相当于c语言static关键字,静态局部变量。

% persistent变量
function y = fcn()

	persistent u;
  	% u = 0;
  	if isempty(u)
    	u = 0;
  	end
  	u = u + 1;
  	y = u;

end

注:matlab无u++;这种写法,自增须写为u = u + 1;
运行结果(时长5s,步长0.1)

在这里插入图片描述

添加trigger - 上升沿/下降沿触发执行

符号窗口点击添加事件,选择添加trigger/触发器

在这里插入图片描述

点击添加好的trigger可以配置触发器触发方式

在这里插入图片描述

模型如下图,pulse generator发出占空比50%周期1s的方波,

在这里插入图片描述

matlab function模块内部为自累加函数

% 自累加
function y = fcn()

	persistent u;
  	if isempty(u)
    	u = 0;
  	end
  	u = u + 1;
  	y = u;

end

运行结果如下图,每次上升沿触发一次模块执行,累加计数值加一

在这里插入图片描述

添加 function call函数调用输出

和trigger添加类似,可以添加多个函数调用输出

在这里插入图片描述

函数调用输出fcncall名称可以更改,调用fcncall直接在代码中输入对应名称即可。

在这里插入图片描述

step阶跃模块:在某一时刻(设置阶跃时间为4s)发生从数值0到数值1的变化
参考:https://blog.csdn.net/Mountain01/article/details/130782041

MATLAB function模块内部代码

function fcn(u)
    if u > 0
        fcncall;
    end

end

Function-Call Subsystem内部

在这里插入图片描述

运行结果,在第4秒时发生阶跃,matlab function模块发出function call信号使能Function-Call subsystem模块进行自累加

在这里插入图片描述


lesson14 Data Inspector 数据检查器

【此节使用模型为Lesson11作业】

在这里插入图片描述

除了scope模块以外的数据查看方法,比scope更加灵活

在这里插入图片描述

设置需要检测的数据

双击信号线,可以配置该信号线的名称,配置好名称便于在数据检查器中查看

在这里插入图片描述

单机信号线,会出现标识“…”,选择第二项“记录所选信号”(图标为无线信号)

在这里插入图片描述

正在记录的信号线将显示图标,单机图标也可进入数据检查器窗口

在这里插入图片描述

输出端口会默认记录数据在data inspector中
设置显示单位和数据类型【注:单位需要在信号线对应模块中进行配置,才会在此处显示】

在这里插入图片描述

设置图表布局

在这里插入图片描述

要使信号线数据显示在右侧图表框内,需要在左侧信号列表勾选信号名,一个子图内也可勾选多个信号数据

在这里插入图片描述

在同一图表中检测任意数量的数据曲线

在这里插入图片描述

通过游标工具可以查看曲线上对应点的数值,两个游标可以查看两个数值之间的时间差

在这里插入图片描述

清除子图可以将所选的或者所有子图勾选的信号线数据清空,恢复为初始状态

在这里插入图片描述

查找信号在模型中的位置,可以在左侧信号列表中选择信号,点击右键->在模型中突出显示,点击右上角的×可以关闭高亮效果。

在这里插入图片描述

与前一次运行数据进行比较

样例为之前搭建的RC一阶滤波器【第一节】

在这里插入图片描述

选择记录输入信号线和输出信号线,在数据检查器中观测结果
先以alpha=0.05运行一次,再以alpha=0.07运行第二次,比较两次运行的输出信号结果

在这里插入图片描述

进入比较模块,选择基线和比较项分别为第一次运行输出信号和第二次运行输出信号,点击比较。因为未进行容差设置,左侧界面标红显示不匹配。

在这里插入图片描述

容差:以基线为基础,在±容差值的范围内查看比较项是否在基线的容差范围内。
点击比较项旁边的[+更多]以配置容差参数,此处设置绝对容差0.2,然后点击比较。

在这里插入图片描述

可以看到左侧显示匹配,下图中曲线上下绿色区域即基线数值±容差值的范围,比较项处于该范围内因而通过比较。

在这里插入图片描述

数据文件可以另存为.mldatx文件,以便下次使用

在这里插入图片描述


lesson15 stateflow基础 流程图

stateflow库

在这里插入图片描述

示例 使用chart实现if语句

判断语句写在中括号内,执行语句写在大括号内。
一般规范,横线写判断语句,纵线写执行语句。
同一个节点有多个跳转线时应设置优先级(线上的数字)。

线的优先级更改:右键线,执行顺序Execution order。

在这里插入图片描述

在模型资源管理器Model Explorer中可以对接口和参数进行配置。

示例 使用chart实现for循环

输出数组等于输入数组的平方

在这里插入图片描述

注:数组索引起始为1
在chart中右键线条可以设置断点

使用C语言

设置方式如图,在chart模块左下角小图标可以看到当前语言

在这里插入图片描述

一般来说语法没有太大差别,区别点:
自增
C语言 i ++;
matlab i = i + 1;
取反
C语言 y = !x;
matlab y = ~x;

参数使用matlab脚本中定义变量

在模型资源管理器中设置
设置变量作用域Scope为parameter,即可识别到脚本中变量


lesson16 stateflow基础 状态机

if x > 0
	state = 1;
else
	state = 0;

使用状态机实现逻辑,如图

在这里插入图片描述

需要在模型资源管理器中配置变量并配置输入、输出端口,如下图

在这里插入图片描述

状态机状态之间如果有多条跳转线,将会按照跳转线的优先级来依次判断。
状态机每次步长进行一次跳转,不能连续跳转(即便满足条件也不跳转)。

entry / during / exit

entry后的语句会在进入状态时执行;
during后的语句会在状态保持时执行;
exit后的语句会在退出状态时执行。

if x > 0
输出状态state = 1
且输出计数1开始计数

if x <= 0
输出状态state = 0
且输出计数2开始计数

使用chart实现如图

在这里插入图片描述

需要在模型资源管理器中配置参数

在这里插入图片描述

实现结果

在这里插入图片描述

entry关键字可缩写为en,during关键字可缩写为du,exit关键字可缩写为ex

在状态机中添加流程图

if x > 0
输出状态state=1
在状态1下,如果y=1,计数器开始计数
如果y=0,计数器停止计数,且计数器数据保持不变

if x <= 0
输出状态state=0
计数器清零

实现

在这里插入图片描述

默认转移线(有实心圆点的线)只会在第一次进入状态时走,另一条线在状态保持期间走(从状态边框拉出)。
运行使用单步运行,过程中修改x,y数据进行调试。快捷键shift + ctrl + x可注释不适用的模块,防止影响数据检查。

运行结果

在这里插入图片描述

状态自跳转

自跳转:状态从自身退出,又重新进入自身
例 计数器

start == 1
计数器计数
reset == 1
计数器重置

实现

在这里插入图片描述

运行结果

在这里插入图片描述


lesson17-18 代码生成

场景

在这里插入图片描述

流程

在这里插入图片描述

步骤
搭建模型,在【APP】栏选择【Embedded Coder】,会弹出新栏【C代码】,进入并点击【编译】即可生成C代码。

在这里插入图片描述

在这里插入图片描述

编译快捷键【Ctrl+B】
注:建模需设置为定步长才可进行代码生成
生成代码的最外层需要有inport和outport,即输入输出端口

在这里插入图片描述

生成文件
ert -
rtw - real time workshop

代码文件

和模型名称同名的.c文件为主要代码文件,实现模型功能。

step函数 主要,运行时

initialize 初始化

terminate 终止

所有inport输入会在一个结构体中,全局变量。outport输出同上。

同名.h文件,实际程序中include后,可以调用.c中函数

代码生成配置

求解器配置

在这里插入图片描述

固定步长(基础采样时间)设置不会影响实际代码

tlc选择
在这里插入图片描述
tlc相当于代码生成的模板

是否生成报告&是否自动打开报告
在这里插入图片描述

只生成代码
编译会生成可执行文件,win平台生成同名.exe文件。一般仅生成代码就行。

在这里插入图片描述

模型和代码的追溯关系设置

在这里插入图片描述

对模型中想追溯代码的模块单击【右键】-【C/C++代码】-【导航到C/C++代码】,即可定位到该模块生成的代码在c文件中的位置。
此功能在代码调试bug时会用到。

静态代码度量 static code metrics
在【配置参数】 > 【代码生成 】> 【报告】窗格中,选择【生成静态代码度量】。生成代码报告中会有相关讯息。

原子子系统

右键子系统模块【模块参数】,勾选【视为原子单元】

在这里插入图片描述

原子子系统对比其他子系统边框更粗,细边框的子系统实际上为虚拟子系统,matlab生成代码时仍然作为整体看待。

在这里插入图片描述

点击【代码生成】栏即可配置该原子子系统代码生成相关配置

在这里插入图片描述

重新生成代码,即会单独生成相应子系统代码文件

在这里插入图片描述

文件打包格式配置

紧凑型 compact

在这里插入图片描述

原子子系统配置需配置【文件名选项】为【自动】,否则会与紧凑型生成代码相冲突报错。

在这里插入图片描述

生成的代码文件数量变少,函数、代码等被集合到同一个文件中,便于复制代码。

在这里插入图片描述

其他

在这里插入图片描述

代码映射 Code Mapping - C

在这里插入图片描述

可以对生成的函数名称进行设置


lesson19 常用模块介绍2

saturation 范围限制

在这里插入图片描述

效果

在这里插入图片描述

ground & terminator

如果根据功能,模型的输入或者输出端口不需要连接任何模块,直接悬空,也可以仿真或者生成代码,但通常都会报告警信息。
对于不使用的输出端口,可以连接到Terminator模块上;
对于不需要信号输入的输入端口,可以连接到Ground模块上,等同于给了输入值为0;
这样可以避免模型报出告警信息,也使得模型更加规范。

在这里插入图片描述

Rate Limiter 变化速率限制模块

功能:对输入信号的变化速率的最大值进行限制,信号变大的速率和变小的速率的最大值,分开设置。
如果信号变大的速率小于Rising slewrate,则输出与输入相同;
如果信号变大的速率大于Rising slewrate,则输出按照Rising slewrate的速度更新;
信号变小同理。

在这里插入图片描述

效果如图

在这里插入图片描述

Integrator/Discrete-Time Integrator 连续积分器/离散积分器

功能:对输入信号进行积分
Integrator:官方不建议生成代码
Discrete-Time Integrator:嵌入式系统软件开发,应使用这个积分器,可以生成代码测试

在这里插入图片描述

二者效果相同

在这里插入图片描述

连续微分 Derivative / 离散微分 Discrete Derivative

求斜率

在这里插入图片描述

结果

在这里插入图片描述

乘积 Product of elements

将输入的所有元素相乘,使用方法和普通product模块有别

在这里插入图片描述

修改配置项中【输入数目】项的符号【*】为【/】,功能变为将元素相乘后求倒数

在这里插入图片描述

结果

在这里插入图片描述

注:和product本质为同一模块,符号改变为【**】即变为普通product

求和 Sum of Elements

对输入各个元素求和

在这里插入图片描述

修改【符号列表】项符号为【-】,功能变更为数组求和后求反

在这里插入图片描述

结果

在这里插入图片描述

注:和加法器为同一模块,修改【符号列表】为【++】,变为普通加法器

Data Type Conversion 数据类型转换模块

功能:可以将一个信号的数据类型转换成另一种类型。
双击模块在【模块参数】中配置【输出类型】即可配置强制转换类型。
如果是浮点的转换成整形,则小数点会被抹掉,在建模过程中,如果模型报出数据类型不匹配的错误,可以使用这个模块将数据类型转换成需要的类型。
使用这个模块应当注意,转换类型应合理,在将宽的数据类型转换成窄的数据类型时,应当审视是否有溢出。
下图展示了浮点转整形时,小数会被抹掉:

在这里插入图片描述

数据类型转换时要注意合理性,以下为错误示范:高8位被丢弃,导致数据出现错误。

在这里插入图片描述

数据类型向后继承Inherit,自动根据后面要使用的数据类型进行转换,不要特别进行设置

在这里插入图片描述


lesson20 常用模块介绍3

视频:https://www.bilibili.com/video/BV17h4y197W4

Manual Switch 手动开关

功能:根据开关状态选择不同输入通路,双击模块即可切换开关状态。
在这里插入图片描述

Merge 合并模块

功能:Merge模块可以将多个输入合并成一个信号,合并的逻辑是,输出信号等于当前被激活的那个输入信号,因此多个输入信号不能同时被更新,在同一个时刻,应只有一个输入信号被更新。

Merge模块的输入信号应当用心设计,永远使用有条件执行的子系统的输出作为Merge模块的输入,并且将子系统未被使能时输出的更新设置成held,参考help文档中Merge模块的使用原则,例如下面这个模型:

在这里插入图片描述

Multiport Switch 多端口选择模块

功能:根据控制信号的值,选择不同的输入信号输出,与C语言中的Switch语句很类似。

最上方入参为控制信号,如果输入为浮点型数据,simulink会自动对其取整。
最下方*为default默认输出,通过设置可配置告警或者报错。

在这里插入图片描述

模块参数中可以对该模块进行配置,如【数据端口数量】可以配置分支数量,默认端口是否和最后一个端口合并等。

在这里插入图片描述
效果

在这里插入图片描述

Sources 信号源类别模块

仿真时使用

在这里插入图片描述

Signal Builder 信号构造模块

功能:构造自己想要的各种信号曲线,帮助测试模型。
新版本移除该模块,功能放在Signal Editor模块中。

在matlab命令行输入如下代码进行调用:

block = signalbuilder([], 'create', [0 5], {[2 2];[0 2]});

打开Signal Builder可以在其中编辑需要的各种曲线,实例效果如下:

在这里插入图片描述
编辑器

在这里插入图片描述

效果

在这里插入图片描述

Clock/Digital Clock 时钟/数字时钟模块

功能:输出当前仿真时间
连续系统使用Clock模块,离散系统使用Digital Clock模块

在这里插入图片描述

如下图所示,digital clock数字时钟更新与模块设定的【采样时间】有关,Clock时钟模块时间数值是连续更新的。

在这里插入图片描述

Stop Simulation 仿真停止模块

功能:输入信号设为True,可以控制仿真停止
如下模型展示了这个模块的功能,斜坡信号模块的斜率为1,当仿真时间达到10时,StopSimulation模块的输入信号变为true,所以虽然仿真时间设为20,但是在10s时仿真停止。

在这里插入图片描述

Real-Time Synchronization 实时仿真模块

功能:可以控制模型按照真实时间的速度运行,适用于模型和一些实时系统联合仿真调试的场景。但是改模块保证的实时性精度不高。

在这里插入图片描述
添加该模块到模型中即可,该模块没有输入输出。如下参数配置,表示误差累积达到10次,模型会报错停止运行,如果可以接受实时性的误差,不希望模型经常报错停止运行,可以将这个参数设置为一个较大的数值。
在这里插入图片描述
该模块发挥作用需要安装Kernel,在matlab命令行窗口中运行如下命令安装

sldrtkernel -install

在Simulink help文档中搜索如下主题,可以查看相关信息
Install Real-Time Kemel
2021a版本的Matlab在win11系统上,有兼容性问题,无法正常使用该模块


lesson21 位运算模块使用介绍

Bit Clear/Bit set 位清除模块/位置位模块

功能:
Bit Clear:将一个数的指定bit位设为0。
Bit Set:将一个数的指定bit位设为1。
输入必须是整型,不支持浮点型数据。

【模块参数】配置中可以指定要修改的某个位。
效果如下图:

在这里插入图片描述

Bitwise Operator 按位操作模块

功能:将输入信号和一个指定的数按位进行逻辑运算
如下图,设置模块有两个输入,输出结果是将两个输入按照位进行与运算得出的。
在这里插入图片描述

也可以将要按位与运算的数值配置在模块参数中,如下图

在这里插入图片描述

结果

在这里插入图片描述

Bit to Integer Converter / bit流转整型模块

功能:将二进制bit流(用数组表示)转换成整型数
如下图所示,将数组[0 0 1 0]转换成十进制数2
在这里插入图片描述
配置
位数需要与输入数组的维度相对应,否则报错
MSB first,数组的第一个元素表示bit流的最高bit位,数组的最后一个元素表示bit流的最低bit位,因此数组[0 0 1 0]被转换成了十进制的2。

在这里插入图片描述

如果配置为LSB优先,bit顺序相反,数组[0 0 1 0]被转换为二进制0b0100,即十进制数值4。
在这里插入图片描述
参考:【MSB和LSB】https://blog.csdn.net/lx123010/article/details/103657114
配置转换为有符号数

在这里插入图片描述

结果

在这里插入图片描述

首位为符号位,后7位为补码

Integer to Bit Converter 整型转bit流模块

功能:将整型数转换成二进制bit流(用数组表示)
即如下图所示,也可以选择输出的数组为 MSB first 或者LSB first【图中为MSB优先】

在这里插入图片描述

Shift Arithmetic 算术位移模块

功能:1.将数按照bit位左移或者右移;
2.将数的二进制小数点左移或者右移
如下图将无符号数3,左移一位,得到结果6

在这里插入图片描述

配置

在这里插入图片描述

注意,有符号负数右移时,高位补1。如下图。

在这里插入图片描述

如果选择移动方向为双向,则负数表示左移,正数表示右移。

Binary points to shift 将数的二进制小数点移位

在这里插入图片描述

这个参数配置是将二进制的小数点左移或者右移,如下图,-1表示左移,将二进制数0b00000011的二进制小数点左移了一位,即:
0b 0000 0011. -> 0b 0000 001.1
小数点左侧的数表示整数部分,即20=1
小数点右侧的数表示小数部分,即2-1=0.5
因此转换后的数在display中显示为1.5,但这是定点类型数据,被转换后的数据类型是ufix8 En1,在内存中存储的数据,转换前后并没有发生变化,这也可以通过如下两个display得到证实。ufix8_En1为定点数据类型。
在这里插入图片描述

再看如下的例子,将15小数点左移两位:
0b 0000 1111. -> 0b 0000 11.11
整数部分:21+20=3
小数部分:2-1+2-2=0.75

因此转换后的数据是3.75,被转换后的定点数据类型是ufx8_En2。
在这里插入图片描述

【小数点移位并不改变数据在内存中的存储方式,改变的是对该数据的解析方式】


lesson22 51单片机跑马灯

https://www.bilibili.com/video/BV1NV411g7En
思路:使用模型实现循环移位

在这里插入图片描述
使能子系统1

在这里插入图片描述

使能子系统2

在这里插入图片描述

结果-循环左移

在这里插入图片描述

结果-循环右移

在这里插入图片描述

配置生成代码的入参和返回值

在这里插入图片描述


relay

在这里插入图片描述

Relay模块的输出在两个指定值之间切换。打开中继时,它会一直保持打开,直到输入低于Switch off point参数的值为止。关闭中继时,它会一直保持关闭,直到输入高于Switch on point参数的值为止。此模块接受一个输入并生成一个输出。

参考资料:https://zhuanlan.zhihu.com/p/338742418


end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/667628.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI科技,赋能企业财务管理

AI技术已深入千行百业&#xff0c;其实际任务解决能力愈发凸显和强劲。正如乔布斯所强调“技术不是为工程师而生&#xff0c;而是为应用而生”。 胜意科技深度集成业内领先技术&#xff0c;将AI融入到实际的财务工作流中&#xff0c;与OCR、RPA等智能技术组合式输出&#xff0c…

Android Coil的简单介绍及使用

前言&#xff1a; 本文是借鉴网上大佬的Coil相关技术文章及结合自己项目中的实际使用情况&#xff0c;对Coil作一个简单介绍。 简介&#xff1a; Coil是一个Android的图片加载框架库&#xff0c;是通过Kotlin协程的方式加载图片的&#xff0c;相对于Glide、Picasso、Fresco等…

CRMEB多店版v3.0前端技术革新与实践

摘要 随着移动互联网技术的飞速发展&#xff0c;用户对移动应用的体验要求日益提高。CRMEB多店版v3.0作为一款针对多门店管理的电商系统&#xff0c;在前端技术层面进行了全面的革新与优化。本文将从移动端UI设计、页面功能更新、DIY设计功能升级、移动端平台与门店管理、营销…

数据链路层相关知识

正文&#xff1a; 1.概述 数据链路层是计算机网络体系结构中的第二层&#xff0c;负责实现数据在物理层上的传输。在数据链路层中&#xff0c;数据被组织成帧&#xff08;frame&#xff09;&#xff0c;并且通过MAC地址来进行寻址&#xff0c;以确保数据包能够被正确地发送到…

2020 6.s081——Lab1:Xv6 and Unix utilities梦开始的地方

一任宫长骁瘦 台高冰泪难流 锦书送罢蓦回首 无余岁可偷 ——知否知否 完整代码见&#xff1a;6.s081/kernel at util SnowLegend-star/6.s081 (github.com) Lecture 01知识点总结 首先透彻理解Lecture01的知识很是重要 ①pidwait((int *) 0); “wait(int *status)”函数用于…

【Java数据结构】详解LinkedList与链表(二)

目录 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.反转一个单链表 3. 找到链表的中间节点 4.输入一个链表&#xff0c;输出该链表中倒数第k个结点。 5.合并两个有序链表 6.链表分割 7. 判定链表的回文结构 8.输入两个链表&#xff0c;找…

Java 代码审计---反序列化

Java 序列化是一种将对象转换为字节流的过程&#xff0c;以便可以将对象保存到磁盘上&#xff0c;将其传输到网络上&#xff0c;或者将其存储在内存中&#xff0c;以后再进行反序列化&#xff0c;将字节流重新转换为对象。 序列化在 Java 中是通过 java.io.Serializable 接口来…

C++候捷stl-视频笔记2

深度搜索list list是双向链表&#xff1a;底部实现是环状双向链表 list内部除了存data之外&#xff0c;还要存一个前向指针prev和一个后向指针next list的iterator&#xff0c;当迭代器的时候&#xff0c;是从一个节点走到下一个节点&#xff0c;是通过访问next指针实现的 主要…

C语言:深入了解(联合体和枚举)

目录 联合体 联合体的类型的声明 联合体的特点 相同成员的结构体和联合体对比 联合体大小的计算 联合体的使用举例 联合体的类型&#xff1a;判断联合体是大端还是小端 枚举类型 枚举类型声明 枚举类型的优点 枚举类型的使用 联合体 联合体的类型的声明 像结构体⼀…

(含笔试题)深度解析数据在内存中的存储

目录 本章重点 前言&#xff1a; 1.整型在内存中的存储 1.1原码、反码、补码 原码 反码 补码 2.大小端字节序介绍 什么是大小端字节序&#xff1a; 为什么会有大小端字节序&#xff1a; 3.浮点数存储规则 本章重点 1. 整形在内存中的存储&#xff1a;原码、反码…

刷机 iPhone 进入恢复模式

文章目录 第 1 步&#xff1a;确保你有一台电脑&#xff08;Mac 或 PC&#xff09;第 2 步&#xff1a;将 iPhone 关机第 3 步&#xff1a;将 iPhone 置于恢复模式第 4 步&#xff1a;使用 Mac 或 PC 恢复 iPhone需要更多协助&#xff1f; 本文转载自&#xff1a;如果你忘记了 …

【嵌入式硬件】DRV8874电机驱动

目录 1 芯片介绍 1.1 特性简介 1.2 引脚配置 1.3 最佳运行条件 2 详细说明 2.1 PMODE配置控制模式 2.1.1 PH/EN 控制模式 2.1.2 PWM 控制模式 2.1.3 独立半桥控制模式 2.2 电流感测和调节 2.2.1 IPROPI电流感测 2.2.2 IMODE电流调节 3.应用 3.1设计要求 3.2 设计…

逆天工具一键修复图片,视频去码。本地部署超详细!!

上一篇文章&#xff1a;逆天工具一键修复图片&#xff0c;视频去码。简直不要太好用&#xff01;-CSDN博客 根据上一篇文章展示的效果&#xff0c;本文章主要讲如何部署本地github开源项目。博主走了无数弯路&#xff0c;最后精化下来的步骤&#xff0c;超级详细&#xff01;&a…

统计信号处理基础 习题解答10-5

题目 通过令 并进行计算来重新推导MMSE估计量。提示&#xff1a;利用结果 解答 首先需要明确的是&#xff1a; 上式是关于观测值x 的函数 其次需要说明一下这个结果 和教材一样&#xff0c;我们用求期望&#xff0c;需要注意的是&#xff0c;在贝叶斯情况下&#xff0c;是个…

Amis源码 embed渲染方法解析(json结构渲染原理):

js sdk中的渲染函数embed使用方式如下&#xff1a; const amis amisRequire("amis/embed"); const amisScoped amis.embed( self.$refs["mnode"],amisJSON, {}, amisEnv); //env会有默认值&#xff0c;默认值与传来的参数进行合并&#xff08;{默认值…

【学习Day5】操作系统

✍&#x1f3fb;记录学习过程中的输出&#xff0c;坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;指点&#x1f64f; 学习编辑文章的时间不太够用&#xff0c;先放思维导图&#xff0c;后续复习完善细节。

【每日刷题】Day53

【每日刷题】Day53 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1019. 链表中的下一个更大节点 - 力扣&#xff08;LeetCode&#xff09; 2. 116. 填充每个节点的下一…

mac多媒体影音库:Emby for Mac 中文版

Emby软件是一款功能强大的媒体服务器软件&#xff0c;旨在为用户提供丰富的多媒体体验。以下是关于Emby软件的详细介绍&#xff1a; 下载地址&#xff1a;https://www.macz.com/mac/7964.html?idOTI2NjQ5Jl8mMjcuMTg2LjE1LjE4Mg%3D%3D 主要功能 媒体管理&#xff1a;Emby允许用…

python编程:SQLite 管理图片数据库

在本博客中&#xff0c;我们将介绍如何使用 wxPython 和 sqlite3 模块构建一个 GUI 应用程序&#xff0c;该程序可以遍历指定文件夹中的所有图片&#xff0c;并将其信息存储到 SQLite 数据库中。 C:\pythoncode\new\InputImageOFFolderTOSqlite.py 项目简介 我们的目标是创建…

新版校园跑腿外卖独立版+APP+小程序前端外卖配送平台源码

同城校园跑腿外卖配送平台源码&#xff0c;这套目前全网还没有人分享过&#xff0c;这个是开源的&#xff0c;所以没有任何问题了&#xff0c;这套源码非常吊&#xff0c;支持自定义diy 你可以设计你的页面&#xff0c;设计你自己的风格&#xff0c;支持多校园&#xff0c;独立…