【AUTOSAR】【以太网】SoAd

news2025/2/24 12:30:27

目录

一、概述

二、限制与约束

三、依赖模块

5.1 TCPIP模块

5.2 通用上层

四、功能描述

4.1 套接字连接

4.2 PDU传输

4.3 PDU Header option

4.4 PDU 接收

4.5 最佳匹配算法

4.6 消息接受策略

4.7 TP PDU取消

4.8 路由组

4.9 PDU fan-out

五、API接口

5.1 API定义

5.2 回调接口

5.3 调度接口


一、概述

        该文档规定了AUTOSAR 基本软件模块套接字适配器(SoAd)的功能、API和配置。

        套接字适配器模块旨在弥合这两个概念之间的差距。通过建立一个预先确定的配置,其中包括自动存储所需的信息,并在运行时保留开放更新一些项目,从而利用了冲突的概念。此外,SoAd还将基于回调的软件体系结构与TCP/IP世界中基于套接字的通信处理解耦。

        SoAd模块的主要目的是在使用pdu(例如PDU路由器)的自动共享通信服务模块和基于套接字的TCP/IP堆栈之间创建一个接口。它将把I-PDUid映射到套接字连接,反之亦然。TCP/IP协议栈在TcpIp SWS中指定,如下图所示。

二、限制与约束

        在以太网上使用TCP/IP传输数据需要大约60字节的报头信息。这意味着对于小消息,头开销可能达到令人无法接受的高百分比。

        为了避免进一步的协议开销,这里描述了每个PDU使用单个套接字连接。然而,这种解决方案是非常资源密集型的,特别是当要传输许多小的pdu时。这里描述的一个解决方案是添加一个小的PDU标头,其中包含一个ID和长度信息。这允许通过一个套接字连接传输多个pdu。此外,本规范中还提供了一个资源保护方案。

        该文档不包括UDP或TCP端口号的分配。在IANA分配的编号范围内没有预留空间。每个实现者都负责管理所使用的端口号。

        该文档不包括IP地址的管理。这可以动态完成,例如通过使用DHCP,或静态完成。实现者的责任是防止地址冲突和实现对IANA地址分配的一致性。

        该规范没有规定某个物理层或数据速率。

        SOME/IP协议规范指定,在检查服务ID和方法ID是否有效之前,要先检查协议版本。SoAd不检查协议版本。独立于未来的版本,它总是将前4个字节解释为消息ID(本文档中的头ID),第二个4个字节解释为有效负载长度。

        SOME/IP协议规范指定在检查方法ID是否有效之前检查接口版本。SoAd不检查接口版本。SoAd在专用路由路径上执行独立于所包含的接口版本的路由到已配置的消息id。

        SOME/IP协议规范指定要检查服务ID和方法ID是否有效。无效的id应响应与相应的错误码。

        SoAd检查SOME/IP消息ID(本文档中的报头ID),这是服务ID和方法ID的组合。如果ID无效,则该模块无法响应相应的错误代码。相反,它引发了运行时错误SOAD_E_INV_PDUHEADER_ID。

        SOME/IP协议规范通过[PRS_SOMEIP_00535]规定,所有传输协议绑定都应支持在传输层PDU中传输多个SOME/IP邮件。在TCP中,该要求超出了SoAd的范围,因为在TCP流上的消息包装和运输不受SoAd的影响。如果UDP收集的SOME/IP消息,仅限于IF API。根据[SWS_SoAd_00553],我们将通过TP API从上层检索到SOME/IP消息,并立即通过UDP发送。在这种情况下,无法预见打包消息,也不支持打包消息。

三、依赖模块

5.1 TCPIP模块

        TcpIp模块实现了TCP/IP协议系列的主要协议(TCP、UDP、TLS、IPv4、ARP、ICMP、DHCP、IPv6、NDP、ICMPv6、DHCPv6),并通过以太网提供动态的、基于套接字的通信。SoAd模块是TcpIp模块中可能的上层模块之一。

5.2 通用上层

        SoAd模块提供了一个通用的上层支持,即SoAd为任何符合SoAd通用上层API/配置的上层提供其服务。SoAd的每个上层都可以指定它想要使用哪种服务。

在AUTOSAR 体系结构中,已经定义了许多SoAd上层模块。以下列表指定了这些模块,并提供了所使用的SoAd服务的粗略描述:

  • PduR
  • UdpNM
  • SD
  • DoIp

