当前位置: 首页 > news >正文

【汽车电子架构】AutoSAR从放弃到入门专栏导读

本文是汽车电子架构:AutoSAR从放弃到入门专栏的导读篇。文章延续专栏文章的一贯作风,从概念与定义入手,希望读者能对AutoSAR架构有一个整体的认识,然后对专栏涉及的文章进行分类与链接。本文首先从AutoSAR汽车软件架构的概念,架构以及方法与模版三个方面帮助读者能够在一个更高的抽象角度理解这个架构的思想。然后依据笔者自身的开发经历,对整个AutoSAR入门学习的路线进行简单的分类之后,梳理了一套AutoSAR入门学习的路线图,依据能够构成一个ECU最小基础工程的理念,把专栏中包含的必要基础软件模块分别链接到专栏中具体模块的详细介绍,帮助读者根据自己的情况更好的查找到对应的模块详解文章。

目录

写在前面

概述

Concept(概念)

Architecture(架构)

Methodology and Templates(方法论与模版)

方法论概念

整体工作流程 

模版

AutoSAR学习路线图

MCAL

BSW软件模块

系统集成开发


写在前面

本专栏的文章采用的结构为:概念->实战->验证,均从三个角度来帮助读者对AutoSAR模块有一个全方位的了解(BSW中的纯软模块通过代码的阅读完成了功能验证的角度解读)。文章中概念的解读大部分来自于规范文档本身(笔者根据自身的开发经历做了一些删减和结构调整);实战部分则着眼于最基础的应用,做了详细的介绍个配置过程解读;最后,则是对具体模块的验证和使用测试过程,帮助读者能对模块有更直观的认识。

因为本专栏的文章系我一个人码的,所有难免会有一些笔/思误,且在解读AutoSAR规范的过程中,笔者也遇到过前后矛盾的情况,所以希望广大读者,如果在阅读本人的文章中发现错误或者跟您在实际应用开发过程中有出入的情况时,给我在文后评论留言,我一定尽快回复大家,一起讨论技术问题,共同塑造一个有对AutoSAR学习有普遍指导意义的专栏,这个专栏以及后续的文章会一直保持免费,感谢大家的付出:)。

最后,经过我这一年以来的总结学习,深知一个人的能力力量有限,这个系列的专栏我本打算分成三步,首先是现在这个开题的入门专栏,然后再做一个以解决项目中实际遇到的问题为导向的分享专栏,最后再做一个用“手写”代码逐步对模块进行替代的专栏,其中还想穿插一些用Simulink进行应用层开发的知识。如果有想共创、接棒的童鞋,私信联系我,没什么回报哈,就是单纯的做些事情,师夷长技以制夷,我这边一定全力配合。


概述

AutoSAR(Automotive Open System Architecture)是汽车电子行业的一个开放且标准化的软件架构,它促进了不同供应商之间的软件兼容性和互操作性。标准上合作,实现上竞争(Cooperate on standards,Compete on implementation),AutoSAR作为汽车行业的整车厂和供应商共同合作开发一套汽车电子系统的软件开发标准,帮助大家能够专注于功能的开发,而无需顾虑其他主体开发的功能模块以及目标硬件平台。它主要完成了以下的目标:

  • 基于定义的概念(Concept),一个基本的概念是虚拟功能总线(VFB),应用程序间通过虚拟总线进行交互,VFB处理单个ECU内部和ECU之间的通信。
  • 基于定义的分层架构(Architecture),给出一个控制器软件参考架构,通过软件抽象层RTE(运行时环境)将独立于硬件的应用软件和面向硬件的基础软件分离,并将汽车系统的基础软件标准化为一个跨OEM的标准栈。
  • 基于定义的方法论和模板(Methodology and Templates),为应用程序的开发提供方法论,定义模块间的通信接口。规范分布式开发流程中不同模块间的交换描述格式(遵循AUTOSAR Schema的.arxml文件),各种生成器可以利用描述中的信息来支持RTE和AUTOSAR基础软件软件(包括操作系统)的配置和生成。


Concept(概念)

AUTOSAR中,应用程序被建模为相互连接的组件的组合,如下图的上半部分所示(标记为“VFB view”),而虚拟功能总线是允许这些组件交互的通信机制,这些组件可以按需要映射到特定的系统资源(ECU)中。因此,组件之间的虚拟连接映射到本地连接(在一个ECU内)或映射到网络技术特定的通信机制(例如CAN或者FlexRay帧)。最后,针对每个独立的ECU可以配置生成对应的RTE和BSW,组件之间以及组件与BSW(基础软件模块)之间的具体连接关系称为运行时环境(RTE)。

虚拟功能总线的概念允许应用程序和其余组件之间严格分离。实现应用程序的软件组件在很大程度上独立于其他组件或硬件(如传感器或执行器)交互的通信机制。这实现了AUTOSAR的可重用性目标。通过这种方式,可以指定系统的完整通信,包括所有通信源和目标位置,因此,VFB可用于对软件组件的通信进行合理性检查。通信连接和连接的软件组件保存在一个描述中,该描述将用于后续处理步骤(映射、软件配置等)。VFB规范需要为实现汽车应用的组件所需的所有基础设施服务提供概念。这些包括:

  • 与系统中其他组件的通信。
  • 与系统中的传感器和执行器的通信。
  • 访问标准化服务,例如读取或写入非易失性RAM。
  • 响应模式变化,例如本地ECU的电源状态变化。


Architecture(架构)

AUTOSAR是专门为汽车ECU设计的。这些ECU具有以下特性:

  • 与硬件(传感器和执行器)的复杂交互作用。
  • 连接到车辆网络,如CAN、LIN、FlexRay或以太网。
  • 微控制器(通常为16位或32位)具有有限的计算能力和内存资源。

AUTOSAR架构在最高抽象级别上区分了三个软件层:应用程序、运行环境和基础软件,这些层运行在微控制器上。

AUTOSAR基础软件进一步分为以下几个层次:系统服务、ECU抽象、单片机抽象和复杂驱动程序。

基础软件层被进一步按功能划分为不同的服务组。服务示例包括系统、内存和通信服务。 

