电子电气架构---智能计算架构和SOA应用
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。
老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:
屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。
无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。
时间不知不觉中,快要来到深秋。国庆假期结束,又开始新的忙碌。成年人的我也不知道去哪里渡自己的灵魂,独自敲击一些文字算是对这段时间做一个记录。
一、车载智能计算基础平台参考架构
车载计算基础平台侧重于系统可靠、运行实时、分布弹性、高算力等特点,实现感知、规划、控制、网联、云控等功能,最终完成安全、实时、可扩展的多等级自动驾驶核心功能。如图所示,车载计算平台的总体架构主要包含车控操作系统和异构分布硬件架构两部分。其中,运行于车载智能计算基础平台硬件及汽车电子控制单元硬件之上,支撑智能网联汽车驾驶自动化功能实现和安全可靠运行的软件集合,架构上包括系统软件和功能软件。
车载计算平台的总体架构
车载计算平台的总体架构确实主要包含两大部分:车控操作系统和异构分布硬件架构。这两部分紧密协作,共同支持智能网联汽车的各项功能。
1. 异构分布硬件架构
异构分布硬件架构是车载计算平台的基础,它通常由多种不同类型的硬件组件组成,包括但不限于:
-> 高性能处理器:用于处理复杂的计算任务,如图像识别、路径规划等。
-> 专用集成电路(ASIC):针对特定任务进行优化,如深度学习加速、传感器数据处理等。
-> 现场可编程门阵列(FPGA):提供灵活的硬件配置,可根据需求进行编程和重构。
-> 通信模块:支持车辆与外部环境(如V2X通信)、云服务器和其他车辆之间的数据传输。
-> 存储设备:用于存储操作系统、应用程序、数据日志等。
这些硬件组件通过高速总线或网络相互连接,形成一个分布式计算系统,能够高效地处理各种任务。
2. 车控操作系统
车控操作系统是运行在硬件之上的软件层,它负责管理和协调硬件资源,为上层应用提供稳定、可靠的运行环境。车控操作系统通常具有以下特点:
-> 高可靠性:采用冗余设计、故障检测和恢复机制等,确保系统在出现故障时仍能正常运行。
-> 实时性:能够及时处理关键任务,确保自动驾驶的实时响应。
-> 安全性:通过安全认证、数据加密、访问控制等手段,保护系统免受恶意攻击和数据泄露。
-> 可扩展性:支持新功能的添加和旧功能的升级,以适应不断变化的自动驾驶需求。
车控操作系统的架构上通常包括系统软件和功能软件两部分:
-> 系统软件:包括内核、设备驱动程序、网络通信协议栈等,为上层应用提供基本的系统服务。
-> 功能软件:包括感知、规划、控制、网联、云控等自动驾驶相关的功能模块,这些模块通过调用系统服务来实现自动驾驶的各项功能。
实现的核心功能
车载计算平台通过上述架构和组件,实现了以下核心功能:
-> 感知:通过摄像头、雷达、激光雷达等传感器收集周围环境的信息。
-> 规划:根据感知信息生成安全的行驶路径和速度规划。
-> 控制:根据规划结果控制车辆的转向、加速和制动等。
-> 网联:与外部环境(如交通信号灯、其他车辆)进行通信,获取更多信息以优化行驶策略。
-> 云控:与云服务器进行数据传输和交互,实现远程监控、更新和故障诊断等功能。
这些功能的实现使得智能网联汽车能够安全、实时、可扩展地实现多等级自动驾驶。
图 1 车载智能计算基础平台架构框图
二、系统软件层
系统软件是针对汽车场景定制的复杂大规模嵌入式系统运行环境,如图所示。系统软件一般包含操作系统内核、虚拟化管理(Hypervisor)、POSIX、系统中间件及服务等。
图 2 系统软件架构
1、操作系统内核
车控操作系统内核支持异构芯片,需考虑功能安全、实时性能要求。当前异构分布硬件架构各单元所加载的内核系统功能安全等级有所不同,AI 单元内核系统 QMASILB,计算单元内核系统QMASILD,控制单元内核系统 ASILD,因而出现不同安全等级的多内核设计或单内核支持不同安全等级应用的设计。保证差异化功能安全要求的同时满足性能要求,是车控操作系统系统软件设计的关键。另外,车载智能计算基础平台的复杂性也要求内核对功能软件及应用软件的库支持和高度可编程性。
2 虚拟化管理(Hypervisor)
Hypervisor技术是实现跨平台应用、提高硬件利用率的重要途径。Hypervisor 是一种硬件虚拟化技术,管理并虚拟化硬件资源(如CPU、内存和外围设备等)并提供给运行在 Hypervisor 之上的多个内核系统。车控操作系统通过 Hypervisor 实现有效的资源整合和隔离。
3 可移植操作系统接口(POSIX)
POSIX 是被主流操作系统广泛采用和遵守的标准。基于 POSIX的应用可以方便在不同操作系统间移植。POSIX 也能够很好地适应自动驾驶所需要的高性能计算和高带宽通编程。Adaptive AUTOSAR同样采用基于 POSIX 标准的内核系统,可使用 PSE51 子集的标准POSIX API,旨在满足未来高级自动驾驶的需求。车控操作系统系统软件基于实时嵌入式软件单元架构,可借鉴 Adaptive AUTOSAR平台思路,在不同内核系统采用 POSIX API 与应用软件、功能软件交互。
4 系统中间件及服务
系统中间件位于系统软件中,主要是管理计算资源和网络通讯,并为上层应用提供基础的系统服务。其中最主要的中间件是指分布式通信服务,它主要是以发布/订阅方式为 SOA 应用之间提供数据和信息交换服务。车控操作系统可建立跨多内核、多 CPU、多板的通用、高速、高效的通讯和数据共享机制。采用发布/订阅架构的分布式中间间,强调以数据为中心,提供丰富的 QoS 策略,能保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。其中有代表性的分布式通信中间件技术规范为 DDS、SOME/IP等。
5 安全域操作系统及功能服务
安全域操作系统是系统软件层上运行在 MCU 上的实时安全车控操作系统。安全域操作系统主要包含硬件抽象层、基础软件、实时操作系统内核和运行时环境等模块。安全域操作系统最基本的要求是高实时性。系统具备硬实时特性,需要在规定时间内完成资源分配、任务并发、同步等指定动作,可参考 CP 软件架构。
三、功能软件层
功能软件是车控操作系统根据面向服务的架构设计理念,通过提取智能驾驶核心共性需求,形成智能驾驶各共性服务功能模块,高效实现驾驶自动化功能开发的软件模块。如图 12 所示,功能软件由应用软件接口、智能驾驶通用模型、功能软件通用框架,以及数据抽象组成。
图 3 功能软件架构
1 应用软件接口
车辆应用建立在功能软件基础上,功能软件通过统一应用软件接口为应用软件提供调用和服务。应用软件的开发和运行可以不依赖具体传感器和车型。不同的市场参与方(包括政府主管机构、主机厂、供应商、高速路或停车场等交通设施管理者和个人)都可以开发应用。应用可以被打包、部署、启动、调度和升级。应用程序的功能可通过用户、路端以及云端来定义,并通过应用场景触发。借助功能软件层的支撑,应用程序的开发将向轻量化方向发展,越来越聚焦在业务逻辑本身所决定的规则制定上。
应用程序构建在更为抽象的环境模型、车辆模型、任务模型和资源模型之上,相比功能软件有更好的可移植性,能够跨车型、跨计算平台部署。和功能软件相比,应用程序更侧重于业务而不是功能,更偏向用户侧而不是系统侧,更关注目标而非方法。应用程序可以构建在功能软件所提供的服务上,也可以直接构建在环境和车辆模型上。
应用程序接口不仅涉及到应用程序的运行,还应涉及应用的开发和管理类接口。系统软件供应商应该为应用软件开发提供统一的开发环境和工具,可以体现给用户不同形式的 SDK,例如环境模型、功能配置、各种算法 SDK 以及包括应用开发所必要的工具链、软件包、开发接口、开发文档、示范应用和配置等。
2 智能驾驶通用模型
智能驾驶通用模型是对智能驾驶中智能认知、智能决策和智能控制等过程的模型化抽象。智能驾驶通用模型由环境模型、规划模型、以及控制模型组成。
环境模型作为智能认知框架,为智能决策和智能控制提供模型化的广义环境信息描述。环境模型调度各类感知、融合和定位算法,对传感器探测信息,车-路、车-车协同信息,以及高精地图先验信息进行处理加工,提供探测、特性、对象、态势、场景等各级语义的道路交通环境和自车状态信息。
规划模型根据环境模型、自车定位、个性化设置和自车状态反馈等信息,为自车提供未来一段时间内的行驶轨迹,主要分为行为预测、行为决策和运动规划三大部分。行为预测是根据感知和地图数据对其他交通参与者未来的行驶轨迹进行预测,为行为决策提供更全面、可靠的参考信息;行为决策为自车提供行为策略,同时为运动规划提供相应的规划约束条件,保证规划结果不仅满足交通法规等硬性要求,同时更加符合人的驾驶策略;运动规划根据以上信息,为自车规划未来一段时间内的安全、舒适、正确的轨迹。
控制模型主要由常规工况和降级工况组成,其中常规工况主要针对 ODD 以内的动态驾驶任务,降级工况主要针对发生系统性失效或者超出 ODD 以外的动态驾驶任务,均需要进行输入处理、状态决策、控制计算及执行输出等。针对上游及底盘信息的输入,以及控制输出均需要适配层去匹配不同的功能算法框架平台及车辆平台;针对横纵向及紧急控制等算法模块需要进行故障诊断、配置及标定接口模块统一管理。
3 功能软件通用框架
功能软件通用框架是承载智能驾驶通用模型的基础,分为数据流框架和基础服务两部分。
数据流框架向下封装不同的智能驾驶系统软件和中间件服务,向智能驾驶通用模型中的算法提供与底层系统软件解耦的算法框架。数据流框架的主要作用是对智能驾驶通用模型中的算法进行抽象、部署、驱动,解决跨域、跨平台部署和计算的问题。
基础服务是功能软件层共用的基本服务,其主要服务于智能驾驶通用模型或功能应用,但其本身不局限于智能驾驶。基础服务平台包含可靠冗余组件、信息安全服务、网联云控服务,其中可靠冗余组件将系统中其它所有软件和硬件模块都抽象为被管理实体,通过与所有被管理实体的交互,完成对整个系统的监测和故障处理;信息安全基础服务中的数据安全服务为车端数据定义了数据类型和安全等级,为车端功能和应用所需不同类型数据在不同车辆运行场景下制定安全策略和数据处理规则。数据流框架上的算法部署和数据流编排模块,按规则定义控制算法部署和数据交换。网联云控服务可提供操作系统的安全冗余信息、超视距信息和通用模型的信息,通过 LTE-V2X、4G/5G 的通讯方式,实现与车车通讯、车云通讯、车人通讯和车与路侧基础设施通讯。
4 数据抽象
数据抽象通过对传感器、执行器、自车状态、地图以及来自云端的接口等数据进行标准化处理,为上层的智能驾驶通用模型提供各种不同的数据源,进而建立异构硬件数据抽象,达到功能和应用开发与底层硬件的解耦。
02车载智能计算基础平台 SOA 核心架构
SOA 的设计思想是将应用程序分解为特定的功能组件或服务,并且独立于硬件、操作系统,通过标准化协议和应用程序接口(API)进行访问。这些服务设计应该可以被共享而不是受限于特定的硬件和车型。
与云相关的某些组件或服务在设计时应考虑可以运行在本地计算机(计算平台)或分布式联网计算机群(边缘云或中心云服务器)上,在应用和服务组件的设计中可远程访问并独立更新。
而计算平台底层系统和基础软件设计需要为上层服务和应用提供友好而且稳定的 SOA 基础架构。主要包括以下方面:
解耦:操作系统解耦硬件平台,底层软件独立于车型、操作系统以及编程语言。内核/POSIX/中间件独立于业务逻辑,数据源解耦传感器硬件设计。
分层:整个系统应该进行分层架构设计,对系统不同层次和各个基础服务组件间界定清晰的界面,尽量采工业界认同的接口和标准,兼容车辆传统的控制器和操作系统和协议。
模块化:将基础服务软件功能分解成不同类型的一个或多个独立功能,功能间相互独立,方便构建上层应用,如数据收集、数据回传、OTA、信息安全、网联云控。智驾功能的基础服务也可以进行分解,如状态机、模式管理器、算法模块、环境模型。
抽象:对不同的感知硬件实现共性数据抽象,既隔离上次算法模块又可以实现快捷硬件匹配。
标准化:接口和数据标准化。
(一)、软硬件解耦
软硬件解耦是在软件系统和应用设计上独立于硬件设计,通过构建一个通用的软件架构对硬设备接口进行抽象化处理,来兼容不同的硬件设备。
提供传感器抽象机制,支持主流类型主流型号的传感器,对新型传感器具有扩展能力。提供丰富的硬件适配服务软件,硬件适配包括快速适配硬件平台和快速适配车辆平台两个部分,其中快速适配硬件平台又包括内核、中间件、AI、安全域几个方面,快速适配车辆平台包括传感器抽象、执行器抽象、HMI 数据接口。主要包括:
1)平台解耦和适配;
2)AI 模块移植和部署;
3)传感器抽象;
4)执行器抽象;
5)地图数据;
6)中间件适配;
7)HMI 数据;
8)核心车辆信号;
9)V2X 数据。
(二)、智驾功能的基础服务分解
在 SOA 架构设计中,对复杂应用和服务提取共性功能,分解成不同基础服务功能,目的是最大限度的从用现有模块和服务,提高开发效率。功能分解应该遵循:
1)基础服务内高内聚,服务之间低耦合;
2)低耦合服务间尽可能使用标准化的服务化界面;
3)如果某个功能模块复杂度还是很高,通过共性提取,需要继续拆分。
通过对复杂的自动驾驶功能、算法分解,形成基础模块,状态机/模式管理器、算法、环境模型,提供通用的 L0~L4 级自驾功能应用开发的组件化解决方案,支持基于组件的快速开发和验证。
主机厂基于自身策略,在设计和开发功能软件时可以选择不同的功能模块和算法组件,实现拼插式功能组合,灵活构建智能驾驶系统级解决方案。
(三)、网联云控服务
网联云控服务既提供标准的、抽象的信息服务,如红绿灯信息、交通提醒信息、安全预警信息、路侧感知信息、周边车辆行驶信息,也提供可插扩算法的能力,可以新增、转换、适配不同的云控算法和应用。网联云控模块是车内外信息通信的桥梁,车辆平台可把自车状态、行驶意图广播到周围环境中或上传到云平台,同时也可从周围环境或边缘云获得感知信息(如障碍物信息),决策规划建议,甚至运行轨迹信息。
在设计相关服务设计中,可以遵循 SOA 设计思想,使服务不依赖于平台。运行在平台上的感知算法可以融合来自云端的 V2X 道路信息,实现车路协同。车辆通过订阅云端感知和规划数据,充分利用云端的算力和多维度场景信息,实现运控应用场景。比如拥有感知设备的停车场全自动泊车。
网联云控模块可以通过对基于 SOA 架构设计思想的应用设计,无缝对接现有 V2X 场景,支持云控应用和云车协同应用。通过 5G低延时、高速率的通讯技术支持数字孪生,实现车内计算、应用向云边浮动和扩展。
(四)、信息安全服务
基于信息安全技术(详见第 7 章第五节),可以建立多种遵循SOA 架构设计的信息安全服务,如网络入侵检测,信息安全监控和预警,数据安全、主机安全监测。
在设计信息安全服务时,应该考虑用 SOA 的方法。比如信息安全监控可能运行在平台上,也可能运行在云端。基于 SOA 设计信息安全服务不依赖平台和操作系统,可以和云端的安全应用共享或无缝对接,也可以快速引入第三方信息安全服务。
(五)、系统软件
系统软件是针对汽车场景定制的复杂大规模嵌入式系统运行环境。系统软件一般包含操作系统内核、虚拟化管理(Hypervisor)、POSIX、系统中间件及服务等。通过系统软件平台集成虚拟化管理、系统内核、中间件等组件,可为上层功能软件提供一个稳定、高效、安全的 SOA 服务运行环境,以及与硬件无关的应用开发接口。
下面从系统分层设计的角度描述:
1)系统内核:隔离了平台硬件,是硬件平台移植和适配的关键。计算平台设计要尽可能兼顾主流的操作系统内核,减少平台移植和适配的代价,满足 OEM 车辆设计根据需要更换平台的需求。
2)虚拟化管理:在 EE 架构从分布式转变成集中式计算平台,采用可保障各类应用系统具备一定隔离性的 Hypervisor 技术,将成为实现高性能智能驾驶操作系统的关键。比如,针对车辆计算和实时控制域采用不同操作系统。
3)中间件:是隔离系统软件和应用服务的关键部分。特别是通讯中间件,是计算平台 SOA 的关键。通讯中间件的设计要兼顾自动驾 驶 大 量 数 据 传 递 的 需 求 (例如 DDS ) , 也 要 兼 顾 传 统 的AUTOSAR,OSEK 的要求。通讯接口应该包含实时 API,非实时异步 C-S,Restful 等。
(六)、OEM 自动驾驶应用软件 SOA 开发 SDK
自动驾驶开发 SDK 通过一系列的软件组件和工具使 OEM 能够自由选择不同的硬件与软件、算法,自行组装出自己的自动驾驶系统。特别是可以让 OEM 能够专注于构建他们的特定应用程序,满足从 L2 到 L3+自动驾驶对开发机器学习算法的要求,隔离硬件集成,消息传递、可靠的实时执行等问题。
对不同应用分类提供共性的算法集和模型(包括环境模型、规划模型、控制模型),通过应用软件接口(SDK/API)支撑应用开发者实现高效低成本应用开发。
通过标准化的算法框架兼容多家第三方算法,通过不断丰富的算法生态为 OEM 厂商提供多种选择。
具备完整的仿真测试流程和丰富的场景库,能够支持基于 SIL、MIL、HIL 的仿真测试闭环。用户可以使用这些 SDK,参考目标车辆平台和硬件配置,支持的传感器和其他硬件类型以及所提供的数据抽象、接口服务和开发工具,实现完整的、定制化的自动驾驶应用功能开发(例如 ACC、LKS、HWA 等)。
搁笔分享完毕!
愿你我相信时间的力量
做一个长期主义者
相关文章:

电子电气架构---智能计算架构和SOA应用
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…...

Python Numpy 实现神经网络自动训练:反向传播与激活函数的应用详解
Python Numpy 实现神经网络自动训练:反向传播与激活函数的应用详解 这篇文章介绍了如何使用 Python 的 Numpy 库来实现神经网络的自动训练,重点展示了反向传播算法和激活函数的应用。反向传播是神经网络训练的核心,能够通过计算梯度来优化模…...

Apache Calcite - 基于规则的查询优化
基于规则的查询优化 基于规则的查询优化(Rule-based Query Optimization)是一种通过应用一系列预定义的规则来优化查询计划的技术。这些规则描述了如何转换关系表达式,以提高查询执行的效率。基于规则的优化器并不依赖于统计信息,…...

react学习笔记,ReactDOM,react-router-dom
react 学习 1. 下载与安装 下载 npm install -g create-react-app 安装 npx create-react-app xxx 推荐 npm init react-app xxx yarn create react-app xxx 2. 创建 react 元素 indexjs 文件 import React from "react"; import ReactDOM from "react…...

优化UVM环境(八)-整理project_common_pkg文件
书接上回: 优化UVM环境(七)-整理环境,把scoreboard拿出来放在project_common环境里 Prj_cmn_pkg.sv考虑到是后续所有文件的基础,需要引入uvm_pkg并把自身这个pkg import给后续的文件: 这里有3个注意事项&…...

