【AUTOSAR】--02 AUTOSAR网络管理相关参数

这是AUTOSAR网络管理梳理的第二篇文章,主要讲解AUTOSAR网络管理的相关参数。第一篇链接【01 AUTOSAR网络管理基础】。​

相关参数有很多,我挑了一些相对重要的参数,分三部分进行讲解:

第一部分:比较常用,且关乎到AUTOSAR网络管理各个状态之间的流转,个人觉得相对重要些,所以单独整理出来。

第二部分:相对比较少用。其中Coordinator相关功能,一般GW节点才可能会用上,所以普通节点用得相对比较少。

第三部分:AUTOSAR标准文档里未找到相关参数,但实际应用中会用的一些参数。

第一部分:网络管理状态机流转主要参数

CanNm的参数有很多,如下八个参数,关乎到AUTOSAR网络管理各个状态之间的流转,个人觉得相对常用/重要些,所以单独整理出来,分别为:

  • CanNmMsgCycleTime

  • CanNmImmediateNmCycleTime

  • CanNmImmediateNmTransmissions

  • CanNmRepeatMessageTime

  • CanNmTimeOutTime

  • CanNmWaitBusSleepTime

  • CanNmRemoteSleepIndTime

  • CanNmMsgTimeoutTime

以上这些参数,均在AUTOSAR_SWS_CANNetworkManagement.pdf文档中有详细描述。

如上8个参数,我结合AUTOSAR网络管理状态机,整理成一个AUTOSAR网络管理的时序图,具体如下。

大家可结合每个参数的详细描述来进行理解。

1.1、CanNmMsgCycleTime:

如下两种情况,网络管理报文的发送周期为CanNmMsgCycleTime。

1) NM网络模式中的RMS状态的正常发送子状态下,网络管理报文发送周期。

2) NM网络模式中的NOS状态下,网络管理报文发送周期。

即当NM处理下图这两个标绿色背景的状态时,则NM报文以CanNmMsgCycleTime进行发送。

一般设置为500ms或1000ms,具体以OEM要求为准。

Network Management PDU的传输周期通常由定时参数CanNmMsgCycleTime决定。

注意:对于同一个网络管理集群中的所有NM节点,该参数必须相等。

若网络管理集群的成员数量较多,则可能将导致总线负荷过大。

故AUTOSAR网络管理引入了CanNmMsgCycleOffset与CanNmMsgReducedTime两个参数,分别用途如下:

CanNmMsgCycleOffset主要用来防止突发,

CanNmMsgReducedTime主要用来降低CAN总线负荷。

这两个参数第二部分,再详细展开说明。

1.2、CanNmImmediateNmCycleTime:

当节点处于NM网络模式中RMS状态的快速发送子状态时,网络管理报文发送周期。

一般设置为20ms,具体以OEM要求为准。

1.3、CanNmImmediateNmTransmissions

当节点处于RMS状态的的快速发送子状态时, 节点使用T_NM_ImmediateCycleTime为周期发送网络管理报文的数量。

一般设置为5次或10次,具体以OEM要求为准。

即网络唤醒时,网络管理以周期CanNmImmediateNmCycleTime进行报文发送,共发送CanNmImmediateNmTransmissions次,之后再切换为以CanNmMsgCycleTime为周期进行发送。

如果CanNmImmediateNmTransmissions取值为0,则当网络唤醒时,会以T_NM_ImmediateCycleTime为周期立即发送NM PDU而是一直以CanNmMsgCycleTime为周期进行发送。

该参数设置为非0时,若网络从休眠状态唤醒,则主动唤醒的节点会快速发出多个网络管理报文,这样可以让总线上的其他节点,更快速、更稳定的被唤醒,所以一般网络管理都会使用该参数。

dependency要求:

1) If CanNmImmediateRestartEnabled = true then CanNmImmediateNmTransmissions = 0

2) If CanNmPnHandleMultipleNetworkRequests == True" then "CanNmImmediateNmTransmissions > 0

1.4、CanNmRepeatMessageTime

描述了节点在RMS重复报文状态(Repeat Message State)中持续的时间

dependency要求:

1) CanNmRepeatMessageTime = n * CanNmMsgCycleTime;

2) CanNmRepeatMessageTime > CanNmImmediateNmTransmissions * CanNmImmediateNmCycleTime