微控制器抽象层是基本软件的最低软件层。它包含内部驱动程序,这些驱动程序是直接访问Microcontroller和其内部外设。 它可以使上层的模块与Microcontroller尽可能解耦。

ECU抽象层是从ECU的角度进一步封装了微控制器抽象层的驱动程序,它主要包含外部设备的驱动程序。用于提供访问微控制器芯片外围硬件芯片的API(微控制器芯片内部的功能API也在这里再次封装供上层使用)。这一层的主要目标是实现更高的软件层独立于ECU的硬件设计。

复杂驱动程序层提供给RTE直接访问硬件渠道。它提供了实现AUTOSAR规范外功能的可能性,例如设备通信(Wifi、RF通信),硬件加速核等驱动的实现。

服务层是基础软件的最高层,应用软件。虽然I/O信号的工作由ECU抽象层负责,但服务层提供:

  • 类操作系统功能。
  • 车辆网络通信和管理服务。
  • 内存服务(NVRAM管理)。
  • 诊断服务(包括UDS通信、错误存储和故障处理)。
  • ECU状态管理、模式管理。
  • 程序监控(Wdg manager)。

RTE是为应用软件(AUTOSAR软件组件和/或AUTOSAR传感器/执行器组件)提供通信服务的层。
在RTE上方,软件架构的风格从“分层”变为“组件”风格。AUTOSAR软件组件通过RTE与其他组件(ECU内部和/或内部)通信。这层主要实现AUTOSAR软件组件独立于对特定ECU。

基础软件可以细分为以下几类服务:

  • Input/Output (I/O):对传感器、执行器和车载ECU外围设备的标准化访问。
  • Memory:对内部/外部存储器(非易失性存储器)的标准化访问。
  • Crypto:对加密服务(包括内部/外部硬件加速器)的标准化访问。
  • Communication:对车辆网络通信系统、ECU板上通信和ECU内部软件的标准化访问。
  • Off-board Communication::车对X通信、车内无线网络系统、ECU板外通信系统的标准化访问。
  • System:提供标准化系统服务(调度器、定时器、错误存储器)和ECU专用(ECU状态管理、watchdog管理)服务和库功能。

驱动程序包含控制和访问内部或外部功能集成电路的能力。微控制器内部的功能集成电路(微控制器片内外设)的驱动程序称为内部驱动程序,位于微控制器抽象层中。片内外设的例子有:

  • 内部EEPROM。
  • 内部CAN控制器。
  • 内部ADC。

外部功能集成电路位于微控制器之外但在同一个ECU硬件上(片外外设),片外外设的例子有:

  • 外部EEPROM。
  • 外部watchdog。
  • 外部flash。

片外外设的驱动程序称为外部驱动程序,位于ECU抽象层。它通过微控制器抽象层的驱动程序访问片外外设。例如针对具有SPI接口的外部EEPROM,驱动程序通过微控制器抽象层提供的SPI总线API访问外部EEPROM。有一些常用的片外外设会集成到一个芯片上(系统基础芯片:SBC),比如收发器和看门狗。有一种例外情况,例如映射到片内地址空间的外部设备(例如外部闪存),驱动程序可以直接访问微控制器来操作片外外设。这些外部驱动程序位于微控制器抽象层中,因为它们依赖于微控制器。

一个接口(接口模块)包含从结构上位于其下方模块的功能抽象。它提供了一个通用API,用于访问特定类型的设备,而不受该类型现有设备数量与设备硬件实现的影响。接口模块不会改变数据的内容。通常,接口模块位于ECU抽象层中。例如,CANIf接口模块提供了一组通用API,用于访问CAN通信网络,而不受ECU中CAN控制器数量的影响,也不受硬件实现(片上、片外)的影响。

handler实现对一个或多个驱动程序并发、异步的访问(它实现缓冲、排队、仲裁和复用逻辑)。
handler不会更改数据的内容。handler通常包含在驱动程序或接口模块中(例如,SPIHandlerDriver,ADC Driver)。

manager为多个客户端提供特定的服务。在handler无法满足多个客户端的情况下都需要manager。除了handler外,管理员还可以评估和更改或调整数据的内容。
一般情况下,manager位于服务层,例如NVRAM管理对内部和/或外部存储器设备(如闪存和EEPROM存储器)的并发访问。它还执行分布式和可靠的数据存储、数据检查、提供默认值等。

是用于相关目的的函数集合,它具有以下特征:

  • 可以由BSW模块(包括RTE)SW-C、集成代码或其他库调用。
  • 运行需要跟调用一致的上下文保护环境。
  • 其自身只能调用其他库。
  • 是重入的。
  • 没有内部状态,不需要任何初始化。
  • 是同步的,即它们没有等待点。

以下库在AUTOSAR中指定包含的:

  • Fixed point mathematical
  • Interpolation for floating point data
  • CRC calculation
  • Floating point mathematical
  • Bit handling
  • Extended functions (e.g. 64bits calculation, filtering, etc.)
  • Interpolation for fixed point data
  • E2E communication


Methodology and Templates(方法论与模版)

方法论概念

AutoSAR方法论主要定义了下面五个领域:

  • Virtual Functional Bus
  • System
  • Software Component
  • Basic Software
  • ECU

他们之间的工作流如下图所示。

 上图的工作流涉及了AutoSAR定义的五种基本元素:

  • Task Definition:任务
  • Work Product Definition:工作产品
  • Role Definition:角色
  • Tool Definition:工具
  • Guidance:指导

这五种元素的图标如下,多出的Deliverable(交付品)是工作产品的聚合。

一个任务有一个明确的目的,其中执行角色实现一个定义明确的目标。对于AUTOSAR方法论,任务是可重用的元素,在多个方法论用例中都可以使用。任务至少与一个执行角色相关联,并且可能有多个额外的执行者任务使用工具来实现其输出。可选执行者和任务的可选输入和输出由关系的复数性来描述。 

下图展现了一个任务与其他基本元素的关系。

工作产品定义由任务使用、修改和产生(即任务输入和输出)。工作产品在大多数情况下是由任务消耗、产生或修改的有形工作产品。 工作产品可以是一个交付品,也可以是一个工件,工件的类型如下:

  • AUTOSAR XML
  • Source Code
  • Object Code
  • Executable
  • Text

