学习汽车LIN总线该如何入门?

关注菲益科公众号—>对话窗口发送 “CANoe ”或“INCA”,即可获得canoe入门到精通电子书和INCA软件安装包(不带授权码)下载地址。

目录

1. 车载LIN总线诞生背景和使用场景

2. LIN总线硬件接口

3. Lin总线协议

4. 总结

1、车载LIN总线诞生背景和使用场景

LIN:Local Interconnect Network,本地连接网络

由于汽车电子电器架构很复杂,汽车上的电子ECU非常多。这会导致汽车局域网络的线束越来越多。线束的增加导致成本上升以及接线不良等造成的电子故障增加,这对于汽车的品质和可靠性都有很大影响。

所以有些外围ECU对于通信速率以及可靠性要求都不高的,引入LIN总线。LIN总线是单线通信,成本比CAN总线更低。所以在未来很长一段时间内,LIN、CAN、ETH都会是车载通信总线必不可少的,三者都各自有自己的使用场景,当前无法取缔某一种总线。

LIN总线大部分使用在车窗防夹控制器、天窗控制器、座椅控制器等外围ECU。

2、LIN总线硬件接口

和大部分通讯总线一样,LIN总线也是由LIN控制器、LIN收发器组成。LIN的控制器是基于SCI(UART)数据格式,采用单主控制器/多从设备的模式,是UART的一种特殊模式。一般控制器会集成在MCU内部,外置一个Lin收发器。也有一些MCU直接把LIN控制器和收发器都集成到MCU内部,只需要配置寄存器就可以使能Lin通信。

LIN采用UART功能传输,需要传送包括1位起始位和1位停止位,共10位数据。传送按照LSB方式从最低位开始传输。

起始位和停止位用于判断报文的开始与结束。起始位的逻辑值为"0",电压值为GND,停止位的逻辑值为"1",电压为电源电压。逻辑值1为隐形值,0为显性值。

3、LIN总线协议

LIN总线采用的是单线传输形式,网络中单主机 多从机。总线电平一般为12V,传输速率最高限制为20kbps。由于物理层的限制,一个LIN网络最多可以连接16个节点。LIN 机群由 1 个主机任务和几个从机任务组成。主机节点同时包含主机任务和从机任务。

从机任务不能直接向总线发送数据,需要接收到主节点发送的帧头后,根据帧头所包含的信息来判断:

  • 发送应答
  • 接收应答
  • 既不接收也不应答

Lin协议格式

帧由一个帧头(由主机任务提供)和一个帧响应(由从机任务提供)组成。主机负责发送帧头,从机负责接收帧头并作出解析,然后决定是发送应答,还是接收应答或不回复。

帧头结构包括同步间隔段、同步段、PID段(受保护ID)段,应答部分包括数据段与效验和段。其中“0”为显性电平、“1”为隐性电平。在总线上实行“线-与”:当总线有至少一个节点发送显性电平时,总线呈现显性电平;所有节点均发送隐性电平或者不发送信息时,总线呈隐性电平,即显性电平起着主导作用。

LIN线拓扑结构是主从结构的星型模型,所有传输都是master发起,slave不可以主动发起请求,,想要获取某个变量值,就需要不断轮询读对应的报文。

PID并不是从机地址,而是报文id,换个说法,一个slave从机可以提供多个报文id的服务,比如一个车灯控制ECU,可以提供灯控制、状态、故障码、软硬件版本信息等多个LIN ID服务。而slave从机地址是隐性的与其所提供的报文ID是有个对应关系的。

帧头

同步间隔段

同步间隔段至少是由13位的显性电平组成,代表一帧的开始,其中同步间隔段的间隔符至少为1位隐形电平。

同步段

LIN同步以下降沿为判断标志,采用字节0x55(01010101b)进行同步。在从机节点上可以不采用高精度的时钟,由此带来的偏差,需要通过同步段来进行调整。

PID段

