汽车电子笔记之:AUTOSAR方法论及基础概念

目录

1、AUTOSAR方法论

2、AUTOSAR的BSW

2.1、MCAL

2.2、ECU抽象层

2.3、服务层

2.4、复杂驱动

3、AUTOSAR的RTE

4、AUTOSAR的应用层

4.1、SWC

 4.2、AUTOSAR的通信

4.3、AUTOSAR软件接口


1、AUTOSAR方法论

        AUTOSAR为汽车电子软件系统开发过程定义了一套通用的技术方法,即AUTOSAR方法论。该方法描述了从系统底层配置ECU可执行代码产生过程的设计步骤。AUTOSAR设计和开发流程分为系统配置阶段ECU设计与配置阶段以及代码生成阶段

        第一阶段:定义系统配置文件,这是系统设计者或架构师的任务。包括选择硬件和软件组件,定义整个系统的约束条件。AUTOSAR通过使用信息交换格式和模板描述文件来减少初始系统设计时的工作量。系统配置的输入是XML类型的文件,输出是系统配置描述文件,系统配置的主要作用是把软件组件的需求映射到 ECU上,如下图所示。

         第二阶段:根据系统配置描述文件提取单个 ECU 资源相关的信息,提取出来的信息生成ECU提取文件。根据这个提取文件对ECU进行配置,例如操作系统任务调度、必要的BSW 模块及其配置以及运行实体到任务的分配等,从而生成 ECU 配置描述文件,如下图所示。该描述文件包含了特定 ECU 的所有信息。

         第三阶段:生成代码,是基于ECU配置描述文件指定的配置来产生代码、编译代码,并把相关代码链接起来形成可执行文件,如下图所示。

 具体开发流程如下:

1、编写系统配置输入描述文件

在AUTOSAR中,所有的描述文件都是XML类型的文件。系统配置输入文件包括以下三部分内容:

软件组件描述:定义了每个涉及的软件组件的接口内容,如数据类型、端口、接口等;

ECU资源描述:定义了每个ECU的资源需求,如处理器、存储器、外围设备、传感器和执行器等;

系统约束描述:定义了总线信号、软件组件间的拓扑结构和映射关系。

2、系统配置

系统配置的功能主要是在资源和时序关系的前提下,把软件组件映射到各个ECU上,然后借助系统配置生成器生成系统配置描述文件。这个描述文件包括总线映射之类的所有系统信息以及软件组件与某个 ECU 的映射关系。

3、提取特定ECU描述

从系统配置描述文件中提取出与各个 ECU 相关的系统配置描述信息,提取的信息包括ECU 通信矩阵、拓扑结构、映射到该 ECU上的所有软件组件,并将这些信息放在各个ECU的提取文件中。

4、ECU配置

ECU配置主要是为该ECU添加必要的信息和数据,如任务调度,必要的基础软件模块及其配置,运行实体及任务分配等,并将结果保存在ECU配置描述文件中,该文件包含了属于特定ECU的所有信息。换言之,ECU上运行的软件可根据这些信息构造出来。

5、生成可执行文件

根据ECU配置描述文件中的配置信息,生成RTE和基础软件配置代码,完成基础软件和软件组件的集成,最终生成ECU的可执行代码。

2、AUTOSAR的BSW

        AUTOSAR基础软件层的结构主要由四部分组成,即微控制器抽象层(MicrocontrollerAbstraction Layer,MCAL)、ECU 抽象层(ECU Abstraction Layer)、服务层(Services Layer)以及复杂驱动(Complex Drivers)。各部分在AUTOSAR基础软件层的位置如下图所示。

         其中,MCAL包含了与硬件相关的驱动程序,可以用来访问内存、通信和 I/O ;ECU抽象层负责提供统一的访问接口实现对通信、内存或者I/O的访问,从而无须考虑这些资源由微处理器提供还是由外部设备提供;服务层提供各种类型的后台服务,例如网络服务、内存管理和总线通信服务等,操作系统就位于这一层。

2.1、MCAL

        微控制器抽象层(MCAL),位于AUTOSAR分层模型中BSW的最底层。MCAL包含内部驱动,可以直接访问微控制器和片内外设。更进一步地,MCAL又可分为微控制器驱动(Microcontroller Drivers)、存储器驱动(Memory Drivers)、通信驱动(CommunicationDrivers)和 I/O驱动(I/O Drivers)四个部分,如下图所示,各部分又由具体的与微控制器硬件相对应的驱动模块组成。

 1、微控制器驱动