下图是工件与其他元素的关系。

角色定义了个人或一组个人的职责,从而定义了执行任务所需的一组相关技能、能力和资格。一个角色可以由一个人或多人担任,一个人可以担任多个角色。每个角色用于执行任务。 下图是角色与其他元素的关系。

工具定义描述了CASE工具、通用工具或任何其他自动化单元的能力,这些工具支持相关角色执行任务所定义的工作(例如编译器)。 下图是工具与其他元素的关系。

指导提供与角色、工作产品和任务等相关的额外信息。 指导可以是以下几种形式:

  • Supporting Material:辅助材料是其他类型指南的统称,这些指南在其他地方没有具体定义。
  • Tool Mentor:工具导师展示了如何使用特定的工具来完成某项工作,无论是在任务或活动的上下文中还是独立于任务或活动。
  • White Paper:白皮书是经过外部审查或发布的概念指南,可以独立于其他方法内容阅读和理解。AUTOSAR文档就是白皮书的例子。

下图是指导与其他元素的关系:


整体工作流程 

以下简要介绍了开发AUTOSAR系统的主要活动。第一步侧重于开发抽象系统,其次是描述VFB开发,最后是进一步改进和开发系统的活动。

Development of a functional view on the system(系统设计阶段):整个工作流程从这个可选的活动开始,预先开发抽象系统描述,它从功能或抽象的角度(功能架构)代表整个系统。一方面,这个抽象系统描述可能包含与VFB相关的部分。这些信息可能作为VFB开发的输入,并在这两个视图之间建立映射。请注意,在此步骤中,功能包括软件组件的端口映射。因此,抽象视图中使用的某些端口可能在随后的开发中不再使用。另一方面,抽象系统描述可能包含有关拓扑和映射到ECU的信息。这是开发具体系统描述的基础。下图是系统的抽象视图(上)和对VFB视图的SW-C的映射示例。

Development of the Overall VFB System(虚拟总线系统开发阶段):总体VFB系统开发,如果省略上面提到的系统设计阶段(可选的第一步),则开发直接从定义总体VFB系统开始。VFB是软件组件之间通信的抽象。它提供了系统包含的所有软件组件的专用视图,如下图所示,独立于任何ECU和网络。

Development of the system (系统开发):VFB通过定义ECU和网络的拓扑结构,并在ECU上部署软件组件来进行系统的开发,见下图。此外,还推导出用于连接分布式功能的通信矩阵。作为通信开发的一部分,可以指定自定义计算方法,用于在ECU之间通信时转换数据。此转换是相应基本软件模块实现的基础。系统的开发可以直接在一个阶段或几个阶段完成。下图是一个系统包含的内容。

两阶段开发方法当存在组织责任分离时,使用两阶段方法其中主要组织(通常是OEM)在第一阶段定义整个系统,其他几个组织(通常是供应商)在第二阶段并行定义子系统。在这种情况下,主要组织移交系统提取,这些提取代表整个系统的子系统。这些子系统包含子系统VFB,它们是整体VFB的一部分。总体系统定义了主要的公共ECU和拓扑结构,而子系统设计通过在系统中添加私有ECU和网络来做出贡献。请注意,在子系统内定义的部分对其他子系统或总体系统是不可直接访问的。主要组织的系统提取可以被视为需求,而由一个或多个电子控制单元系统描述代表的接收组织的子系统可以被视为解决方案,其必须满足交付的需求。下图显示了不同的系统提取与ECU系统描述之间的关系。

Producing ECU-specific deliverables(ECU特定交付物抽取):获取特定ECU的可交付成果是在完成系统设计后。我们需要提取与特定ECU相关的部分,为每个ECU生成一个可交付成果,即所谓的ECU提取。与之前对系统或ECU的描述相比,ECU提取被完全分解,仅包含原子软件组件。它是ECU配置的基础。

Development of Software Components(软件组件开发):与系统设计并行,软件组件(交付原子软件组件)根据抽象VFB、VFB或子系统VFB所需定义进行实现。基于VFB定义的外部接口,可以定义内部行为,并最终实现软件组件,见下图。最终软件组件完成开发之后,被交付以集成到ECU中,并在其中部署。请注意,软件组件的实现在很大程度上独立于ECU的配置。

Development of Basic Software modules(基础软件开发):由于基本软件模块独立于VFB,因此可以在ECU集成前的任何时间开发。下图显示BSW的开发。

Integration of AUTOSAR ECUs(针对ECU的集成工作):当AUTOSAR SIP包(包含MCAL)、ECU提取完成(ECU涉及软件组件描述文件(arxml完成),ECU涉及系统信号添加完成,系统/内部信号连接完成),以及所有交付的原子软件组件的实现可用时,AUTOSARECU的集成开始。在此阶段,对ECU进行配置。执行顺序由任务调度和将软件组件运行程序分配给这些任务来确定,并根据ECU抽取结果自动进行初步的基础软件配置(主要针对通信栈)。然后,完整的完成对基础软件模块的配置。最后,在生成RTE后,将完整的代码编译并链接成可执行文件。


模版

下图说明了用于定义正式模板的整体方法(以系统模版为例)。正其中重要的是要从具体的XML-DTDS、XML-Schemas或其他用于定义实际模板的技术中分离出需要捕获的信息的精确和简洁的模型。

下面介绍一下模版涉及的一些文档概念:

  • template document:模板文档(在此示例中为系统模板)描述了可以在模板中捕获的信息。它包含了对AUTOSAR元模型相关部分中所有可捕获信息的语义(确切含义)的详细描述。
  • M2 Templates:AUTOSAR元模型中称为M2模板的模型,这个模型通过在模板文档中表示为类表的标注进行注释。
  • Generic Structure Template:泛型结构模板的文档被重新表示为元模型中的预定义类,这些类被并入生成的schema中。
  • Template UML Profile and Modeling Guide:模板UML简介和建模指南描述了在创建元模型内容时应用的基本概念。
  • XML Schema Production Rules:这个文档叫XML规则构建文档,它描述了如何使用XML,以及如何将“软件组件模板”中设计的元模型由“Schema生成器”(MDS)转换为XML-Schema(XSD)的“数据交换格式”。这种“形式化策略”应该用于所有在元模型中正式描述的数据。为了理解元模型和基于XML的AUTOSAR模板的映射,值得深入理解本文档。
  • Data Exchange Format:数据交换格式表示为从AUTOSAR元模型自动生成的XML Schema,生成使用XML Schema Production Rules中定义的方法和模式。该Schema通常用作AUTOSAR工具的输入。
  • M1-level descriptions:M1级别的描述(在上图中显示为“系统配置描述”和“系统约束描”)是XML文件,可以按照XML模式进行验证,并进一步遵循相关“模板文档”中的规范。换句话说,XML文件是定义模板XML表示的模式的实例。