受保护的ID的前6位叫做帧的ID,加上两个奇偶效验码后称作受保护的ID。帧ID标识了帧的类别和目的地。从机任务会根据帧头ID作出反应(接收/发送/忽略应答)。

帧ID有6个比特,其值的范围是0x00~0x3f。可分为4类:

  • 标准帧的值,其范围是0x3c - 0x3b
  • 0x3c 和0x3d可用诊断数据。
  • 0x3e专门用于用户定义的扩展部分。
  • 0x3f专门用于以后协议的改进。

帧应答

数据段

数据段可以包含1-8个字节,其中包含有两种数据类型,信号(singal)诊断消息(diagnostic messages)。信号由信号携带帧传递,诊断消息由诊断帧传递。

检验和段

效验和段是为了对帧传输内容进行效验。效验分为标准型效验与增强型效验。采用标准型还是增强型是由主机节点管理,发布节点和收听节点根据帧ID来判断采用哪种效验和。

Lin帧类型

根据LIN 2.1规范,Lin的帧类型有以下几种:

  • 无条件帧
  • 时间触发帧
  • 偶发帧
  • 诊断帧
  • 预留帧类型

不同帧的帧ID范围不同:

无条件帧(0-0x3B)

最常用的帧,无条件帧是具有单一发布节点的,无论信号是否发生变化,帧头均会被无条件应答的帧。

虚线箭头代表帧头发送,实线箭头代表帧应答。

  • 帧ID=0x30应答部分的发布节点为从机节点1,收听节点为主机节点,应用在从机节点向主机节点报告自身状态;
  • 帧ID=0x31中,应答部分为主机节点,收听部分为从机节点,应用在主机节点向从机节点发送控制消息;
  • 帧ID=0x32中应答部分的发送节点为从机节点2,收听节点为从机节点1,应用与从机节点之间的通信。

事件触发帧

事件触发帧的标识符为0到0x3B。事件触发帧必须有一个独立的ID,该ID可以与多个无条件帧相关联。在事件触发帧时隙内发送帧头,只有当相关联的无条件帧内有信号被更新时,才发送帧应答。如果没有帧响应,帧头被忽略。帧响应可由多个节点发送,发生冲突时切换到“冲突解决调度表”,之后再切换回到原来的调度表。

事件触发帧是主机节点在一个帧间隙中查询各从机节点的信号是否发生变化时使用的帧。当存在多个发布节点时,通过冲突解决进度表来解决冲突。

当从机节点信号发生变化的频率较低的时候,主机任务一次次地查询各个节点信息会占用一定的带宽。为了减小带宽的占用,引入了事件触发帧的概念。

其主要原理就是:

  • 当从机节点信息状态没有发生变化的时候,从机节点可以不应答主机发出的帧头;
  • 当有多个节点信息同时发生变化的时候,同时应答事件触发帧头会造成总线的冲突。当主机节点检测到冲突时,便会查询冲突解决进度表来依次向各个节点发送无条件帧(无条件帧只能1个节点应答)来确定从机节点的信息状态。

偶发帧

偶发帧表示共用一个时隙、在需要时才被发送的一组普通帧。标识符为0到0x3B。

偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。

当存在多个关联的应答信号变化时,通过预先设定的的优先级来仲裁。与事件触发帧类似,偶发帧也定义了一组无条件帧。规定偶发帧只有由主机节点发布。

偶发帧的传输可能出现三种情况:

1)当关联的无条件帧没有信号发生变化,这时主机连帧头也不需要发送。

2)当关联的一个无条件帧信号发生变化则发送该帧。

3)当有多个无条件帧发生信号变化时,则按照事先规定的优先级依次发送。

诊断帧

诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断。主机请求帧ID=0x3c,由主机节点发送帧头和帧应答;从机应答帧ID=0x3d,由主机节点发送帧头 从机节点发送帧应答。数据段规定为8个字节,一律采用标准效验和。

保留帧

保留帧的ID=0x3e与0x3f,为将来扩张需求用。

4、总结