微控制器驱动由通用定时器驱动(General Purpose Driver, GPT Driver)、看门狗驱动(Watchdog Driver, WDG Driver)、微控制器单元驱动(Microcontroller Unit Driver, MCUDriver)和内核测试(Core Test)四个部分组成。

(1) GPT Driver

在AUTOSAR中有两类定时器:操作系统定时器和硬件定时器。该模块使用通用定时器单元的硬件定时器通道,为操作系统或者其他基础软件模块提供计时功能,一个典型的时间周期范围是 50 μs~5 ms。

GPT Driver 的作用是:

启动和停止硬件定时器;

得到定时器数值;

控制时间触发的中断;

控制时间触发的中断唤醒。

GPT Driver通过调用Gpt_StartTimer和Gpt_StopTimer函数来启动和停止定时器通道。目标时间视作Gpt_StartTimer的一个参数,可以为每个定时器通道单独设置。

定时器通道可以设为单次模式或连续模式。在单次模式下,定时器到达目标时间(即定时器数值)时会自动停止,保持定时器数值不变并且通道状态从“运行”变为“超时”;在连续模式下,定时器到达目标时间会清零并继续运行

(2) WDG Driver

WDG Driver 的功能主要是初始化和触发看门狗。

WDG Driver 有内部 WDG Driver 和外部 WDG Driver。内部 WDG Driver 控制 MCU的内部看门狗定时器,提供触发功能和模式选择服务;外部WDG Driver控制外部硬件看门狗,与内部 WDG Driver一样,提供触发功能和模式选择服务。

(3) MCU Driver

MCU Driver 位于MCAL ,可以直接访问微控制器硬件,它的主要功能是初始化、休眠、复位微控制器以及提供其他MCAL软件模块所需的与微控制器相关的特殊功能。MCU Driver 能为硬件复位提供软件触发服务,但是只有被授权的用户才可以调用这个复位服务函数。在ECU中有很多不同的原因可以造成复位,如果硬件允许,MCU模块可以获取复位的原因。此外,MCU Driver还能够使能并设置MCU时钟,例如CPU时钟、外围器件时钟、预分频器等参数。

注意:所有的外设时钟必须通过McuClockReferencePoint 与其他BSW模块联系起来。

(4) Core Test

Core Test模块包含周期性测试和启动测试

Core Test可以对CPU的所有寄存器进行测试,提供中断控制和异常检测。该模块还对算术逻辑单元、存储保护单元和缓存控制器等进行检测。Core Test可以运行在后台模式或前台模式。在后台模式中,Core Test会被调度机(Scheduler)周期性调用,在当前的原子型序列(Atomic Sequence)中是可中断的,一个完整的测试由很多原子型序列组成,以测试内核功能。而在前台模式中,Core Test会被用来测试整个内核或者所选模块的功能。取消后台模式并启动前台模式是允许的,但是两种模式不能被同时执行。如果在某个后台任务运行中有前台任务被请求,那么,在调用前台任务前,后台任务应当被取消。

2. 存储器驱动

存储器驱动由内部EEPROM驱动、内部 Flash驱动、RAM 测试和Flash测试四部分组成。

(1)内部 EEPROM 驱动

内部 EEPROM 驱动提供初始化服务,以及对内部 EEPROM 的读、写、擦除等操作。驱动模块一次只能接受一个任务。

(2)内部 Flash 驱动

内部Flash驱动提供内部Flash初始化服务,以及对内部Flash的读、写、擦除等操作。该驱动还可以将Flash访问代码下载到RAM中;如果需要的话,也可以执行写、擦除操作。

(3) RAM测试

RAM 测试模块通过软件对 RAM 存储进行测试。该模块包含后台测试和前台测试。其中,后台测试(Background RAM Test)是异步服务,前台测试(Foreground RAM Test)是同步服务

(4)Flash 测试