【实战案例】Django框架连接并操作数据库MySQL相关API
本文相关操作基于上次操作基本请求及响应基础之上【实战案例】Django框架基础之上编写第一个Django应用之基本请求和响应 Django框架中默认会连接SQLite数据库,好处是方便无需远程连接,打包项目挪到其他环境安装一下依赖一会就跑起来,但是缺点…...

【其他】无法启动phptudy服务,提示错误2:系统找不到指定的文件
在服务中启动phpstudy服务时,提示“windows 无法启动phpstudy服务 服务(位于本地计算机上) 错误2:系统找不到指定的文件”的错误。导致错误的原因是可执行文件的路径不对,修改成正确的路径就可以了。 下面是错误的路径,会弹出错误窗口&#…...

AI驱动的支持截图或线框图快速生成网页应用的开源项目
Napkins.dev是什么 Napkins.dev是一个创新的开源项目,基于AI技术将用户的截图或线框图快速转换成可运行的网页应用程序。项目背后依托于Meta的Llama 3.1 405B大型语言模型和Llama 3.2 Vision视觉模型,结合Together.ai的推理服务,实现从视觉设…...

es集群索引是黄色
排查 GET /_cat/shards?hindex,shard,prirep,state,unassigned.reason 查询原因 发现node正常 执行重新分配 retry_failedtrue 参数告诉Elasticsearch重试那些因某种原因(如节点故障、资源不足等)而失败的分片分配。这个选项通常用来尝试再次分配那些…...