LIN总线作为低成本的车载低速总线,相对而言协议比较简单,常规产品中使用的比较多的就是无条件帧和诊断帧。后续会更新:

  • LIN的进度表和网络管理
  • LIN诊断
  • LIN在Autosar上应用

LIN,Interconnect Network,适用于速度和可靠性要求不高、低成本的场合,LIN的使用场景包括车窗、天窗、座椅、门锁、空调、照明等舒适性相关的地方

LIN网络

主机节点/从机节点

不同协议的网络需要网关相连接,所以LIN网络与CAN总线相连时,需要加入CAN-LIN网关,这个网关一般由LIN网络的主机节点充当

LIN是单线总线,最大传输速率为20kbps,它采用的是一主多从的概念,就是一个LIN网络只会有一个主机,多个从机

由于物理层限制,一个LIN网络最多有16个节点,那么除去一个主机节点是有且唯一,从机节点的数量就是1到15个

主机任务/从机任务

主机节点(Master Node)包含主机任务(Master Task)和从机任务(Slave Task),从机节点(Slave Node)只有从机任务(Slave Task)

主机任务负责

  • 调度总线上帧的传输次序
  • 监测数据,处理错误
  • 作为标准时钟参考
  • 接收从机节点发出的总线唤醒命令

从机任务不能够主动发送数据,需要接收主机发送的帧头,根据帧头所包含的信息判断:

  • 发送应答
  • 接收应答
  • 既不接收也不发送应答

帧的结构

帧包括帧头和应答两个部分,主机节点里的主机任务负责发送帧头,主机节点或从机节点里的从机任务接收帧头,并对帧头所包含的信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应

帧的结构

帧头

帧头包括同步间隔段、同步段和PID段

同步间隔段

同步间隔段的作用:

这里就要讲到LIN总线的显性电平和隐性电平

上图中,值0为显性电平,值1为隐性电平,当总线上有大于等于一个节点发送显性电平时,总线呈显性电平;当所有的节点都发送隐性电平或不发送信息时,总线呈隐性电平,所以能看出显性电平起主导作用

同步间隔段由同步间隔和同步间隔段间隔符组成,同步间隔是至少13位的显性电平,除了同步间隔段,没有任何其他情况会发出大于9个的显性电平,那么13个显性电平的同步间隔段,就可以作为一个帧的开始的标志

同步间隔段间隔符是一个隐性电平

同步段

在讲同步段之前,先了解一个概念,字节域

字节域以显性电平开始,以隐性电平结束,是一种标准的UART数据传输格式

在LIN的帧中,除了同步间隔段以外,其他各段都是以字节域的格式传输的

这里也可以看到数据段里的各byte字节,也是按照字节域的格式传输的

LIN总线为了节约成本,没有采用高精度时钟,采用了精度和成本相对较低的时钟,这样就会导致从机节点与主机节点的时钟误差,而同步段就是为了调整从机节点数据的位速率与主机节点一致

PID

“PID,Protected Identifier Field,受保护的ID

为什么叫受保护的ID?

PID有8个bit,其中只有前6个bit是实际位,叫帧ID,后面两个bit是前6个bit奇偶校验后得到的值,叫奇偶校验位

从机任务是根据收到的帧ID作出反应的,所以需要验证帧ID是否正确,就是根据奇偶校验位,这也就是为什么叫作PID的原因

校验位P0 = ID0 @ ID1 @ ID2 @ ID3 @ ID4

校验位P1 = ~(ID1 @ ID2 @ ID3 @ ID4 @ ID5)

@表示异或运算,~表示取反

“由此可以看出,PID不可能出现全0或全1的情况,如果从机任务收到了0xFF或0x00,可以判断为传输错误

根据帧ID的不同,将LIN帧分为

应答

应答包括数据段和校验和段

数据段

数据段是节点发送的数据,1到8个字节不等,它承载着信号或诊断消息两种数据类型

信号由信号携带帧传递,一个帧ID对应的数据段可能包含一个或多个信号,发送信号的节点称为发布节点,接收信号的节点称为收听节点