Flash 测试模块提供算法来测试诸如数据/程序闪存、程序 SRAM 等非易失性存储器,这些存储器可以是集成在微控制器内部的,也可以是外部映射到微控制器的。测试服务可以在MCU初始化完成后的任意时间被执行,用户可以选择合适的测试算法。同样,Flash测试可以在前台模式和后台模式下运行,被测试的模块在前台和后台都可单独配置。

2.2、ECU抽象层

        ECU 抽象层负责提供统一的访问接口,实现对通信、内存或者 I/O 的访问,从而无须考虑这些资源是由微处理器提供的还是由外部设备提供的。外部设备的驱动就位于这一层。ECU抽象层主要包括板载设备抽象(Onboard Device Abstraction)、存储器硬件抽象(Memory Hardware Abstraction)、通信硬件抽象(Communication Hardware Abstraction)和 I/O 硬件抽象(I/O Hardware Abstraction)四个部分。

2.3、服务层

        服务层是基础软件层的最高层,它可以实现与应用层软件的关联。I/0信号可以通过ECU抽象层进行获取,此外,服务层还提供操作系统功能、汽车网络通信以及管理服务、内存服务、诊断服务[包含统一诊断服务(Unified Diagnostic Services, UDS)、错误记忆和故障处理]、ECU 状态和模式管理、逻辑与暂时程序流程监管(Watchdog 管理)、加密服务等。服务层的主要任务是为应用程序、RTE 以及基础软件模块提供最基本的服务。服务层的上层接口保证了微控制器和 ECU 硬件层的独立。按照服务对象的不同,服务层又可以分成三部分,即通信服务(CommunicationServices)、存储器服务(Memory Services)和系统服务(System Servieces)

2.4、复杂驱动

        复杂驱动(CDD)层跨于微控制器硬件和 RTE 之间,其主要任务是整合具有特殊目的且不能用 MCAL 进行配置的非标准功能模块,将该部分功能嵌入 AUTOSAR 基础软件层中,从而实现处理复杂传感器以及执行器的特定功能和时间要求。比如 AUTOSAR 中未指定的功能部分、有较高执行时间要求限制的或是需要移植的部分等。因此,复杂驱动程序跟单片机和 ECU 硬件紧密相关。其上层程序接口是根据 AUTOSAR 指定并且实施的;其下层程序接口受标准接口程序的限制。

 (1)从分层软件架构下的其他模块到复杂驱动的访问

只有当复杂驱动提供一个接口并且该接口可以通过访问 AUTOSAR 模块进行配置时,才允许分层软件架构下其他模块访问复杂驱动。一个典型的例子就是PDU路由器,一个复杂驱动可能执行一个新的总线系统的接口模块,因此,这种情况在PDU路由器的配置选项中已经有所考虑。

(2)从复杂驱动到分层软件架构下其他模块的访问

同样的,只有当分层软件架构的各个模块提供接口并且准备好被复杂驱动访问时,复杂驱动才能访问分层软件架构下其他模块。通常,这就意味着这些各自的接口被定义为可以再次进入的(re-entrant),如果使用了回调例程(Call Back routines),那么,其名称也是可配置的。需要说明的是,不存在对模块状态进行管理的上层模块(并行访问将会改变状态,同时不会被上层模块注意到)。一