获取淘宝商品评论的方法分享-调用API接口item_review
在电商领域,商品评论是消费者了解产品、做出购买决策的重要依据。淘宝作为中国最大的电商平台之一,其商品评论系统涵盖了海量的用户反馈数据。为了帮助企业、电商数据分析师、市场研究人员以及普通消费者更高效地获取这些评论数据,淘宝开放平…...

MATLAB人脸考勤系统
MATLAB人脸考勤系统课题介绍 该课题为基于MATLAB平台的人脸识别系统。传统的人脸识别都是直接人头的比对,现实意义不大,没有一定的新意。该课题识别原理为:先采集待识别人员的人脸,进行训练,得到人脸特征值。测试的时…...

Spring篇(事务篇 - 基础介绍)
目录 一、JdbcTemplate(持久化技术) 1. 简介 2. 准备工作 2.1. 引入依赖坐标 2.2. 创建jdbc.properties 2.3. 配置Spring的配置文件 3. 测试 3.1. 在测试类装配 JdbcTemplate 3.2. 测试增删改功能 查询一条数据为实体类对象 查询多条数据为一个…...

qt EventFilter用途详解
一、概述 EventFilter是QObject类的一个事件过滤器,当使用installEventFilter方法为某个对象安装事件过滤器时,该对象的eventFilter函数就会被调用。通过重写eventFilter方法,开发者可以在事件处理过程中进行拦截和处理,实现对事…...