一般情况下,对于一个帧中的应答,总线上只存在一个发布节点,否则就会出现错误

但是对于事件触发帧,可能存在0个、1个或多个发布节点

诊断消息由诊断帧传递

校验和段

校验和段是对数据段内容进行校验,它只有1个字节

校验和根据不同的场景分为:标准型校验和、增强型校验和

采用哪种校验和是由主机节点管理的,发布节点和收听节点根据帧ID判断采用哪种校验和

计算方法很简单:数据段内的各字节依次相加,如果有进位,则加到低位,最终得出的值取反

收听节点如何校验呢?同样地,把数据段内的各字节依次相加,如果有进位,则加到低位,得到的值不取反,与接收到的校验和相加,最终得到0xFF,校验无误

帧传输时间的计算

这里有几个需要注意的时间,由于帧里面的各段间有间隔,这也是要花掉时间的

所以

帧头的余量T_Header_Rest包含字节间间隔,规定为T_Header_Nominal的百分之40

应答的余量T_Response_Rest包含应答间隔以及字节间间隔,规定为T_Response_Nominal的百分之40

N_data为数据段内的字节数

帧的类型

无条件帧

无条件帧的帧头从主机任务发出后,必定有从机任务应答,也就是说必定有从机任务发出无条件帧中的信号,无论信号是否发生变化

有且只有一个从机任务对无条件帧的帧头作出应答,发出信号

从这里是否可以明白一些东西

“主机节点里的主机任务负责发送帧头,主机节点和从机节点里从机任务根据事先设计好的规则,负责对接收到的帧头信息进行分析,以确定自己是否要把这个帧的数据发出去,或是否要接收这个帧的数据(来自其他从机任务的)

这和CAN总线通信还是很不一样的,后面我会进行分析和总结

无条件帧的典型应用场景如下

这里其实有很多的细节没画出来

第一个场景

  • 主机节点的主机任务发送了一条LIN帧的帧头给所有的从机任务(包括主机节点里的从机任务),所有的从机任务收到帧头后分析帧ID=0x30,判断是要发这个帧的数据,还是收这个帧的数据,或者是不作处理
  • 从机节点1的从机任务收到帧ID 0x30,发现自己需要把某些信号值发出去,这些信号值就是属于帧ID 0x30的
  • 主机节点的从机任务收到帧ID 0x30,发现自己需要接收别人发来的信号值并作处理
  • 从机节点2的从机任务收到帧ID 0x30,发现自己既不需要发送信号,也不需要接收信号
  • 这个场景的典型应用就是从机节点1向主机节点报告自身某信号的状态

从上面的分析中我们能总结出LIN总线通信方式

  1. 一条帧的帧头和数据段不是一起发出的,也不一定是同一个节点发出的
  2. 帧头必定是由主机节点的主机任务发给从机任务,从机任务根据帧ID判断是要发出信号值,还是接收信号值,或是不作反应
  3. 由此看出从机任务负责发送数据、接收数据或不作反应,一切都是根据收到的帧ID做判断
  4. 虽然帧ID和数据是分开发送的,但是它们在LIN数据库内也是一条完整的帧,只是帧ID由主机任务发送,数据放在某个节点里由从机任务发送
  5. 主机节点除了主机任务以外,还有从机任务,因为主机节点也是节点,它也是需要发送信号和接收信号的
  6. 不管是帧头还是数据,除了发送节点以外的其他节点都会收到,只是是否要做处理,需要根据帧ID按照自己的内部规则作出判断

第二个场景

  • 主机节点的主机任务把帧头(帧ID 0x31)发给主机节点、从机节点1和从机节点2的从机任务,它们收到帧头后分析帧ID 0x31发现
  • 主机节点的从机任务需要发出帧ID 0x31的数据
  • 从机节点1的从机任务需要接收发来的数据
  • 从机节点2的从机任务需要接收发来的数据
  • 这个场景的典型应用就是主机节点向从机节点发布信息