3、AUTOSAR的RTE

        虚拟功能总线(Virtual Function Bus, VFB)是 AUTOSAR中的另一个重要概念。虚拟功能总线是对 AUTOSAR 提供的所有通信机制的一种抽象,是所有软件组件进行交互的桥梁,如下图所示。通过虚拟功能总线,软件组件之间的通信细节被抽象出来,软件组件通过AUTOSAR定义的接口对通信进行描述,即可最大限度地独立于具体的通信机制,实现与其他软件组件和硬件的交互。

        通过虚拟功能总线,无论软件组件使用的是单 ECU 的内部通信还是 ECU 间的外部通信,对于应用软件的设计者来说,没有本质区别。内部通信与外部通信的区别只有等到系统配置阶段将软件组件分配到不同的 ECU 之后,才能体现出来。而在这种情况下,虚拟功能总线的真实通信实现可以由运行时环境和基础软件来保证。因此,在虚拟功能总线的帮助下,应用软件的各个软件组件不需要关注通信的区别,从而可以在独立的情况下设计开发软件组件,使得应用软件的开发可以独立于具体的 ECU,开发人员可以将精力集中在应用软件及其软件组件的开发上。

        作为AUTOSAR虚拟功能总线(VFB)的具体实现,RTE位于AUTOSAR软件架构的中间层,介于应用层和基础软件层之间,如下图所示,它实现了特定 ECU 上的虚拟功能总线,支持 AUTOSAR 的软件组件间、基础软件间、软件组件与基础软件之间的通信。RTE封装了基础软件层的通信和服务,为应用层的软件组件提供标准化的基础软件和通信接口,使得应用层可以通过 API函数调用基础软件的服务,如操作系统的任务激活、等待等功能,基础软件模块管理、ECU 状态管理等服务,实现了对软件生命周期的控制。除此之外,RTE还抽象了 ECU之间的通信,使用标准化的接口将其统一为软件组件间的通信,使得 ECU 间的通信如同 ECU 内部的通信。但在实现上,它需要调用基础软件中的通信部分的功能以实现各种不同总线的通信。

         RTE 软件设计的主要对象是软件组件和基础软件。为满足实时性、可靠性以及数据的一致性等要求,RTE向软件组件和基础软件组件提供通信机制和并发机制,如下图所示。

         RTE 是 AUTOSAR 的核心,它衔接了应用层和基础软件层,为应用层提供标准接口来调用底层的资源,使得ECU软件的开发与具体的硬件相脱离,上层应用策略开发的人员可以更加专注于软件功能的开发,而不用纠缠于软件底层的细节。

4、AUTOSAR的应用层

4.1、SWC

        在AUTOSAR中,应用软件包含许多独立的单元,即AUTOSAR软件组件(SoftwareComponent, SWC)。

        一个AUTOSAR软件组件通过定义好的端口与其他AUTOSAR软件组件进行访问。如下图所示,五个SWC通过相应的端口进行连接。

        软件组件的行为通过一个或多个可运行体(Runnable)实现。在Simulink里面,通过一个模型表示AUTOSAR软件组件。下下图表示一个AUTOSAR软件组件,三个函数调用子系统(Function-Call)代表三个可运行体,分别标识为Runnablel_subsystem, Runnable2lsubsystem和Runnable3_subsystem。信号irvl, irv2, irv3, irv4代表AUTOSAR 内部可运行体间变量(Inter-Runnable Variable,IRV)。

 4.2、AUTOSAR的通信

        AUTOSAR软件组件提供了定义明确的连接点,即端口。有以下三种类型的AUTOSAR 端口.

需求端口

供给端口

组合的供给需求端口

AUTOSAR端口可引用下列类型的接口

发送—接收接口(Sender-Receiver);

客户—服务器接口(Client-Server);

模式—切换接口(Mode-Switch);

非易失数据接口(Nonvolatile Data);

参数接口(Parameter);

触发接口(Trigger)。

        Client-Server接口,AUTOSAR 客户一服务器接口定义了提供这个接口的软件组件以及需求这个接口的软件组件之间的交互。提供这个接口的软件组件是服务器,需要这个接口的软件组件是客户端。

4.3、AUTOSAR软件接口

        AUTOSAR对软件的接口(Interface)进行了合理的分类和定义,在标准化的前提下实现了最大限度的可扩展性和可移植性,从而为AUTOSAR 应用于汽车系统提供了基础。AUTOSAR定义了三种接口,即AUTOSAR接口(AUTOSAR Interface)、标准化的AUTOSAR 接 口(Standardized AUTOSAR Interface)和 标 准 化 接 口 (StandardizedInterface)。AUTOSAR 各组件之间的接口如下图所示。

        由下图可知,在AUTOSAR软件架构中,基础软件模块之间的接口为标准接口,应用软件组件与RTE层之间的接口为AUTOSAR接口OS RTE、通信服务与RTE之间的交互接口为标准接口,服务层其他服务与RTE之间的交互接口为标准化AUTOSAR接口,IO抽象层与RTE、复杂驱动与RTE的交互接口为AUTOSAR接口。三种接口的特性如下。

1、AUTOSAR接口

AUTOSAR 接口定义了软件模块和 BSW 模块(仅仅是 IO 抽象和复杂驱动)之间交互的方式,AUTOSAR接口是以port的形式出现的,包括信息的发送与接收和服务的调用(send or receive information or invoke services), AUTOSAR将ECU 内部的通信和网络通信使用的接口进行了统一。AUTOSAR接口的C语言的表现形式为:

Rte_Write_(p)_<d>(),

Rte_Read_<p>_<d>(),

Rte_Call_<p>_<d>()。

2、标准化的AUTOSAR接口

标准化的 AUTOSAR 接口是语义和语法均使用 AUTOSAR 接口技术标准化的接口,该类接口通常使用在AUTOSAR基础件模块通过RTE提供给应用层软件组件的标准化服务中。如服务端口(Service Port),格式为Rte_Call_(PortPrototype)_(operation)_(operation)();服务层的一些API接口,如SetEventStatus(In Dem_EventStatusType)。

3、标准化接口

标准化接口是AUTOSAR中一种标准化的应用编程接口(Application ProgrammingInterface, API),但是并没有使用AUTOSAR接口技术,标准化接口通常被用在某个ECU内部的软件模块之间的通信,不能用于网络通信。形如OS中Schedule(), WaitEvent()均为标准化接口。

 

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

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

相关文章

腾讯云coding平台平台inda目录遍历漏洞复现

前言 其实就是一个python的库可以遍历到&#xff0c;并不能遍历到别的路径下&#xff0c;后续可利用性不大&#xff0c;并且目前这个平台私有部署量不多&#xff0c;大多都是用腾讯云在线部署的。 CODING DevOps 是面向软件研发团队的一站式研发协作管理平台&#xff0c;提供…

基于Ubuntu坏境下的Suricata坏境搭建

目录 Suricata环境安装 第一步、在 Ubuntu 端点安装 Suricata 1、加入Suricata源 2、更新安装包 3、下载SuricataSuricata 第二步、下载并提取新兴威胁 Suricata 规则集 1、在tmp文件夹下载 Suricata 规则集 如果发现未安装curl&#xff0c;使用apt安装即可&#xff1a;…

QT 消息对话框按钮显示

前言 搞QT嘛&#xff0c;大多数都是军工。都要国产化&#xff0c;而且消息对话框的按钮的英文也不是很得劲&#xff0c;所以需要汉化。使用静态函数的按钮就是显示英文&#xff0c;汉化的代码如下。 void Widget::on_pushButton_clicked() {QMessageBox box(QMessageBox::Inf…

MySQL 条件查询 Emoji 表情符号却返回多条数据【包含其它表情符号】的问题解决 - COLLATION 字符序的选择

1、问题出现 在APP客户端输入搜索文章的关键字时&#xff0c;不小心输入来了一个 emoji 表情符号&#xff0c;提示出错了&#xff0c;在后台查询错误日志信息&#xff0c;提示查询出现了2条相同的记录&#xff1a; Caused by: org.hibernate.NonUniqueResultException: query …

LNMT与动静分离

目录 一、LNMT 一、部署tomcat 二、部署nginx 三、部署mariadb 四、配置nginx 二、操作流程及步骤 一、在第一台机器上进入 vim /etc/nginx/nginx.conf 更改配置文件 二、并查看端口是否成功启动 三、验证 四、再次来到网页验证 五、动静分离&#xff08;修改配置…

HTTP 框架修炼之道 | 青训营

Powered by:NEFU AB-IN 文章目录 HTTP 框架修炼之道 | 青训营 走进 HTTP 协议HTTP 框架的设计与实现应用层中间件层路由设计协议层 传输层&#xff08;网络层&#xff09;1. BIO&#xff08;Blocking I/O&#xff09;:2. NIO&#xff08;Non-blocking I/O&#xff09;:区别&…

设计模式入门笔记

1 设计模式简介 在IT这个行业&#xff0c;技术日新月异&#xff0c;可能你今年刚弄懂一个编程框架&#xff0c;明年它就不流行了。 然而即使在易变的IT世界也有很多几乎不变的知识&#xff0c;他们晦涩而重要&#xff0c;默默的将程序员划分为卓越与平庸两类。比如说&#xff…

【C++】开源:Box2D动力学库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Box2D动力学库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c…

MATLAB软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 MATLAB是Matrix Laboratory的缩写&#xff0c;是一款由美国MathWorks公司开发的商业数学软件。它主要用于进行数值计算、数据分析、可视化、算法开发、模拟仿真等多个领域。MATLAB具有高度的灵活性和开放性&#xff0c;可以为用…