一般应该等于:n * CanNmMsgCycleTime,其中n表示在重复消息状态下正常发送的NM PDU的数量。

若取值为0,则表示没有配置重复消息状态。这意味着重复消息状态是暂时的,这意味着它在进入后立即离开,因此不保证启动的稳定性,也无法进行节点检测过程。

当网络管理状态机进入Repeat Message State状态时, 网络管理报文Byte1(Control Bit Vector)中的Bit0: Repeat Message Request则置为1,并启动计时。当计时到达后,重新切换到Normal Operation State。

任一网络管理节点接收到该网络管理报文时,均会进入Repeat Message State,并启动计时。当计时到达后,重新切换到Normal Operation State。

具体如下图示例:

网络管理报文Byte1(Control Bit Vector)中的Bit0: Repeat Message Request不是必须支持的,具体看OEM要求。

1.5、CanNmTimeoutTime

描述了节点在NM网络模式(Network Mode)的超时阈值。

即,在NM网络模式中的准备睡眠状态(Ready Sleep State)时,若持续CanNmTimeoutTime(即状态机中的Nm-Timeout)未接收网络管理报文,则该定时器超时, 然后节点进入准备总线睡眠模式(Prepare Bus Sleep Mode)。

dependency要求:

1) CanNmTimeoutTime > CanNmMsgCycleTime 对于网络管理集群中的所有节点,该参数应该是相等的

2) CanNmTimeoutTime > CanNmMsgCycleTime

如果无本地网络请求,并且总线上没有接收到Network Management PDUs的时间达CanNmTimeoutTime + CanNmWaitBusSleepTime,那么应该执行转换到Bus-Sleep Mode。

网管集群中的所有网络节点都要配置相同的CanNmTimeoutTime和 CanNmWaitBusSleepTime,故网络管理集群的所有节点,会大约同时执行向Bus-Sleep Mode的转换。

1.6、CanNmWaitBusSleepTime

它表示NM在转换到Bus-Sleep Mode之前,在Prepare Bus-Sleep Mode中停留的时间。

网络管理集群中的所有节点的参数dependency都需相等。且应该足够长,以使所有的Tx缓冲区为空。

1.7、CanNmRemoteSleepIndTime

远程睡眠指示超时。它以秒为单位定义了识别所有其他节点准备休眠所需的时间。

如果在CanNmRemoteSleepIndTime时间内,没有收到处于NOS状态的Network Management PDU,则CanNm模块将调用回调函数Nm_RemoteSleepIndication。即CanNm通知Nm模块:本CanNM的所有节点已进入RSS状态

如果此时节点又收到了其他节点发送的处于NOS状态的网络管理报文,应该再调用Nm_RemoteSleepCancellation()函数通知应用层取消之前的指示。

dependency要求:

1) 要求CanNmRemoteSleepIndTime ≥ CanNmMsgCycleTime

2) 仅当CanNmRemoteSleepIndEnabled = true,该参数CanNmRemoteSleepIndTime才有效

1.8、CanNmMsgTimeoutTime

当调用发送接口(CanIf_Transmit)发 送NM PDU时,启动该定时器,

当NM PDU发送完成后(并调用 CanNm_TxConfirmation),则停止该定时器。

如果CanNmGlobalPnSupport设置为TRUE,并且定义了CanNmMsgTimeoutTime,并且CanNm请求发送一个NM PDU(调用CanIf_Transmit),则CanNm将以CanNmMsgTimeoutTime开始NM Message Tx Timeout Timer。

如果将CanNmGlobalPnSupport设置为TRUE,定义了CanNmMsgTimeoutTime并调用了CanNm_TxConfirmation,则CanNm将停止NM Message Tx Timeout Timer

要求如下:

1) 当使用Partial Network并且定义了这个超时时间时,则CanNm监视在此传输超时时间内成功传输的NM-PDU,否则提供错误通知。

2) CanNmMsgTimeoutTime < CanNmMsgCycleTime

3) 仅当“CanNmPassiveModeEnabled”和“CanNmImmediateTxConfEnabled”设置为“FALSE”,“CanNmPnEnabled”设置为“TRUE”时,此参数才有效。

第二部分:其他AUTOSAR参数

第二部分:相对比较少用。其中Coordinator相关功能,一般GW节点才可能会用上。

主要列了如下三个参数:

1、CanNmMsgCycleOffset