第三个场景

  • 主机节点的主机任务把帧头(帧ID 0x32)发给主机节点、从机节点1和从机节点2的从机任务,它们收到帧头后分析帧ID 0x32发现
  • 主机节点的从机任务不作反应
  • 从机节点1的从机任务需要接收发来的数据
  • 从机节点2的从机任务需要发出帧ID 0x32的数据
  • 这个场景的典型应用就是从机节点间的通信

事件触发帧

当节点里的信号发生变化的频率较低时,再用无条件帧一遍又一遍地让它应答,这样做很不合适,因为会占用LIN总线的带宽

与无条件帧不论信号是否发生变化必定有从机任务应答不同,事件触发帧只有信号发生变化才需要应答,所以事件触发帧允许无节点应答(只有帧头无应答),也允许两个以上的节点对帧头作应答

当两个以上的节点同时应答时,不会被视为错误,但是主机节点需要解决这个冲突,怎么办呢?

主机节点的主机任务需要立刻中断当前的进度表,然后启动冲突解决进度表,调用这些冲突信号关联的无条件帧,发送帧头,获得应答

由上图可以看出

  • 主机节点的主机任务发送事件触发帧的帧头0x10,请求从机任务的应答,但是由于信号没有变化,从机任务不应答
  • 下一个循环,主机节点的主机任务又发送帧头0x10,只有从机节点1的信号发生变化,从机节点1的从机任务作应答
  • 下一个循环,主机节点的主机任务又发送帧头0x10,从机节点1和2的信号同时变化,同时应答,造成冲突
  • 中断当前进度表,启动冲突解决进度表
  • 主机任务发送从机节点1的事件触发帧的信号相关联的无条件帧的帧头0x11,从机节点1的从机任务就会把信号发给主机节点的从机任务
  • 主机任务发送从机节点2的事件触发帧的信号相关联的无条件帧的帧头0x12,从机节点2的从机任务就会把信号发给主机节点的从机任务

可以总结出

  1. 事件触发帧的信号必须有变化,信号所属的从机任务才会发送
  2. 事件触发帧的信号,也和无条件帧相关联,换句话说,也是无条件帧里的信号,这样做的目的是当事件触发帧的应答冲突时,还可以用无条件帧去请求信号值
  3. 事件触发帧的每一个应答节点对应一个不同的无条件帧

事件触发帧的信号发生变化才应答的特点,很适合应用在对车门的开关状态进行检测的场景

对于事件触发帧来说,由于有可能有多个节点应答,如何知道是哪个节点发来的应答呢?

这个其实也简单

“既然应答冲突时会轮询调用事件触发帧的所有对应的无条件帧,说明一个无条件帧代表一个节点,那么只需要把事件触发帧的应答中第一个字节设置为无条件帧的PID即可

由于事件触发帧的长度固定,所以各节点的应答固定,那么对应的无条件帧的应答长度也就固定了

所以

与事件触发帧对应的所有无条件帧需要满足

  • 数据段长度相同
  • 数据段的校验和类型相同
  • 数据段的第一个字节为该无条件帧的PID
  • 由不同的从机节点发布
  • 不能与事件触发帧处于同一个进度表

偶发帧

事件触发帧是主机节点为了获取从机节点的信号状态而发送的帧

那么主机节点里的信号状态又要如何让从机节点知道呢

这里就引入了偶发帧,偶发帧可以当作是主机节点的事件触发帧

当主机节点的信号发生变化时,主机节点的主机任务就会发送偶发帧的帧头,主机节点的从机任务收到帧头后,发送信号,其他从机节点根据自身需要选择是否接收(其实也是分析帧ID后判断的)

上面说的是一个应答,一个偶发帧可能对应多个应答信号,如果同时有多个应答时,怎么办?

和解决事件触发帧的应答冲突一样,一个偶发帧也关联多个无条件帧,每个无条件帧对应一个应答,当同时有多个应答时,主机节点会根据LDF(LIN的数据库文件)中定义好的优先级顺序,依次在同一时隙时发送