四、功能描述

        SoAd可以通过TCP/IP网络实现基于pdu的通信。因此,AUTOSAR i-pdu被映射到由SoAd配置和维护的套接字连接。要为多个I-PDU使用套接字连接,可以选择在每个I-PDU前面添加一个SoAd PDU标头。指定一个消息接受策略来定义接受哪些来自远程节点的TCP连接和UDP数据报。套接字连接可以通过来自上层的请求自动打开或手动打开。对于断开和恢复套接字连接,我们定义了一个策略。SoAd的上层可以使用IF-API和TP-API来传输和接收pdu。为了有选择地启用/禁用PDU从或到套接字连接的路由,我们定义了PDU路由组,并可以由SoAd的上层进行控制。IF-PDU也可以转发到多个套接字连接,或者从套接字连接接收的消息可以作为不同的IF-PDU转发到SoAd(PDU输出)的相同或不同的上层。

4.1 套接字连接

        对于TCP/IP通信的抽象,SoAd定义了套接字连接。SoAd套接字连接指定本地套接字(即本地地址标识符和本地端口)和远程套接字(即远程IP地址和端口)之间的连接,以及连接参数,如传输协议、SoAd PDU报头的使用、缓冲区要求、连接设置、传输协议相关参数等。每个套接字连接都可以通过一个唯一的标识符(SoConId)进行标识。为同时支持多个通信合作伙伴,每个本地套接字,套接字具有相同连接参数的连接可以分组到套接字连接组。

【规范】当使用SoAd_OpenSoCon()和SoAd_CloseSoCon()分别调用时,SoAd应存储打开或关闭套接字连接的请求,但仅在SoAd_MainFunction()中根据连接设置和关闭策略处理该请求。

【规范】SoAd应在下列情况下锁定远程地址:

  • TCP套接字连接不处于SOAD_SOCON_OFFLINE状态,
  • 主动接受,
  • 未决的tppdu接收
  • 有源传输
  • nPdu特性的等待传输,
  • 通过SoAd_IfRoutingGroupTransmit()或SoAd_IfSpecificRoutingGroupTransmit()启动的挂起传输

        一个锁定的远程地址不能被上层修改。

4.2 PDU传输

        对于通过UDP或TCP套接字传输上层模块PDU SoAd配置指定链接到套接字连接的PDU路由。PDU路由(SoAdPduRoute,SoAdPduSRouteDest)描述了从SoAd的上层模块到TcpIp堆栈的相关套接字的路由,该路由由套接字连接(SoAdSocketConnection,SoAdSocket ConnectionGroup)描述。

        SoAd的上层模块可以分别使用接口(IF)API或传输协议(TP)API,用于传输请求和数据提供。

4.3 PDU Header option

【规范】如果为Socket连接和PDU传输启用PDU头选项(SoAdPduHeaderEnable 为真),应在PDU数据之前插入配置的PDU头和实际PDU长度,即TcpIp_UdpTransmit()或TcpIp_TcpTransmit()长度增加PDU头长度,在PDU数据之前,PDU头应复制到SoAd UDP传输缓冲区(如果有)和SoAd_CopyTxData()内TcpIp指定的内存,请求PDU数据的开始。

【规范】SoAd PDU标头应包括一个4字节的ID字段,用于唯一标识接收端的PDU和一个4字节长度的字段,指定PDU的数据长度。两者都以较大位数的字节顺序排列

4.4 PDU 接收

        对于通过UDP或TCP套接字接收PDU,SoAd配置指定了一个可指套接字连接的套接字路由。Socket路由(SoAdSocketRoute, SoAdSocketRouteDest)描述从TcpIp堆栈的UDP或TCP套接字(SoAdSocketConnection, SoAdSocketConnectionGroup)到SoAd相关上层模块的路由。

        SoAd的上层模块可以使用接口(IF)API或传输协议(TP)API用于PDU接收。

【规范】为了从UDP或TCP套接字接收消息,并将接收到的数据作为PDU转发到相关的上层,SoAd应负责

  1. 通过使用SoAd_RxIndication()
  2. 中提供的SocketId来识别相关的插座连接和插座路由。根据消息接受策略
  3. 筛选消息。将消息转换为PDU
  4. 如果PDU长度为0和(SoADPDu头启用为假或SoADRx上pper版面类型为TP)
  5. 则跳过进一步处理。根据Soad配置中指定的上层类型,调用配置的上层模块的上层类型相关的接收功能

【规范】如果一个UDP套接字连接组属于多个套接字连接,则该组的所有套接字连接之间共享一个UDP插座,并根据最佳匹配算法选择相关的套接字连接(见[SWS_SoAd_00680])