下图描绘了元模型的总体结构,它正式定义了描述AUTOSAR软件组件所需的词汇表。正如该图所指出的,其他模板规范(例如ECU资源模板和系统模板)也使用相同的建模方法,以定义AUTOSAR 软件描述的整个一致模型。
图中的虚线箭头描述了元模型中包之间的导入关系依赖。例如,包SWComponentTemplate导入在包Generic-Structure(本文档中描述)和ECUResourceTemplate中定义的元类。

可以看到,所有的模版都依赖于Autosar Top Level Structure,这种方法为AUTOSAR方法中的工件设计提供了最大的灵活性,下图说明了AUTOSAR的顶层结构。

以下ARXML文件示例了顶级结构。该文件以英语和德语维护,英语是主语言。 

<?xml version="1.0" encoding="UTF-8"?>
<AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://autosar.org/schema/r4.0"
xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-1-3.xsd"
><ADMIN-DATA><LANGUAGE>EN</LANGUAGE><USED-LANGUAGES><L-10 L="EN" xml:space="default">English</L-10><L-10 L="DE" xml:space="default">German</L-10></USED-LANGUAGES></ADMIN-DATA><AR-PACKAGES><AR-PACKAGE><SHORT-NAME>demo</SHORT-NAME><ELEMENTS><!--autosar elements here--></ELEMENTS></AR-PACKAGE></AR-PACKAGES></AUTOSAR>

详细的模版规范可以在AutoSAR网站搜索到对应到的文档说明,主要包含:

  • Software Component Template:软件组件模版,详细模版内容见《AUTOSAR_TPS_SoftwareComponentTemplate.pdf》。
  • System Template:系统模版,详细模版内容见《AUTOSAR_TPS_SystemTemplate.pdf》。
  • Basic Software Module Description Template:基础软件模块描述模版,详细模版内容见《AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf》。
  • Specifcation of ECU Confguration:ECU配置模版,详细模版内容见《AUTOSAR_TPS_ECUConfiguration.pdf》。

AutoSAR学习路线图

AutoSAR开发大概可以按下图分为四个部分。下图的BSW软件模块特指BSW中不包含MCAL的其余部分。

因为BSW软件模块的配置大部分可以通过系统与ECU的配置由工具链自动生成,所以BSW模块配置开发与MCAL配置与底层驱动开发往往归于一个团队来处理,我们可以针对某个芯片(例如英飞凌3系列)的开发板从ETAS购买工程服务从而得到一个基础软件例程,然后针对具体项目对MCAL、BSW和系统集成开发方面进行二次开发,一个团队就能处理包括MCAL、BSW和系统集成开发的工作,大大缩减项目开发周期,并且能够得到工具链厂商有针对性的技术支持。

在学习AutoSAR之前,我们需要先了解一下我们跑AutoSAR软件的微控制器芯片,常见的芯片厂商有英飞凌、瑞萨和恩智浦,本专栏涉及的控制器芯片为英飞凌的TC397芯片,本专栏涉及这个方面的文章有:

  1. 英飞凌(Infineon)平台嵌入式开发基础:文章介绍英飞凌芯片开发的一些基础知识,包括手册等资料的获取方法等。
  2. 【MCAL】HighTec集成TC3xx对应MCAL的Demo:文章介绍了在安装了TC3xx的MCAL之后,使用HighTec集成开发环境使用它的Demo程序来搭建一个只有MCAL的工程,从而后边能够针对MCAL中的模块进行驱动测试。
  3. 英飞凌(Infineon)TC397链接文件解析:文章介绍了前面提到的TCxx对应MCAL的Demo中的链接文件解析,帮助读者后边更好的理解程序各部分在运行时的地址位置,完成一些特殊值的预存。

开发过程中难免会使用一些工具:

  1. 【汽车电子】CAN总线分析仪使用介绍(PCAN/同星CAN卡):文章介绍了PCAN和同星CAN卡的使用过程。

MCAL

MCAL作为除了OS(虽然依然使用的是驱动中的中断处理函数,但是AUTOSAR OS接管了所有硬件的中断的控制,包括向量表实现,开启/关闭中断)之外唯一直接跟硬件打交道的基础软件,它主要包含以下这些部分:

专栏对MCAL的学习主要是前面提到的利用HighTec搭建起来的MCAL的Demo程序,使用的调试软件是UDE。

专栏中涉及的MCAL模块足以支撑一个一般ECU的功能,每篇文章首先都从理论原理入手,介绍了相关模块的Autosar规范手册和MCAL手册的功能定义说明,然后再结合实际的配置目标,记录了完整的配置过程,最后展示了配置目标的功能测试过程。展览包含的MCAL模块有:

  1. 【AUTOSAR MCAL】MCAL基础与EB tresos工程新建:文章介绍了使用tresos Studio新建MCAL工程的过程。
  2. 【MCAL】TC397+EB-tresos之MCU配置实战 - 芯片时钟:文章介绍了使用MCU模块实现芯片时钟。
  3. 【MCAL】TC397+EB-tresos之Port&Dio配置实战 - LED灯闪烁:文章介绍了使用Port&Dio模块实现LED灯闪烁。
  4. 【MCAL】TC397+EB-tresos之GPT配置实战 - 定时器:文章介绍了使用GPT模块实现LED定时器。
  5. 【MCAL】TC397+EB-tresos之CAN配置实战 - (CAN/CANFD):文章介绍了使用CAN模块实现CAN/CANFD通信。
  6. 【MCAL】TC397+EB-tresos之ADC配置实战 - (模数转换):文章介绍了使用ADC模块实现模拟电压转化为数字量。
  7. 【MCAL】TC397+EB-tresos之存储器驱动配置- (Fls_17_Dmu/FlsLoader):文章介绍了使用ADC模块实现模拟电压转化为数字量。
  8. 【MCAL】TC397+EB-tresos之SPI配置实战 - (同步/异步):文章介绍了使用SPI模块实现与片外外设实现同步或异步通信。
  9. 【MCAL】TC397+EB-tresos之ICU配置实战:文章介绍了使用ICU模块实现方波信号检测功能。
  10. 【MCAL】TC397+EB-tresos之PWM配置实战 - (占空比可调方波):文章介绍了使用PWM模块实现方波发生功能。