偶发帧的无条件帧的发送方式,和事件触发帧的还有所不同

事件触发帧的无条件帧是启用的冲突解决进度表来发送,会一个挨着一个发送,冲突解决进度表中的所有无条件帧发送完毕后,才会重新回到主进度表中继续调度

而偶发帧的应答冲突时,并不会启动冲突解决进度表,还是在主表内,在这个偶发帧的时隙时,调用优先级最高的无条件帧,然后等下一个轮询,又轮到了偶发帧的机会时,再调用优先级次高的无条件帧

由于是主机节点的信号,如果它的信号没有变化,偶发帧都没必要发出去,因为信号没变化,从机节点也没必要判断是否要接收,那主机节点也没必要发偶发帧的帧头,那么这个时隙就会保持沉默

诊断帧

诊断帧分为:主机请求帧、从机应答帧

主机请求帧

帧ID = 0x3C

应答由主机节点的从机任务发布

从机应答帧

帧ID = 0x3D

应答由从机节点的从机任务发布

保留帧

保留帧的帧ID为0x3E和0x3F,为将来扩展用

了解更多产品信息,请致菲益科电子官网查询

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

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

相关文章

北斗卫星为社区智慧管理提供精准支持

北斗卫星为社区智慧管理提供精准支持 近年来,随着智能科技的快速发展和智慧社区的兴起,北斗卫星作为一项关键技术,正逐渐在智慧社区中发挥着重要作用。北斗卫星定位与导航系统是我国自主研发的卫星导航定位系统,它不仅为智慧社区…

postgresql可视化导入csv文件

不需要在命令行copy了,只需简单点几下 1.在数据库下建一个schema 右击选中数据库-new schema 2.双击你创建的schema,出现tables 3.右击tables,选择import wizard 4.选择你想导入的文件格式,之后一直next 5.选择你的文件所在位置…

工厂如何确定设备故障的原因?

设备故障是制造业中常见的问题,对生产效率和运营成本产生重大影响。为了解决设备故障并提高生产效率,确定设备故障的准确原因至关重要。本文将介绍一些关键步骤和方法,帮助工厂确定设备故障的原因。 1. 收集和分析数据 要确定设备故障的原因…

HTTP和TCP代理原理及实现,主要是理解

Web 代理是一种存在于网络中间的实体,提供各式各样的功能。现代网络系统中,Web 代理无处不在。我之前有关 HTTP 的博文中,多次提到了代理对 HTTP 请求及响应的影响。今天这篇文章,我打算谈谈 HTTP 代理本身的一些原理,…

【自学笔记】01Java基础-07面向对象基础-02继承

记录学习Java基础中有关继承、方法重写、构造器调用的基础知识,学习继承之前建议学习static关键字的内容【自学笔记】01Java基础-09Java关键字详解 1 继承概述 1.1 什么是继承? 1.2 继承的特点 子类可以继承父类的属性和行为,但是子类不能…

期货跟单系统。镜像跟单系统有什么作用?功能有哪些?

期货跟单系统: 期货自动跟单系统,是一款专门用来针对特定账户的操作而进行自动跟单的软件。软件兼容目前所有的期货公司账户,具有稳定性,速度性和可靠性的优势。 补差补点,根据盘手实盘心理分析,增加模拟…

PLC三相电动机Y-▲启动控制程序示例

一、三相电动机星三角启动接法。 二、因为电动机在启动的时候启动电流非常的大,所以在启动时采用星型接法,也就是Y型接法,也就是图上的KM1和KM2接通,目的为了减小启动电流,采用Y型接法的启动电流是原来电流的1/3 三、启…

华为交换机怎么添加和剥除VLAN标签

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 华为交换机VLAN标签的添加和剥除处理过程 接口对收发的以太网数据帧添加或剥除VLAN标签的处理依据接口的接口类型和缺省VLAN。 由上面各类接口添加或…

Mybatis之多表查询