【规范】如果套接字连接禁用PDU头选项(SoAdPdu头启用为假),SoAd应将接收到的UDP或TCP消息1:1转换为SoAd_RxIndication()内的PDU,即每个TCP段和UDP消息形成一个单独的PDU.

【规范】如果SoAdSocketUdpStrictHeaderLenCheckEnabled启用了,SoAd应在将任何数据转发到上层之前,检查接收到的UDP消息的长度是否与所有PDU的累计长度,包括所有PDU头的累计长度相匹配。如果它们的长度不同,SoAd将无声地删除整个消息而不转发任何数据。

【规范】如果套接字连接启用了PDU头选项(SoADU头启用为真),SoAd应根据以下内容将消息转换为SoAd_RxIndication()内的PDU:

  1. 如果PDU头分成多个TCP段
  2. 则将其组装到接收缓冲区。从接收消息
  3. 中提取PDU头。根据接收到的PDU头ID(SOADID)选择相关的套接字路由;如果没有找到套接字路由,请丢弃PDU并引发运行时错误SOAD_E_INV_PDUHEADER_ID。
  4. 使用PDU标头的长度字段来标识实际PDU的长度和下一个PDU的开始时间,以继续执行(2),直到达到消息的结束时间为止。如果其余部分小于PDU标头或标头SoAd内的指示长度,则应停止处理并忽略消息的其余部分。

【规范】如果没有有效的PDU数据被转发到上层,并且在同一SoAd_RxIndication()的上下文中根据[SWS_SoAd_00592]覆盖了套接字连接的远程地址,则SoAd应恢复远程地址更改,并将套接字连接的状态设置回SOAD_SOCON_RECONNECT。

【规范】在TCP套接字连接的情况下,SoAd应通过分别调用SoAd_RxIndication()或SoAd_MainFunction()内的TcpIp_TcpReceived()来确认接收转发到上层或最终处理的所有数据(例如丢弃的数据或处理过的PDU头)。

【规范】SoAd应根据每个Socket连接的接收订单,独立处理TP-和IF-PDU。

【规范】当使用SoAd接收缓冲区时,SoAd应保存接收数据的顺序。

【规范】当接收到必须存储在SoAd接收缓冲区中的PDU或PDU的一部分大于剩余的可用缓冲区大小时,SoAd应提高运行时错误SOAD_E_NOBUFS.

【规范】如果测量数据被启用(参见SoADGET和重新安置测量数据),当丢弃接收到的PDU时,SoAd应增加相应的测量数据。

4.5 最佳匹配算法

【规范】SoAd应使用以下最佳匹配算法,根据所提供的(特定的)远程地址,选择套接字连接组的套接字连接:

  1. 应忽略没有(特定或通配符)远程地址集的套接字连接
  2. 其余插座连接的远程地址应与提供的远程地址进行比较,并根据以下订单列表选择最匹配的插座连接(后列项目优先):
    1. IP地址和端口匹配
    2. IP地址匹配(并为端口设置了通配符)
    3. 端口匹配(并为IP地址设置了通配符)
    4. 通配符同时用于IP地址和端口
    5. 不匹配(即不能选择套接字连接)

4.6 消息接受策略