[ 钓鱼实战系列-基础篇-6 ] 一篇文章让你了解邮件服务器机制(SMTP/POP/IMAP)-1
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

wordpress伪静态规则
WordPress 伪静态规则是指将 WordPress 生成的动态 URL 转换为静态 URL 的规则,这样做可以提高网站的搜索引擎优化(SEO)效果,并且使得 URL 更加美观、易于记忆。伪静态规则通常需要在服务器的配置文件中设置,不同的服务器环境配置方法有所不同…...

缓存框架JetCache源码解析-缓存定时刷新
作为一个缓存框架,JetCache支持多级缓存,也就是本地缓存和远程缓存,但是不管是使用着两者中的哪一个或者两者都进行使用,缓存的实时性一直都是我们需要考虑的问题,通常我们为了尽可能地保证缓存的实时性,都…...

docker配置mysql8报错 ERROR 2002 (HY000)
通过docker启动的mysql,发现navicat无法连接,后来进入容器内部也是无法连接,产生以下错误 root9f3b90339a14:/var/run/mysqld# mysql -u root -p Enter password: ERROR 2002 (HY000): Cant connect to local MySQL server through socket …...

【Linux】为什么环境变量具有全局性?共享?写时拷贝优化?
环境变量表具有全局性的原因: 环境变量表之所以具有全局性的特征,主要是因为它们是在进程上下文中维护的,并且在大多数操作系统中,当一个进程创建另一个进程(即父进程创建子进程)时,子进程会继承…...