2、CanNmMsgReducedTime

3、NMGlobalCoordinatorTime

2.1、CanNmMsgCycleOffset:

参数CanNmMsgCycleOffset的作用,主要用来防止报文突发。

如果不是通过CanNm_NetworkRequest或CanNmImmediateNmTransmissions=0这两种方式进入Repeat Message State,则进入Repeat Message State后,NM PDU将会延时CanNmMsgCycleOffset发出。

如下两种情况:不允许使用参数CanNmMsgCycleOffset:

1) 当由于CanNm_NetworkRequest() (active wakeup)而从Bus Sleep Mode或Prepare Bus Sleep Mode进入Repeat Message状态时,如果CanNmImmediateNmTransmissions的值大于零,则NM PDU将使用CanNmImmediateNmCycleTime作为周期时间进行传输。应尽快触发第一个NM PDU的发送。发送完成后,报文周期计时器(Message Cycle Timer)将被重新加载为CanNmImmediateNmCycleTime。 在这种情况下,不能使用CanNmMsgCycleOffset。

2) 如果CanNmPnHandleMultipleNetworkRequests设置为TRUE,则CanNm_NetworkRequest将触发从Network Mode到Repeat Message state的状态转换。如果使能了PDU transmission能力,则发送的NM PDU使用CanNmImmediateNmCycleTime作为周期时间。应尽快触发第一个NM PDU的发送。

发送完成后,报文周期计时器(Message Cycle Timer)将被重新加载为CanNmImmediateNmCycleTime。在这种情况下,不能使用CanNmMsgCycleOffset。

2.2、CanNmMsgReducedTime

CanNmMsgReducedTime主要可以用来降低CAN总线的负荷。

关于CanNmMsgReducedTime,主要有如下两个规则:

1) 若节点收到网络管理报文后,则将下帧网络管理报文的计时时间,重新加载为CanNmMsgReducedTime(取值范围为0.5CanNmMsgCycleTime ~ CanNmMsgCycleTime);

2) 若节点发送了网络管理报文后,则将下帧网络管理报文的计时时间,重新加载为CanNmMsgCycleTime;

如果收到网络管理PDU,则节点特定的定时参数CanNmMsgReducedTime重新加载CanNm消息周期定时器

节点具体时间CanNmMsgReducedTime应该大于½CanNmMsgCycleTime,小于CanNmMsgCycleTime。

如果发送了网络管理PDU,则网络管理集群特有的定时参数CanNmMsgCycleTime重新加载报文周期定时器。

这会导致以下行为:

只有CanNmMsgReducedTime时间最小的两个节点在网络中交替传输Network Management PDU如果其中一个节点停止传输,则下一个CanNmMsgReducedTime时间最小的节点开始传输Network Management PDU。

如果网络中只有一个节点需要总线通信,则每个CanNmMsgCycleTime发送一个network Management PDU。

如果全局使能了bus load reduction机制(CanNmBusLoadReductionEnabled为TRUE),对于激活的特定网络,使能了PDU传输能力,并且为该网络调用了CanNm_RxIndication功能,则CanNm模块将以节点特定时间CanNmMsgReducedTime重新启动CanNm消息周期定时器

取值范围如下:

0,5 * CanNmMsgCycleTime ≤ CanNmMsgReducedTime < CanNmMsgCycleTime

该参数仅在满足如下条件时有效:

CanNmBusLoadReductionEnabled == True and

CanNmBusLoadReductionActive == True and

CanNmPassiveModeEnabled == False

CanNmMsgReducedTime具体是如何降低CAN总线的负荷的,可以详见如下解析,或可以详见《AUTOSAR_SWS_CANNetworkManagement.pdf》中11章节。

三个节点连接到总线,处于“正常运行”状态。CanNmMsgReducedTime最小的节点(Node 1和Node 2)交替发送各自的Network Management PDU。过了一会儿,节点1进入“就绪睡眠”状态。节点2和节点3正在交替发送网络管理PDU。过了一会儿,节点2也进入“就绪睡眠”状态。由于节点3是总线上的最后一个节点,因此只有节点3使用CanNmMsgCycleTime发送消息。

具体每个时刻解析如下:

在T1时刻:

1) Node1发出网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgCycleTime(70ms)

2) Node2收到Node1的网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgReducedTime50ms