【规范】如果SoAdSocketMsgAcceptanceFilterEnabled为TRUE,SoAd应只接受来自远程节点的TCP连接或UDP数据报,其源地址与套接字连接中指定的远程地址匹配(通过配置参数So SoAd_SetRemoteAddr()远程地址和远程端口或使用SoAd_SetRemoteAddr()API设置在线。

【规范】如果IP地址和端口都匹配,则远程地址相匹配。如果IP地址相同或指定的IP地址设置为TCPIP_IPADDR_ANY(TCPIP_IP6ADDR_ANY),则IP地址匹配。如果端口相同或指定的端口设置为TCPIP_PORT_ANY,则该端口匹配。

【规范】对于使用已配置的远程地址(即IP地址或端口的任意字通配符)的自动UDP套接字连接(即配置参数SoAdSocketAutomaticSoConSetup设置为TRUE),SoAd应(a)将套接字连接的状态更改为SOAD_SOCON_RECONNECT,(b)在PDU传输后将远程地址重置为已配置的远程地址,直接在调用相关传输确认功能之前(或者如果未配置则调用)。

【规范】对于使用已配置的远程地址(即IP地址或端口的通配符)的自动TCP套接字连接,在PDU传输后,直接调用(或(b)之前,在未配置这样的功能),并关闭下一个SoAd_MainFunction().c中的套接字连接

【规范】当套接字连接关闭时,SoAd应将远程地址重置为SoAd_MainFunction()内已配置的远程地址(或在未配置远程地址的情况下取消设置远程地址)

【规范】如果SoAdSocketMsgAcceptanceFilterEnabled为FALSE,SoAd应接受来自远程节点的所有TCP连接或UDP数据报

4.7 TP PDU取消

【规范】SoAd应在使用SoAd_TpCancelReceive()和SoAd_TpCancelTransmit()调用时存储取消请求,但仅在SoAd_MainFunction()中根据连接丢失和恢复策略处理该请求。

【规范】如果没有TP接收或TP传输的PDU调用SoAd_TpCancelReceive()或SoAd_TpCancelTransmit(),SoAd应忽略该请求并返回E_NOT_OK。

4.8 断开和恢复

【规范】在SoAd_MainFunction()内,SoAd应关闭与活动TP传输相关的任何通信取消请求的Socket连接。

【规范】在SoAd_MainFunction()内,SoAd应关闭与活动TP接收相关的任何通信取消请求的插座连接。

【规范】SoAd应自动重建处于SoAd_MainFunction()内连接状态SOAD_SOCON_RECONNECT的插座连接,与配置参数SoAdSocketAutomaticSoConSetup,无关,即即使该参数设置为FALSE,也应重新建立连接。重新连接应通过考虑配置参数的启动来完成。

【规范】SoAd应为连接重建中SoAd_TpTransmit()收到的TP-PDU Tx请求返回E_NOT_OK

【规范】如果UDP套接字连接配置为SoAdSocketUdpAliveSupervisionTimeout,且远程地址被覆盖,如[SWS_SoAd_00592]中所述,该套接字连接的活动监控定时器应以配置参数SoAdSocketUdpAliveSupervisionTimeout.指定的值启动

【规范】如果UDP套接字连接配置了SoAdSocketUdpAliveSupervisionTimeout,并且接收到通过消息接受过滤器的数据报,则计时器应使用配置参数指定的值重新启动

【规范】如果UDP套接字连接配置了SoAdSocketUdpAliveSupervisionTimeout,,活动监控计时器耗尽,远程地址没有由上层设置,SoAd应

  • 将套接字连接的状态更改为SOAD_SOCON_RECONNECT,
  • 停用活动监控定时器,
  • 将远程地址重置为在SoAd_MainFunction()处配置的远程地址。

【规范】如果功能SoAd_ReleaseRemoteAddr()将套接字连接的远程地址重置为包含通配符和套接字连接的配置远程地址,处于SOAD_SOCON_ONLINE模式,SoAd应将套接字连接模式更改为SOAD_SOCON_RECONNECT.

4.8 路由组

为了有选择地启用/禁用pdu从或到套接字连接的路由,我们定义了路由组,并可以由SoAd的上层进行控制。

【规范】SoAd应维护每个已配置的路由组的状态,并在初始化时根据配置参数SoAdRoutingGroupIsEnabledAtInit.激活或停用该状态。

【规范】如果使用TxPduId指定了只属于非活动路径组的SoAd_IfTransmit(),则SoAd_IfTransmit()应始终跳过该组的传输,并应认为传输成功,除非所有的SoAd_IfTransmit()只属于非活动路径组。在后一种情况下,SoAd应返回E_NOT_OK。

【规范】如果使用TxPduId指定了只属于非活动路径组的SoAd_TpTransmit(),则SoAd_TpTransmit()应始终跳过该组的传输,并应认为传输成功,除非所有的SoAd_TpTransmit()只属于非活动路径组。在后一种情况下,SoAd应返回E_NOT_OK。

【规范】如果根据不活动的程序组接收到PDU,则SoAd只需丢弃PDU。

【规范】属于SoAdSocketConnectionGroup,节点的插座连接组中的每个插座连接保持独立的状态,并将它们作为单独的连接组来处理。

【规范】如果SoAd_EnableSpecificRouting()是属于同一插座连接组的插座连接组,则仅在以下情况下才能启用插座连接的独立状态:

  • 对于同一SoAdSocketRouteDest尚未映射到其他套接字连接)和
  • 在同一连接的另一个引用的套接字连接上没有启用套接字组(即套接字连接没有映射到同一路径的另一个连接)。

否则,应退还E_NOT_OK。

4.9 PDU fan-out