如何在Linux中找到MySQL的安装目录
前言 发布时间:2024-10-22 在日常管理和维护数据库的过程中,了解MySQL的确切安装位置对于执行配置更改、更新或者进行故障排查是非常重要的。本文将向您介绍几种在Linux环境下定位MySQL安装路径的方法。 通过命令行工具快速定位 使用 which 命令 首…...

机器人备件用在哪些领域
机器人备件,作为机器人技术的重要组成部分,被广泛应用于多个领域,以提高生产效率、降低成本、增强产品质量,并推动相关行业的智能化发展。以下是一些主要的应用领域: 制造业: 机器人备件在制造业中的应用最…...

基于单片机优先级的信号状态机设计
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、背景知识二、使用步骤1.定义相应状态和信号列表2.获取最高优先级信号3.通用状态机实现4.灯的控制函数 总结 前言 在嵌入式系统中,设备控制的灵…...

数字电路week3
数字电路学习 九.补充 1.Verilog和fpga verilog是一种描述电路的语言,出现于上世纪80年代 非:~与: &,或: |,异或: ^ fpga:一种可编程逻辑器件 FPGA 由大量的逻辑单元、查找表(LUTs)、触发…...

如何在 Linux 中对 USB 驱动器进行分区
如何在 Linux 中对 USB 驱动器进行分区 一、说明 为了在 Linux 上访问 USB 驱动器,它需要有一个或多个分区。由于 USB 驱动器通常相对较小,仅用于临时存储或轻松传输文件,因此绝大多数用户会选择只配置一个跨越整个 USB 磁盘的分区。但是&a…...