BSW软件模块

此部分涉及的基础软件模块包含除了MCAL等跟硬件有关的纯软件基础软件模块,专栏中涉及的模块足以支撑一个一般ECU的的功能。下面涉及的所有文章均从AUTOSAR规范解析,ISOLAR-AB配置以及模块相关代码分析三个维度详细介绍对应的BSW软件模块,其中包含:

  1. 【ETAS CP AUTOSAR基础软件】EcuM模块详解:EcuM模块主要完成ECU的状态管理,包括上电初始化,休眠验证等功能。
  2. 【ETAS CP AUTOSAR基础软件】BswM模块详解:BswM模块主要完成基础软件状态管理。它可以根据不同条件定义不同基础软件状态,每种状态则会对应一个执行动作列表,在切换到这个状态中执行列表中的动作。
  3. 【ETAS CP AUTOSAR基础软件】DET、Bfx、CRC、ComStack、rba_ArxmlGen模块详解:这几个模块功能范围相对小且独立,放到了一起统一介绍。
  4. 【ETAS CP AUTOSAR基础软件】DCM模块详解(诊断):DCM模块中主要处理诊断除故障管理的部分。其中主要包括诊断服务,安全等级,DID等配置。
  5. 【AUTOSAR 基础软件】DEM模块详解(诊断故障管理):DEM模块中主要处理故障管理部分。其中主要包括DTC的相关配置。
  6. 【AUTOSAR 基础软件】存储栈(NvM、MemIf、Fee)详解:存储栈(NvM、MemIf、Fee)主要处理基础软件中跟存储有关的功能。
  7. 通信栈:
    1. 【AUTOSAR 基础软件】COM模块详解(通信):COM模块主要处理能从具体底层通信方式抽象出来的通信功能部分,包括拆解/拼装信号到Pdu(报文)以及周期发送报文等功能。
    2. 【AUTOSAR 基础软件】PduR模块详解(通信路由):PduR模块主要处理不同底层通信方式报文与上层模块之间的路由。
    3. 【AUTOSAR 基础软件】ComM模块详解(通信管理):ComM模块主要处理通信状态管理功能。
  8. CAN栈:
    1. 【AUTOSAR 基础软件】Can模块详解(Can栈之驱动模块):CAN模块主要提供MCAL中CAN模块的MailBox等配置信息,并提供给其余CAN栈模块引用。
    2. 【AUTOSAR 基础软件】CanSM模块详解(Can栈之状态管理模块):CanSM模块主要提供CAN通信的状态管理功能,主要包含BusOff处理等。
    3. 【AUTOSAR 基础软件】CanTp模块详解(Can栈之传输模块):CanTp最常见的应用是将诊断涉及的相关功能模块发送/接收数据转化为包括单帧(SF)、首帧(FF)、连续帧(CF)以及流控帧(FC)格式并下发到CanIf模块,并提供整个通信过程中超时时间的判决。
    4. 【AUTOSAR 基础软件】CanIf模块详解(Can栈之接口模块):CanIf模块作为AUTOSOR的CAN栈最下层模块,向CAN栈的上层提供了不同CAN控制器与收发器的统一抽象接口。

系统集成开发

系统集成开发涉及了包括SWC的集成与开发,内部信号的连接,OS的配置与集成,DBC/LDF通信信息描述文件的导入以及系统信号连接,部分BSW自动配置(主要涉及通信栈)以及RTE代码的生成。这块的内容比较繁杂,需要对SWC,RTE,BSW三个部分都有一定的理解,才能快速的定位解决集成工作中遇到的问题。下面是本专栏相关的集成开发内容文章,涉及的相关操作要点足以支撑完成日常集成工作:

  • 【ETAS CP AUTOSAR工具链】基本概念与开发流程:文章介绍了基于ETAS工具链完成集成工作的一些基本概念与开发流程,涉及到RTE之前,可以称这部分为“系统开发”。
  • 【ETAS CP AUTOSAR工具链】RTE运行时环境详解:文章介绍了RTE的开发概念与基于ETAS工具链完成配置的过程,文章介绍集成工作到RTE代码生成。
  • 【ETAS CP AUTOSAR工具链】RTA-OS操作系统详解:文章介绍了RTA-OS的开发概念与配置过程,能够帮助我们完成一些基本的任务/中断添加等集成工作。
  • 【ETAS CP AUTOSAR工具链】RTA-BSW基础软件开发详解:文章介绍了使用ETAS工具链完成BSW自动配置,手动配置,以及代码生成的过程与相关概念。
  • 【ETAS CP AUTOSAR工具链】ARXML文件详解:文章首先介绍了ARXML的一些基础概念,然后基于使用ISOLAR-AB从A到B的开发过程,将涉及到的ARXML文件进行了详细的解析,它们都是前文提到模版的具体实现。

软件组件开发

AutoSAR架构中仅仅定义了软件组件的开发方法论,其具体的开发方式供各个供应商选择,您可以采用Simulink基于模型的设计开发方式,也可以采用“手写”代码的实现ECU的相应功能规范。本专栏中简单介绍了基于ETAS工具链实现一些基础软件必要的软件组件设计开发,实现一些所谓“代理”的SWC,在真正的应用软件组件之下实现一些逻辑功能。

  • 【AUTOSAR 基础软件】软件组件的建立与使用(“代理”SWC):本文从创建软件组件讲起,并针对软件组件中的常用部分以实例为基础进行了详尽的说明,帮助读者能够使用ISOLAR这个工具建立并使用SWC。