【规范】对于If类型的上层,SoAd应支持多个通道,即一个IF-PDU可以通过多个Socket连接传输。

【规范】SoAd应处理一个Socket连接组的Socket线路,如同它们是本组的每个Socket连接。

【规范】如果多个套接字连接的传输请求返回E_NOT_OK,SoAd应在SoAd_IfTransmit()返回E_NOT_OK。

【规范】当有多个套接字连接时,SoAd应呼叫上层,具有配置的传输确认功能([SoAd][If]TxConfirmation()),在所有相关套接字连接传输成功后,结果仅设置为E_OK一次。

4.10 缓冲区处理

【规范】SoAd应提供足够的缓冲区来存储不能在SoAd_RxIndication()上下文中转发到上层的接收数据,以及可以(或应该)不转发到TcpIp的数据的缓冲区。

【规范】SoAd应提供足够的缓冲区来存储暂时无法转发到TcpIp的数据,例如SoAd UDP TP传输缓冲区或UdpTx缓冲区,nPduUdpTx缓冲区。

五、API接口

5.1 API定义

  1. SoAd_GetVersionInfo
  2. SoAd_Init
  3. SoAd_IfTransmit
  4. SoAd_IfRoutingGroupTransmit
  5. SoAd_IfSpecificRoutingGroupTransmit
  6. SoAd_TpTransmit
  7. SoAd_TpCancelTransmit
  8. SoAd_TpCancelReceive
  9. SoAd_GetSoConId
  10. SoAd_OpenSoCon
  11. SoAd_CloseSoCon
  12. SoAd_GetSoConMode
  13. SoAd_RequestIpAddrAssignment
  14. SoAd_ReleaseIpAddrAssignment
  15. SoAd_GetLocalAddr
  16. SoAd_GetPhysAddr
  17. SoAd_GetRemoteAddr
  18. SoAd_EnableRouting
  19. SoAd_EnableSpecificRouting
  20. SoAd_DisableRouting
  21. SoAd_DisableSpecificRouting
  22. SoAd_SetRemoteAddr
  23. SoAd_SetUniqueRemoteAddr
  24. SoAd_ReleaseRemoteAddr
  25. SoAd_TpChangeParameter
  26. SoAd_ReadDhcpHostNameOption
  27. SoAd_WriteDhcpHostNameOption
  28. SoAd_GetAndResetMeasurementData
  29. SoAd_IsConnectionReady

5.2 回调接口

  1. SoAd_RxIndication
  2. SoAd_CopyTxData
  3. SoAd_TxConfirmation
  4. SoAd_TcpAccepted
  5. SoAd_TcpConnected
  6. SoAd_TcpIpEvent
  7. SoAd_LocalIpAddrAssignmentChg

5.3 调度接口

  1. SoAd_MainFunction

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot实现登录拦截的实现

对于管理系统或其他需要用户登录的系统,登录验证都是必不可少的环节,在SpringBoot开发的项目中,通过实现拦截器来实现用户登录拦截并验证。 1、SpringBoot实现登录拦截的原理 SpringBoot通过实现HandlerInterceptor接口实现拦截器&#xff…

如何完成GNSS接收器的定时校准

背景 GNSS以其提供亚米级精度定位的能力而闻名。然而鲜为人知的是,GNSS还提供了一种非常便捷的方法,可以通过GNSS接收器获得纳秒(甚至亚纳秒)的定时精度。事实上,除了三个空间维度之外,GNSS还使用户能够计…

iPhone照片导入电脑的图文教程,批量上传的3个方法!

案例:苹果手机照片怎么批量上传到电脑? 【友友们,手机照片太多,占用了我很多内存。想要把照片上传批量上传到电脑上进行保存,该怎么做?】 随着iPhone的普及和摄影功能的提升,越来越多的用户希望…

Rave Reports v2022 for Delphi 7-11

Rave Reports v2022 for Delphi 7-11 Rave Reports是来自Nevrona的一组公司,从Delphi和CBuilder中的数据库中报告进度。您可以使用专用工具轻松设计自己的报告。如果您需要将报告更改为您的用户,例如要发布的订单报告,此工具也提供了此功能&a…

Java | 一分钟掌握定时任务 | 3 - 单机定时之Timer

作者:Mars酱 声明:本文章由Mars酱原创,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 介绍 这个是个JDK远古时代的api了,据考证,可以追溯到…

CSS小技巧之圆形虚线边框