【STM32+HAL】STM32CubeMX学习目录
一、基础配置篇 【STM32HAL】微秒级延时函数汇总-CSDN博客 【STM32HAL】CUBEMX初始化配置 【STM32HAL】定时器功能小记-CSDN博客 【STM32HAL】PWM呼吸灯实现 【STM32HAL】DACDMA输出波形实现-CSDN博客 【STM32HAL】ADCDMA采集(单通道多通道)-CSDN博客 【STM32HAL】三重A…...

PPT自动化:Python如何修改PPT文字和样式!
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 使用 Python 修改 PPT 文本内容📝 遍历所有幻灯片和文本框📝 设置和修改文本样式📝 复制和保留文本样式⚓️ 相关链接 ⚓️📖 介绍 📖 在日常工作中,PPT 的文字内容和样式修改似乎是一项永无止境的…...

4:Java的介绍与基础4:for语句
4.1for循环 for循环也是一个非常重要的东西,再代码中是一个循环的作用,在python的文章中也介绍过了for循环的使用方法,其实在Java中也是一样的逻辑,但是有着不一样的表达,现在我们来讲一下关于for循环的东西。 因为循…...

R语言机器学习算法实战系列(十二)线性判别分析分类算法 (Linear Discriminant Analysis)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍LDA的原理LDA的步骤教程下载数据加载R包导入数据数据预处理数据描述数据切割构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结优点:缺…...

[LeetCode] 50. Pow(x, n)
题目描述: 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000示例 2: 输入:x 2.10000, n 3 输出…...

Vue学习笔记(七、事件修饰符 .stop .capture .self .once .prevent)
先看一段基本的代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>VueBaseCode</title><script src"./lib/vue.js"></script><style>.inner {width:…...

web网站搭建(静态)
准备工作: 关闭防火墙: [rootlocalhost ~]# systemctl disable --now firewalld 修改enforce为permissive [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# geten getenforce getent [rootlocalhost ~]# getenforce Permissive 重启服务 [rootloca…...