十六宿舍 原创作品,转载必须标注原文链接。

©2023 Yang Li. All rights reserved.

欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。

相关文章:

【汽车电子架构】AutoSAR从放弃到入门专栏导读

本文是汽车电子架构&#xff1a;AutoSAR从放弃到入门专栏的导读篇。文章延续专栏文章的一贯作风&#xff0c;从概念与定义入手&#xff0c;希望读者能对AutoSAR架构有一个整体的认识&#xff0c;然后对专栏涉及的文章进行分类与链接。本文首先从AutoSAR汽车软件架构的概念&…...

【go语言】指针

一、指针的定义和使用 在 Go 语言中&#xff0c;指针是一种变量&#xff0c;用来存储另一个变量的内存地址。通过指针&#xff0c;我们可以间接地操作其他变量的值。Go 语言中的指针与其他语言&#xff08;如 C 或 C&#xff09;的指针有所不同&#xff0c;它不支持指针算术&am…...

宝塔面板SSL加密访问设置教程

参考:https://www.bt.cn/bbs/thread-117246-1-1.html 如何快速使用证书加密访问面板 因早期默认未开启https访问所以没有相关的风险提醒&#xff0c;现面板默认已开启https加密访问、提升安全性 由于采用的是服务器内部本身签发证书&#xff0c;不被公网浏览器信任请参考以下步…...

spring中解决循环依赖的方法

为了避免这种循环依赖问题&#xff0c;Spring 引入了三级缓存的机制&#xff0c;分为&#xff1a; 一级缓存&#xff08;singletonObjects&#xff09;&#xff1a;这是存放已经完全创建好的单例 Bean 的缓存。当 Bean 完全初始化并且可以被使用时&#xff0c;会存放在这里。 …...

新时代架构SpringBoot+Vue的理解(含axios/ajax)

文章目录 引言SpringBootThymeleafVueSpringBootSpringBootVue&#xff08;前端&#xff09;axios/ajaxVue作用响应式动态绑定单页面应用SPA前端路由 前端路由URL和后端API URL的区别前端路由的数据从哪里来的 Vue和只用三件套axios区别 引言 我是一个喜欢知其然又知其所以然的…...

Docker/K8S

文章目录 项目地址一、Docker1.1 创建一个Node服务image1.2 volume1.3 网络1.4 docker compose 二、K8S2.1 集群组成2.2 Pod1. 如何使用Pod(1) 运行一个pod(2) 运行多个pod 2.3 pod的生命周期2.4 pod中的容器1. 容器的生命周期2. 生命周期的回调3. 容器重启策略4. 自定义容器启…...

新年快乐!给大家带来了一份 python 烟花代码!

大家好&#xff0c;我是菲英。 今天带来一份 python 代码&#xff0c;是简易的烟花小程序。 安装包 pip install pygame进入正题 - 我们的烟花代码&#xff1a; import pygame import random import math# 初始化pygame pygame.init()# 设置屏幕大小和标题 screen pygame.…...

iperf 测 TCP 和 UDP 网络吞吐量

注&#xff1a;本文为 “iperf 测网络吞吐量” 相关文章合辑。 未整理去重。 使用 iperf3 监测网络吞吐量 Tom 王 2019-12-21 22:23:52 一 iperf3 介绍 (1.1) iperf3 是一个网络带宽测试工具&#xff0c;iperf3 可以擦拭 TCP 和 UDP 带宽质量。iperf3 可以测量最大 TCP 带宽…...

(1)Linux高级命令简介

Linux高级命令简介 在安装好linux环境以后第一件事情就是去学习一些linux的基本指令&#xff0c;我在这里用的是CentOS7作演示。 首先在VirtualBox上装好Linux以后&#xff0c;启动我们的linux&#xff0c;输入账号密码以后学习第一个指令 简介 Linux高级命令简介ip addrtou…...

LeetCode:96.不同的二叉搜索树

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;96.不同的二叉搜索树 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉…...

Linux学习笔记——用户管理

一、用户管理命令 useradd #用户增加命令 usermod #用户修改命令 passwd #密码修改命令 userdel #用户删除命令 su #用户提权命令 1、useradd命令&#xff08;加用户&#xff09;&#xff1a; 创建并设置用户信息&#xff0c;使用us…...

Baklib揭示内容中台与人工智能技术的创新协同效应

内容概要 在当今信息爆炸的时代&#xff0c;内容的高效生产与分发已成为各行业竞争的关键。内容中台与人工智能技术的结合&#xff0c;为企业提供了一种新颖的解决方案&#xff0c;使得内容创造的流程更加智能化和高效化。 内容中台作为信息流动的核心&#xff0c;能够集中管…...

FreeRTOS从入门到精通 第十四章(队列集)

参考教程&#xff1a;【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、队列集简介 1、队列集概述 &#xff08;1&#xff09;一个队列只允许任务间传递的消息为同一种数据类型&#xff0c;如果需要在任务间传递不同数据类型的消息时&#xff0c;那么就可以…...

Python实现U盘数据自动拷贝

功能&#xff1a;当电脑上有U盘插入时&#xff0c;自动复制U盘内的所有内容 主要特点&#xff1a; 1、使用PyQt5创建图形界面&#xff0c;但默认隐藏 2、通过CtrlAltU组合键可以显示/隐藏界面 3、自动添加到Windows启动项 4、监控USB设备插入 5、按修改时间排序复制文件 6、静…...

Vue.js 什么是 Composition API?

Vue.js 什么是 Composition API&#xff1f; 今天我们来聊聊 Vue 3 引入的一个重要特性&#xff1a;组合式 API&#xff08;Composition API&#xff09;。如果你曾在开发复杂的 Vue 组件时感到代码难以维护&#xff0c;那么组合式 API 可能正是你需要的工具。 什么是组合式 …...

关于产品和技术架构的思索

技术架构或者设计应该和产品设计分离&#xff0c;但是又不应该和产品架构独立。 听起来非常的绕并且难以理解。 下面我们用一个例子来解读这两者的关系 产品&#xff08;族谱图&#xff09; 如果把人类当作产品&#xff0c;那设计师应该是按照上面设计的(当然是正常的伦理道德)…...