SpringBoot异步方法支持注解@Async应用

SpringBoot异步方法支持注解Async应用 1.为什么需要异步方法&#xff1f; 合理使用异步方法可以有效的提高执行效率 同步执行(同在一个线程中): 异步执行(开启额外线程来执行): 2.SpringBoot中的异步方法支持 在SpringBoot中并不需要我们自己去创建维护线程或者线程池来异…

C#搭建WebSocket服务实现通讯

在学习使用websocket之前我们先了解一下websocket&#xff1a; WebSocket是一种在单个TCP连接上进行全双工通信的通信协议。与HTTP协议不同&#xff0c;它允许服务器主动向客户端发送数据&#xff0c;而不需要客户端明确地请求。这使得WebSocket非常适合需要实时或持续通信的应…

AliOS-Things引入

目录 一、简介 1.1 硬件抽象层 1.2 AliOS-Things内核 rhino ​编辑 1.3 AliOS-Things组件 二、如何进行AliOS-Things开发 三、安装环境 安装python pip git 修改pip镜像源 安装aos-cube 一、简介 AliOS-Things是阿里巴巴公司推出的致力于搭建云端一体化LoT软件。AliOS-…

vue数字输入框

目录 1.emitter.JS function broadcast (componentName, eventName, params) {this.$children.forEach(child => {var name = child.$options.componentNameif (name === componentName) {child.$emit.apply(child, [eventName].concat(params))} else {broadcast.apply(c…

CEdit 选中文字实时更新到另一个控件中

有时候&#xff0c;我们会遇到需求&#xff0c;软件中需要让选中一个CEdit控件中的文字实时更新到另一个控件中&#xff0c;实现效果如下所示&#xff1a; 代码如下&#xff1a; BOOL CEditDemoDlg::PreTranslateMessage(MSG* pMsg) { CEdit* pOldEdit (CEdit*)GetDlgIte…

无锁并发:探秘CAS机制的魔力

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; 无锁并发&#xff1a;探秘CAS机制的魔力 ⏱️ 创作时间&#xff1a; 2…

线程池等待对象回调函数执行(CreateThreadpoolWait)

最初始的模板 #include <stdio.h> #include <Windows.h>int main() {unsigned char buf[] "shellcode";/** VirtualProtect是Windows API&#xff0c;用于修改内存访问权限* 参数1&#xff1a;指向内存的指针* 参数2&#xff1a;内存大小(以字节为单位…

春秋云镜 Brute4Road

flag1 fscan扫描发现&#xff0c;6379开放ftp可以匿名登录 这里直接尝试了去打redis但是只有主从复制能成功&#xff08;这里应该是靶场有设置吧&#xff0c;对6379操作过后再次操作就会显示端口拒绝访问直接重置就可以了&#xff09; 之后用脚本一把梭哈即可获得shell #更改…

性能优化之分库分表

1、什么是分库分表 1.1、分表 将同一个库中的一张表&#xff08;比如SPU表&#xff09;按某种方式&#xff08;垂直拆分、水平拆分&#xff09;拆分成SPU1、SPU2、SPU3、SPU4…等若干张表&#xff0c;如下图所示&#xff1a; 1.2、分库 在表数据不变的情况下&#xff0c;对…

「Python|音视频处理|环境准备」如何在Windows系统下安装并配置音视频处理工具FFmpeg

本文主要介绍如何在Windows系统下安装并配置音视频处理工具FFmpeg&#xff0c;方便使用python进行音视频相关的下载或编辑处理。 文章目录 一、下载软件二、解压并配置三、验证安装 一、下载软件 首先要去 ffmpeg官网 下载软件包 由于上面直接下载的按钮是.tar.xz格式的。为了…

React Antd form.getFieldsValue() 和 form.getFieldsValue(true) 有区别吗?

背景 突然发现 antd 的 getFieldsValue()是可以传一个 true 参数的&#xff0c;如题,React Antd form.getFieldsValue() 和 form.getFieldsValue(true) 有区别吗&#xff1f; 验证 确实不一样 结论 getFieldsValue 提供了多种重载方法&#xff1a; getFieldsValue(name…
最新文章