3) Node3收到Node1的网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgReducedTime(60ms)

在T2时刻:

1) 故Node2会在此时发出网络管理报文,且设置本节点下次NM的发送时间为CanNmMsgCycleTime(70ms)

2) Node1收到Node2的网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgReducedTime(40ms

3) Node3收到Node2的网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgReducedTime(60ms)

在T3时刻:

1) 故Node1会在此时发出网络管理报文,且设置本节点下次NM的发送时间为CanNmMsgCycleTime(70ms)

2) Node2收到Node1的网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgReducedTime50ms

3) Node3收到Node1的网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgReducedTime(60ms)

在T4时刻:Node1不再需要网络,故停止发送NM报文。

在T5时刻:

1) 故Node2会在此时发出网络管理报文,且设置本节点下次NM的发送时间为CanNmMsgCycleTime(70ms)

2) Node3收到Node2的网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgReducedTime60ms

在T6时刻:

1) 故Node3会在此时发出网络管理报文,且设置本节点下次NM的发送时间为CanNmMsgCycleTime(70ms)

2) Node2收到Node3的网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgReducedTime50ms

在T7时刻:

1) 故Node2会在此时发出网络管理报文,且设置本节点下次NM的发送时间为CanNmMsgCycleTime(70ms)

2) Node3收到Node2的网络管理报文,故设置本节点下次NM的发送时间为CanNmMsgReducedTime60ms

在T8时刻:Node2不再需要网络,故停止发送NM报文。

在T9时刻:

1) 故Node3会在此时发出网络管理报文,且设置本节点下次NM的发送时间为CanNmMsgCycleTime(70ms)

在T10时刻:

1) 故Node3会在此时发出网络管理报文,且设置本节点下次NM的发送时间为CanNmMsgCycleTime(70ms)

在T11时刻:

1) 故Node3会在此时发出网络管理报文,且设置本节点下次NM的发送时间为CanNmMsgCycleTime(70ms)

备注:CanNmMsgCycleOffset和CanNmMsgReducedTime主要来用降低CAN 总线负荷,如果网络上的NM节点不多的情况下,一般不会使用这两个参数。做了几个项目了,目前OEM实际也比较少用这两个参数。

2.3、NMGlobalCoordinatorTime

讲这个参数之前,先大概讲解下Coordinator相关知识。

AUTOSAR网络管理主要涉及两个软件模CanNM,NM模块

前面介绍的参数都是CanNM相关的内容,而参数NMGlobalCoordinatorTime是Nm模块相关的内容。

NM模块是在CanNM的上层,ComM通过NM模块与特定总线NM模块(如CanNM)进行通信,从而实现完全的抽象和硬件(总线)的独立性。

可以参考下图,应该就能大概理解CanNm和NM模块的用途及区别了。

NM模块主要涉及如下代码文件:

Nm.c (src\components\nm\implementation

Nm.h (src\components\nm\implementation)

Nm_Cbk.h (src\components\nm\implementation)

NmStack_Types.h (src\components\nm\implementation

Nm_Cfg.c(src\gendata)

Nm_Cfg.h (src\gendata)

Nm_Lcfg.c (src\gendata)

SchM_Nm_Type.h(src\gendata)

那什么时候会用到协调器coordinator呢?再看下面另一张图:

上图中,ECU1~ECU5采用CAN总线连接在一起。

  • 其中ECU1和ECU2采用AUTOSAR CanNM网络管理

  • ECU3和ECU4采用其他网络管理(如J1939NM)

  • ECU5同时需支持AUTOSAR CanNM和J1939NM两种网络管理。

综上,ECU1~ECU4无需支持coordinator功能,ECU5需支持coordinator功能

OK,返回来,讲一下参数NmGlobalCoordinatorTime,该参数定义了连接和协调的NM-Cluster的最大关闭时间。

说白话就是,因为同时连接了多个网络管理,所以必须每个网络管理都休眠了,才能让系统进入休眠,该参数是为了协调这个的。

NmGlobalCoordinatorTime只有在NmCoordinatorSupportEnabled为TRUE时才有效。

NmGlobalCoordinatorTime至少应设置为关闭所有协调的网络所需的最大时间,示例如下图:

注意:上图涉及了3GW4个network

第三部分:其他参数

第三部分:AUTOSAR标准文档里未找到相关参数,但实际应用中会用的一些参数。

主要有如下参数:

1、T_WAKEUP

2、T_START_NM_TX

3、T_START_AppFrame

3.1、T_WAKEUP

节点从唤醒事件发生(远程唤醒、本地唤醒事件),到发出第一帧网络管理报文的最大允许时间间隔。

一般可设置为100ms~200ms,具体以OEM要求为准。

3.2、T_START_NM_TX

该参数定义了节点从准备总线睡眠模式(Prepare Bus Sleep Mode)、 常规运行状态(Normal Operation State)或准备睡眠状态(Ready Sleep State)进入重复报文状态(Repeat Message State), 到发出第一帧网络管理报文的最大允许时间间隔。

一般可设置为10ms-50ms,具体以OEM要求为准。

3.3  T_START_AppFrame

成功发送第一帧网络管理报文后,到开始发送APP报文的最大间隔。

一般可设置为20ms-50ms,具体以OEM要求为准。

4、总结

将如上所有参数,汇总整理成下表:

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

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

相关文章

速度提高100倍 - 扩展 RAG 应用程序,以实现数十亿个嵌入,并行计算余弦相似度

原文链接&#xff1a;100x Faster — Scaling Your RAG App for Billions of Embeddings 2024 年 2 月 15 日 RAG应用程序最大的问题之一是它们的计算检索时间。想象一下&#xff0c;你有一个向量数据库&#xff0c;包含一万亿条Embedding向量的记录。当您尝试将用户查询与一…

Python中操作MySQL和SQL Server数据库的基础与实战【第97篇—MySQL数据库】

Python中操作MySQL和SQL Server数据库的基础与实战 在Python中&#xff0c;我们经常需要与各种数据库进行交互&#xff0c;其中MySQL和SQL Server是两个常见的选择。本文将介绍如何使用pymysql和pymssql库进行基本的数据库操作&#xff0c;并通过实际代码示例来展示这些操作。…

eclipse中open Type 、 open type in Hierachy、open Resource的区别

目录 场景&#xff1a; open Type open Resource open type in Hierachy 场景&#xff1a; 在项目中想要研究底层代码&#xff0c;经常要用eclipse看依赖jar包的类&#xff0c;比如spring的源码中AbstractApplicationContext类CTLSHIFTT用的少&#xff0c;经常用的CTLSHIR…

微信小程序 uniapp+vue餐厅美食就餐推荐系统

本论文根据系统的开发流程以及一般论文的结构分为三个部分&#xff0c;第一个部分为摘要、外文翻译、目录&#xff1b;第二个部分为正文&#xff1b;第三个部分为致谢和参考文献。其中正文部分包括&#xff1a; &#xff08;1&#xff09;绪论&#xff0c;对课题背景、意义、目…

[rust] 10 project, crate, mod, pub, use: 项目目录层级组织, 概念和实战

文章目录 一 项目目录层级组织概念1.1 cargo new 创建同名 的 Project 和 crate1.2 多 crate 的 package1.3 mod 模块1.3.1 创建嵌套 mod1.3.2 mod 树1.3.3 用路径引用 mod1.3.3.1 使用绝对还是相对? 1.3.4 代码可见性1.3.4.1 pub 关键字1.3.4.2 用 super 引用 mod1.3.4.3 用 …

docker安装flink

docker安装flink 5.1、拉取flink镜像&#xff0c;创建网络 docker pull flink docker network create flink-network5.2、创建 jobmanager # 创建 JobManager docker run \-itd \--namejobmanager \--publish 8081:8081 \--network flink-network \--env FLINK_PROPERTIES&…

【全网首发】上周申请的谷歌Gemini 1.5 Pro已通过!百万token的Gemini 1.5 Pro开箱测试(一)

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

C# WPF 桌面应用程序使用 SQlite 数据库

我们在开发 WPF 桌面应用程序时&#xff0c;数据库存的使用是必不可少的&#xff0c;除非你的应用没有数据存储的需求&#xff0c;有了数据存储需求&#xff0c;我们就会面临使用什么样的数据库的选择问题&#xff0c;我的选择方案是&#xff0c;单机版的应用我优先选择 Sqlite…

Mac安装Appium

一、环境依赖 一、JDK环境二、Android-SDK环境&#xff08;android自动化&#xff09;三、Homebrew环境四、Nodejs 安装cnpm 五、安装appium六、安装appium-doctor来确认安装环境是否完成七、安装相关依赖 二、重头大戏&#xff0c; 配置wda&#xff08;WebDriverAgent&#x…

小苯的IDE括号问题(CD) -----牛客小白月赛87(双链表)

C题&#xff1a;C-小苯的IDE括号问题&#xff08;easy&#xff09;_牛客小白月赛87 (nowcoder.com) D题&#xff1a; D-小苯的IDE括号问题&#xff08;hard&#xff09;_牛客小白月赛87 (nowcoder.com) C题代码&#xff1a; #include<bits/stdc.h>using namespace std…

番外篇 | YOLOv5+DeepSort实现行人目标跟踪检测

前言:Hello大家好,我是小哥谈。DeepSort是一种用于目标跟踪的深度学习算法。它结合了目标检测和目标跟踪的技术,能够在视频中准确地跟踪多个目标,并为每个目标分配一个唯一的ID。DeepSort的核心思想是将目标检测和目标跟踪两个任务进行联合训练,以提高跟踪的准确性和稳定性…

Sentinel微服务流量治理组件实战上

目录 分布式系统遇到的问题 解决方案 Sentinel 是什么&#xff1f; Sentinel 工作原理 Sentinel 功能和设计理念 流量控制 熔断降级 Sentinel工作主流程 Sentinel快速开始 Sentinel资源保护的方式 基于API实现 SentinelResource注解实现 Spring Cloud Alibaba整合…

一键生成PDF即刻呈现:轻松创建无忧体验

在信息爆炸的时代&#xff0c;我们每天都在与各种文件、资料打交道。无论是工作中的报告、合同&#xff0c;还是学习中的笔记、论文&#xff0c;如何高效、安全地管理这些珍贵的资料&#xff0c;成为了我们迫切的需求。幸运的是&#xff0c;随着科技的发展&#xff0c;我们不再…

Mysql--索引分类

Mysql--索引分类 1. 索引分类2. 聚集索引&二级索引 1. 索引分类 在MySQL数据库&#xff0c;将索引的具体类型主要分为以下几类&#xff1a;主键索引、唯一索引、常规索引、全文索引。 2. 聚集索引&二级索引 而在在InnoDB存储引擎中&#xff0c;根据索引的存储形式&am…

Mysql运维篇(五) 部署MHA--主机环境配置

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 大佬博文 https://www.cnblogs.com/gomysql/p/3675429.html MySQL 高可用&#xff08;MHA&#x…

【算法与数据结构】417、LeetCode太平洋大西洋水流问题

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;题目要求雨水既能流向太平洋也能流向大西洋的网格。雨水流向取决于网格的高度。一个比较直接的方式是对…

LangChain Agent v0.2.0简明教程 (中)

4. Retrieval4.1 Document loaders4.2 Text Splitter4.3 Text embedding models4.4 Vector stores4.5 Retrievers4.6 Indexing4. Retrieval 许多LLM需要使用特定用户的外部数据,这些数据不属于模型训练集的一部分。实现这一目标的主要方法是通过检索增强生成(RAG)。在此过程…

window: C++ 获取自己写的dll的地址

我自己用C写了一个插件,插件是dll形式的,我的插件式在dll的目录下有个config文件夹,里面是我用json写的插件配置文件,当插件运行的时候我需要读取到json配置文件,所有最重要的就是如何获取dll的路径. 大概就是这么个结构, 我自己封装了一个函数.只适用于window编程,因为里面用…

【ArcGIS】利用DEM进行水文分析:流向/流量等

利用DEM进行水文分析 ArcGIS实例参考 水文分析通过建立地表水文模型&#xff0c;研究与地表水流相关的各种自然现象&#xff0c;在城市和区域规划、农业及森林、交通道路等许多领域具有广泛的应用。 ArcGIS实例 某流域30m分辨率DEM如下&#xff1a; &#xff08;1&#xff09…

【大数据】Flink 内存管理(一):设置 Flink 进程内存

Flink 内存管理&#xff08;一&#xff09;&#xff1a;设置 Flink 进程内存 1.配置 Total Memory2.JVM 参数3.根据比例限制的组件&#xff08;Capped Fractionated Components&#xff09; Apache Flink 通过严格控制各种组件的内存使用&#xff0c;在 JVM 上提供高效的工作负…