Python设计模式 - 组合模式

定义 组合模式&#xff08;Composite Pattern&#xff09; 是一种结构型设计模式&#xff0c;主要意图是将对象组织成树形结构以表示"部分-整体"的层次结构。这种模式能够使客户端统一对待单个对象和组合对象&#xff0c;从而简化了客户端代码。 组合模式有透明组合…...

蓝桥杯模拟算法:蛇形方阵

P5731 【深基5.习6】蛇形方阵 - 洛谷 | 计算机科学教育新生态 我们只要定义两个方向向量数组&#xff0c;这种问题就可以迎刃而解了 比如我们是4的话&#xff0c;我们从左向右开始存&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4 到5的时候y就大于4了就是越界了&…...

24_游戏启动逻辑梳理总结

首先这个项目从游戏根入口GameRoot.cs的初始化开始 分为 服务层初始化Svc.cs 与 业务系统层初始化Sys.cs 而服务层 分为 资源加载服务层ResSvc.cs 与 音乐播放服务层AudioSvc.cs 而在 资源加载服务层ResSvc.cs中 初始化了 名字的 配置文件 而音乐播放服务层AudioSvc.cs 暂时没…...

TikTok 推出了一款 IDE,用于快速构建 AI 应用

字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…...

如何运用python爬虫爬取百度贴吧动态加载的图片?

动态加载的图片通常是在页面加载后通过JavaScript异步请求获取的&#xff0c;而requests和BeautifulSoup只能获取页面的初始HTML内容&#xff0c;无法执行JavaScript代码。 要处理动态加载的图片&#xff0c;可以使用以下方法&#xff1a; 1. 使用Selenium Selenium是一个用…...

在Rust应用中访问.ini格式的配置文件

在Rust应用中访问.ini格式的配置文件&#xff0c;你可以使用第三方库&#xff0c;比如 ini 或 config. 下面是一个使用 ini 库的示例&#xff0c;该库允许你读取和解析.ini文件。 使用 ini 库 添加依赖 首先&#xff0c;你需要在你的 Cargo.toml 文件中添加 ini 库的依赖&am…...

Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Van-Nav是一个基于Vue.js开发的导航组件库&#xff0c;它提供了多种预设的样式和灵活的配置选项&#xff0c;使得开发者可以轻松地定制出符合项目需求…...

【某大厂一面】Map和Set区别

在 Java 中&#xff0c;Map 和 Set 都是集合框架中的重要接口&#xff0c;它们具有不同的特性和用途。虽然它们都用于存储一组元素&#xff0c;但它们之间有一些重要的区别。下面将详细介绍它们之间的差异。 1. Set 和 Map 的基本定义 Set 是一个集合接口&#xff0c;它用于存…...

Vue.js组件开发-使用Vue3如何实现上传word作为打印模版

使用Vue 3实现Word模板上传、解析和打印功能的完整解决方案&#xff1a; 一、实现步骤 安装依赖创建文件上传组件实现.docx文件解析创建打印预览组件实现打印功能样式优化 二、完整代码实现 1. 安装依赖 npm install mammoth axios2. 创建文件上传组件&#xff08;FileUploa…...

Consul持久化配置报错1067---consul_start

报错都是文件写的有问题或者格式问题&#xff0c;直接复制我的这个改改地址就行 先创建文本文件consul_start.txt--->再复制代码保存---->再把.txt改成.bat 持久化存储的地址在&#xff1a;mydata 注&#xff1a;D:\consul\consul_1.20.2_windows_386改成自己consul的…...

动态规划DP 最长上升子序列模型 总览

最长上升子序列模型 最长上升子序列 怪盗基德的滑翔伞...

如何解压7z文件?8种方法(Win/Mac/手机/网页端)

7z 文件是一种高效的压缩文件格式&#xff0c;由 7 - Zip 软件开发者所采用。它运用独特的压缩算法&#xff0c;能显著缩小文件体积&#xff0c;便于存储与传输各类数据&#xff0c;像软件安装包、大型资料集等。但要使用其中内容&#xff0c;就必须解压&#xff0c;因为处于压…...

2023年吉林省职业院校技能大赛网络系统管理样题-网络配置(华三代码)

目录 附录1:拓扑图 附录2:地址规划表 1.S1 2.S3 3.S4 4.S5 5.S7 6.S8 7.S9 8.R1 9.R2 10.R3 11.EG1 12.EG2 13.AC1 14.AC2 附录1:拓扑图 编号 型号...

Flutter使用Flavor实现切换环境和多渠道打包

在Android开发中通常我们使用flavor进行多渠道打包&#xff0c;flutter开发中同样有这种方式&#xff0c;不过需要在原生中配置 具体方案其实flutter官网个了相关示例&#xff08;https://docs.flutter.dev/deployment/flavors&#xff09;,我这里记录一下自己的操作 Android …...

【linux三剑客】grep练习题

题目 进入/lianxi目录&#xff0c;复制/etc/passwd到当前目录下&#xff0c;然后对passwd进行操作查找出当前passwd文件中以ftp或者mail开头的行&#xff0c;在屏幕上输出。查找出当前passwd文件中有没有以r、m、f开头的行&#xff0c;在屏幕上输出。查找出当前passwd文件中以…...

冬天适合养什么鱼?

各位鱼友们&#xff0c;冬天来了&#xff0c;是不是还在为养什么鱼而烦恼&#xff1f;别担心&#xff0c;今天就来给大家好好推荐一些适合冬天养的鱼&#xff0c;让你的水族箱在寒冷的冬天也能生机勃勃&#xff01; 一、金鱼&#xff1a;冬日里的“小暖男” 金鱼绝对是冬季养鱼…...

Effective C++ 规则43:学习处理模板化基类内的名称

1、背景 在 C 中&#xff0c;模板化基类为我们提供了强大的灵活性。然而&#xff0c;模板化基类的名称查找却经常会引发困惑&#xff0c;甚至导致编译错误。这是因为模板的名称查找规则与普通类不同。在普通类中&#xff0c;派生类可以直接访问基类的成员变量和成员函数&#…...