目录 一、简介 1、使用嵌套查询: 2、使用多个 SQL 语句: 3、使用关联查询: 4、使用自定义映射查询: 二、业务场景 三、示例 1、一对一查询 2、一对多查询 一、简介 MyBatis 是一个优秀的持久层框架,它提供了强大的支持来执…

小样本学习介绍(超详细)

小样本学习介绍 本文首先介绍了什么是小样本学习,其次介绍了为什么小样本学习的很多文章都采用元学习的方法。目的是通过通俗的解释更加清楚的介绍小样本学习是什么,适合初学者的入门。当然,以下更多的是自己的思考,欢迎交流。 …

cesium第一视角/上帝视角以及解除视角锁定

第一视角效果: function event1() {viewer.scene.screenSpaceCameraController.enableZoom false; //. 禁止视角缩放viewer.scene.screenSpaceCameraController.enableRotate false; //禁止左键拖动视角viewer.scene.screenSpaceCameraController.enableTilt fal…

GAMES101:作业5记录

总览 在这部分的课程中,我们将专注于使用光线追踪来渲染图像。在光线追踪中最重要的操作之一就是找到光线与物体的交点。一旦找到光线与物体的交点,就可以执行着色并返回像素颜色。在这次作业中,我们需要实现两个部分:光线的生成和光线与三角的相交。本次代码框架的工作流程为…

【C语言】stdbool.h——有关bool的总结

在编程和日常生活中,经常需要一种只能具有两个值之一的数据类型,如是否、开关、真假等,因此,C 有一种bool数据类型,称为booleans。布尔值表示 或true的值false。 C 中的 bool 是大多数语言中的基本数据类型&#xff0…

自由DIY预约小程序源码系统:适用于任何行业+自由DIY你的界面布局+全新升级的UI+多用户系统 带安装部署教程

随着移动互联网的普及,预约服务逐渐成为人们日常生活的一部分。从家政服务、医疗挂号到汽车保养,预约已经渗透到各个行业。然而,市面上的预约小程序大多功能单一,界面老旧,无法满足商家和用户的个性化需求。今天来给大…

03 decision tree(决策树)

一、decision tree(决策树) 1. classification problems(纯度) i . entropy (熵) ​ 作用:衡量一组数据的纯度是否很纯 ,当五五开时他的熵都是最高的,当全是或者都不是…

fastadmin 安装QueryList

之前的项目复制过来,抓取数据的时候报这个错,于是我准备重新安装QueryList 我准备安装QueryList 4版本 安装命令: composer require jaeger/querylist:~V4 报错: 解决方法: 创建一个新用户和用户组,切换…

vivado 管理宏

管理宏 宏存储为XDC约束。根据定义,它们是Tcl命令。这允许要在XDC约束文件和Tcl脚本中使用并交互使用的宏。宏是使用write_xdc命令编写的。使用read_xdc读取宏命令-cell选项可用于将作用域限制为特定的单元格。-cell选项特别适用于将一个宏的相对放置应用到不同层次…

electron预加载脚本

webPreferences 指定预加载脚本,可以使用部分node脚本 webPreferences: {preload: path.join(__dirname, "preload.js"),},创建preload.js 中 测试文件读取功能 const fs require(fs) const text fs.readFileSync(package.json, utf-8)console.log(text)报错,为了…

Visual Studio 2013 “即将退休”

新年快乐! 这也是向各位开发者提醒 Visual Studio 支持生命周期中即将到来的好时机。 对 Visual Studio 2013 的支持即将在今年(2024年)的4月9日结束。如果你正在使用旧版本的 Visual Studio,我们强烈建议您升级您的开发环境到最新的 Visual Studio 20…

给孩子选台灯什么样的好?分享高品质的学生护眼台灯!

在这个青少年如此高近视率的情况下,想要真正保护孩子的视力,除了需要监督孩子养成良好的用眼习惯以外,还要注意光线环境!在夜晚不管是看书写字、还是使用电脑平板上网课,都需要一个健康的照明环境。因此在挑选孩子学习…