虚线相信大家日常都用的比较多,常见的用法就是使用 border-style 控制不同的样式,比如设置如下边框代码: border-style: dotted dashed solid double;这将设置顶部的边框样式为点状,右边的边框样式为虚线,底部的边框样…

视频采集到录制 - 采集到显示碰到一些难点

项目中用到相机后端处理,走了一些弯路,也遇到不少问题(解决了不少问题),特意写下本文记录下当时点点滴滴。 讲一下背景,公司自研相机,用于一些高端场合,因此对后端处理也非常讲究 …

网络基本知识分享

目录 1.IP地址 2.端口号 3.协议 4.协议分层 5.Tcp/Ip五层网络模型 5.1 应用层 5.2 传输层 5.3 网络层 5.4 数据链路层 5.5 物理层 6.封装和分用 6.1 封装 6.1.1 应用层拿到数据 6.1.2 向下传递给传输层 6.1.3 继续向下传递给网络层 6.1.4 继续向下传递给数据链…

【自制视频课程】C++OpnecV基础35讲——第一章 前言

为什么要学习OpenCV? 首先,opencv是一个广泛使用的计算机视觉库,它提供了丰富的图像处理和计算机视觉算法,可以帮助我们快速地开发出高质量的图像处理应用程序; 其次,opencv是一个开源库,可以免…

Spark大数据处理讲课笔记4.3 Spark SQL数据源 - Parquet文件

文章目录 零、本讲学习目标一、Parquet概述二、读取和写入Parquet的方法(一)利用parquet()方法读取parquet文件1、读取parquet文件2、显示数据帧内容 (二)利用parquet()方法写入parquet文件1、写入parquet文件2、查看生成的parque…

零入门kubernetes网络实战-32->基于路由技术+brigde+veth pair形成的跨主机通信方案

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本文主要使用的技术是 路由技术Linux虚拟网桥虚拟网络设备veth pair来实现跨主机通信 该方案是flannel网络方案中的host-gw网络模型的基础。 1、总结 本…

化制为智,驭数前行 | 如何把握油气装备领域智能制造的未来?

01「智」赋未来,油燃而升 2015年,我国提出了“中国制造2025”规划,把智能制造作为两化深度融合的主攻方向,智能制造产业链所蕴藏的巨大投资机会将逐渐被市场挖掘。作为国家战略的基础,油气工程装备,特别是…

C++ 基础STL-list容器

STL-list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。 链表的优点:可以对任意位置进行快速插入和…

【触觉智能分享】RK3568+Debian系统如何旋转屏幕显示方向

大家在购买开发板后,默认开机进入桌面屏幕显示方向是竖屏,有些用户想修改为横屏显示,本文就用IDO-EVB3568为例,用Debian系统演示如何旋转屏幕显示方向,此方法适用于所有RK356X系列产品。 IDO-EVB3568开发板拥有四核A5…

【数据结构】--- 几分钟走进栈和队列(详解-上)

文章目录 前言🌟一、栈🌏1.1栈的概念及结构:🌏1.2实现栈的两种方式: 🌟二、栈实现(数组栈)🌏2.1结构:🌏2.2初始化:💫2.2.1第一种代码:…

Direct3D 12——纹理——纹理贴图的作用

法线贴图 在不增加三角形的情况下增加表面细节 任何一个像素它的法线都做一个扰动,通过定义不同的高度和临近位置的高度差重新计算法线 纹理定义的是任何一个点,它的相对的高度的移动,通过高度的变化改变法线 原曲面法向量n ( p) (0,1) p点…

代码随想录 LeetCode链表篇 Java

文章目录 (简单)203. 移除链表元素(中等)707. 设计链表(简单)206. 反转链表(中等)24. 两两交换链表中的节点(中等)19. 删除链表的倒数第 N 个结点&#xff08…

Schlumberger ECLIPSE CRACK

Schlumberger ECLIPSE CRACK 工业和工程软件旨在模拟Schlumberger ECLIPSE Simulation的碳氢化合物,该模拟与Shelberger的技术服务有关,以及用于预测和历史的容器中当前方程数量的最新和最新解决方案集。动态行为是各种传统和不寻常的石油和天然气模式。…

DevExpress:报表控件绑定数据库数据源的三种方式(Winform)

1.写在前面 如果你是和我一样,第一次接触DevExpress,并且因为网上资源眼花缭乱无从下手,然后脑子一转直接到DevExpress官网寻找官方使用文档的,那我们的了解顺序应该差不多是一致的。 DevExpress官网:https://www.de…

【笔试强训选择题】Day12.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录…