DeepSeek R1 linux云部署

云平台&#xff1a;AutoDL 模型加载工具&#xff1a;Ollama 参考&#xff1a;https://github.com/ollama/ollama/blob/main/docs/linux.md 下载Ollama 服务器上下载ollama比较慢&#xff0c;因此我使用浏览器先下载到本地电脑上。 https://ollama.com/download/ollama-linux…...

混合专家模型MoE的全面详解

什么是混合专家&#xff08;MoE&#xff09;&#xff1f; 混合专家&#xff08;MoE&#xff09;是一种利用多个不同的子模型&#xff08;或称为“专家”&#xff09;来提升LLM质量的技术。 MoE的两个主要组成部分是&#xff1a; 专家&#xff1a;每个前馈神经网络&#xff08…...

vue3相关知识点

title: vue_1 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端vue3 Webpack ~ vite vue3是基于vite创建的 vite 更快一点 一些准备工作 准备后如图所示 插件 Main.ts // 引入createApp用于创建应用 import {createApp} from vue // 引入App根组件 import App f…...

【2025美赛D题】为更美好的城市绘制路线图建模|建模过程+完整代码论文全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的美赛O奖、国赛国一的数学建模团队&#xff0c;我们将为你带来本次数学建模竞赛的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解析&#xff0c…...

games101-(5/6)

光栅化 投影完成之后&#xff0c;视图区域被确定在从[-1,1]的单位矩阵中&#xff0c;下一步就是光栅化 长宽比&#xff1a;ratio 垂直的可视角度&#xff1a;fild-of-view 可以看到的y 轴的范围&#xff0c;角度越小 越接近正交投影 屏幕坐标系 、 将多边形转化成像素 显示…...

UE5.3 C++ CDO的初步理解

一.UObject UObject是所有对象的基类&#xff0c;往上还有UObjectBaseUtility。 注释&#xff1a;所有虚幻引擎对象的基类。对象的类型由基于 UClass 类来定义。 这为创建和使用UObject的对象提供了 函数&#xff0c;并且提供了应在子类中重写的虚函数。 /** * The base cla…...

前端——js高级25.1.27

复习&#xff1a;对象 问题一&#xff1a; 多个数据的封装提 一个对象对应现实中的一个事物 问题二&#xff1a; 统一管理多个数据 问题三&#xff1a; 属性&#xff1a;组成&#xff1a;属性名属性值 &#xff08;属性名为字符串&#xff0c;属性值任意&#xff09; 方…...

Python 魔术方法

1. 什么是魔术方法 在 Python 中&#xff0c;魔术方法&#xff08;Magic Methods&#xff09;&#xff0c;又叫 特殊方法 或 双下方法&#xff0c;是以两个下划线&#xff08;__&#xff09;开头和结尾的方法。 这些方法为 Python 提供了对类和对象的特殊操作功能&#xff0c…...

websocket webworker教程及应用

WebSocket 和 Web Workers 是两种不同的 Web 技术&#xff0c;分别用于实现实时通信和后台线程处理。以下是它们的简要教程&#xff1a; WebSocket 教程 1. 什么是 WebSocket&#xff1f; WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许服务器主动向客户端推…...

qwen2.5-vl:阿里开源超强多模态大模型(包含使用方法、微调方法介绍)

1.简介 在 Qwen2-VL 发布后的五个月里&#xff0c;众多开发者基于该视觉语言模型开发了新的模型&#xff0c;并向 Qwen 团队提供了极具价值的反馈。在此期间&#xff0c;Qwen 团队始终致力于打造更具实用性的视觉语言模型。今天&#xff0c;Qwen 家族的最新成员——Qwen2.5-VL…...

PaddleSeg 从配置文件和模型 URL 自动化运行预测任务

git clone https://github.com/PaddlePaddle/PaddleSeg.git# 在ipynb里面运行 cd PaddleSegimport sys sys.path.append(/home/aistudio/work/PaddleSeg)import os# 配置文件夹路径 folder_path "/home/aistudio/work/PaddleSeg/configs"# 遍历文件夹&#xff0c;寻…...

Java实战项目-基于 springboot 的校园选课小程序(附源码,部署,文档)

Java 基于 springboot 的校园选课小程序 博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&…...

网络工程师 (7)进程管理

一、进程相关的概念 &#xff08;一&#xff09;定义 进程&#xff08;Process&#xff09;是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;也是操作系统结构的基础。进程是程序的一次执行实例&#xff0c;具有动…...

大屏 UI 设计风格的未来趋势

在科技飞速革新的时代&#xff0c;大屏设备的应用领域不断拓展&#xff0c;从城市的智能交通指挥中心&#xff0c;到商场的互动广告大屏&#xff0c;再到家庭的超大尺寸智能电视&#xff0c;大屏已然成为信息展示与交互的关键载体。大屏 UI 设计风格也随之不断演变&#xff0c;…...

Kmesh v1.0 正式发布

2025 年 1 月 23 日&#xff0c;Kmesh 团队正式发布了 Kmesh v1.0235。Kmesh 作为一款开源的服务网格解决方案&#xff0c;v1.0 版本在网络流量管理领域引入了多项重磅特性2。具体如下134&#xff1a; IPsec 加密通信&#xff1a;引入 IPsec 加密协议&#xff0c;将节点间流量加…...

低代码系统-产品架构案例介绍、轻流(九)

轻流低代码产品定位为零代码产品&#xff0c;试图通过搭建来降低企业成本&#xff0c;提升业务上线效率。 依旧是从下至上&#xff0c;从左至右的顺序 名词概述运维层底层系统运维层&#xff0c;例如上线、部署等基础服务体系内置的系统能力&#xff0c;发消息、组织和权限是必…...

深入理解动态规划(dp)--(提前要对dfs有了解)

前言&#xff1a;对于动态规划&#xff1a;该算法思维是在dfs基础上演化发展来的&#xff0c;所以我不想讲的是看到一个题怎样直接用动态规划来解决&#xff0c;而是说先用dfs搜索&#xff0c;一步步优化&#xff0c;这个过程叫做动态规划。&#xff08;该文章教你怎样一步步的…...