汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)
汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)
前面的两篇博文简述了AutoSAR CP分层架构的概念,下面我们来具体到每一层的具体内容进行讲解,每一层的每一个功能块力求用一个总览图,外加一个例子的图给大家进行详细的讲解,能够更加透彻的理解AutoSAR CP的精髓,分层即隔离,实现对硬件的解耦。
一、BSW基础软件的功能划分
1.1 按层划分
BSW基础软件层按下面四层进行划分:
(1) 服务层(Services Layer)
服务层是基础软件的顶层,类似于为大厦提供服务的“物业管理系统”。它为应用层的SWC提供标准化的服务,例如操作系统功能(如任务调度)、网络通信服务、ECU管理、内存管理、诊断服务以及逻辑和时序监控等功能。通过这些服务,应用层可以专注于业务逻辑,而不需要直接处理底层硬件。
(2) ECU抽象层(ECU Abstraction Layer)
ECU抽象层的作用类似于将大厦中的电力、电信线路等设备进行抽象,它使得软件与具体的硬件设计无关。通过调用下一层的微控制器抽象层,ECU抽象层将硬件特性(例如电压、电流、频率等)转换为高层可理解的信号(例如开/关信号)。这种抽象设计让应用软件开发者无需了解底层硬件的细节。
(3) 微控制器抽象层(Microcontroller Abstraction Layer,MCAL)
微控制器抽象层可以被比喻为大厦中的“机械室”,它直接与硬件设备相连,控制着最底层的微控制器功能(如ADC、看门狗、计时器等)。MCAL为上层提供统一的接口,无论底层使用什么型号的微控制器,上层软件看到的接口始终保持一致。通过这种抽象,当更换硬件平台时,只需调整MCAL层,而无需修改上层软件逻辑,从而大大提高了系统的移植性和灵活性。
(4) 复杂驱动层(Complex Drivers)
复杂驱动层负责为某些复杂的传感器和执行器提供特殊驱动,可以看作是大厦中为某些特殊设备提供的定制化服务。例如,对于一些复杂的应用模块(如喷油量控制、胎压监测等),由于它们可能对时序有严格要求或者难以抽象,开发者会直接将这些设备的驱动放入复杂驱动层中,使其能够直接访问硬件资源。
1.2 按功能划分
从功能上说,BSW层还可以进行纵向划分,分别为:系统服务(System Services)、存储服务(Memory Services)、加密服务(Crypto Services)、车外通信服务(Off Board Communication Services)、通信服务(Communication Services)、I/O硬件抽象(I/O Hardware Abstraction)和复杂驱动(Complex Drivers)。
在AUTOSAR基础软件(BSW)架构中,软件层划分十分精细,各种服务和模块提供了多种基础功能,支持汽车电子系统的高效运行。根据你要求的分类,下面分别介绍 系统服务、存储服务、加密服务、车外通信服务、通信服务、I/O硬件抽象和复杂驱动模块的功能与作用。
1. 系统服务 (System Services)
系统服务是基础软件中的核心部分,负责为应用层提供一些通用的操作系统支持服务和基础功能。它通常包括操作系统的基础功能、定时器管理等,确保系统能够高效且稳定运行。
主要功能:
- 操作系统管理:管理多任务、调度、时间片分配等。
- 定时器服务:提供高精度的定时器功能,用于任务调度、超时处理等。
- 事件管理:支持事件的生成、清除和处理机制,促进任务间的同步与通信。
- 中断管理:提供对硬件中断的管理和服务,支持中断的处理优先级和调度。
典型模块:
- OSAL (Operating System Abstraction Layer):为上层提供与具体操作系统解耦的接口。
- RTE (Runtime Environment):为应用软件提供操作系统与硬件平台之间的中间抽象层。
- SchM (Scheduler Manager):提供任务调度管理,确保任务按优先级和时序执行。
2. 存储服务 (Memory Services)
存储服务模块主要负责对车载系统中各类存储设备的管理和访问。它提供对非易失性存储器(如 Flash、EEPROM)以及其他存储介质(如RAM)的抽象和控制。
主要功能:
- 内存分配与管理:为应用程序提供内存分配和回收的服务,避免内存泄漏和碎片问题。
- 存储管理:管理车载系统中的永久性存储(如 Flash),进行数据持久化、数据擦除和重写等操作。
- 数据保护:保证在断电等异常情况下的数据持久性和一致性。
典型模块:
- NvM (Non-volatile memory):管理非易失性存储器(如 Flash、EEPROM)的读写操作。
- MemIf (Memory Interface):提供内存访问接口,支持不同存储类型的读写操作。
- Eeprom:处理EEPROM的存储操作,提供更高效的数据持久化方案。
3. 加密服务 (Crypto Services)
加密服务模块为车载系统提供加密、解密、数据完整性校验等安全性服务,保护系统免受外部攻击和数据篡改。
主要功能:
- 数据加密:使用对称或非对称加密算法来保护数据的机密性。
- 数据完整性校验:确保数据在存储和传输过程中不被篡改,通过哈希算法、签名等方式确保数据的完整性。
- 身份验证:为车载系统提供身份认证机制,确保不同模块和设备之间的安全通信。
典型模块:
- Crypto:加密算法库,支持常用的加密算法,如 AES、RSA、ECC 等。
- SHA:安全哈希算法模块,确保数据传输和存储的完整性。
- PKI (Public Key Infrastructure):基于公钥基础设施的数字证书管理和验证,确保系统的安全。
4. 车外通信服务 (Off Board Communication Services)
车外通信服务模块是为车载系统与外部环境(如云端、服务端等)之间的通信提供支持。它通常处理与外部设备(如智能手机、车载云服务等)的数据交互。
主要功能:
- 远程诊断:支持远程诊断请求,允许服务技术人员通过网络远程诊断车辆故障。
- 数据同步与上传:支持将车载数据上传至云平台或服务端,进行数据分析和管理。
- OTA (Over-The-Air):支持通过无线网络进行固件或软件的远程升级。
典型模块:
- UDS (Unified Diagnostic Services):为远程诊断服务提供支持。
- Telematics:支持车辆与外部云平台的通信,进行数据传输和服务请求。
- FTP/HTTP:提供文件传输协议和网络请求支持,保证车辆与外部服务间的通信。
5. 通信服务 (Communication Services)
通信服务是确保车载系统内各个模块和设备之间进行高效、可靠数据传输的关键部分。它支持不同类型的通信协议,如 CAN、LIN、FlexRay、Ethernet 等。
主要功能:
- 协议栈管理:支持多种车辆网络协议栈的实现,如 CAN、LIN、Ethernet 等。
- 网络管理:确保各通信网络的状态管理、消息调度、错误检测与恢复。
- 消息路由:为不同的通信协议提供消息路由和数据转发功能。
典型模块:
- CAN:提供控制器局域网络(CAN)协议栈支持,支持不同的通信速率、消息处理等功能。
- LIN:提供局域互联网络(LIN)协议栈支持,支持低速通信。
- Ethernet:支持车载以太网通信,提供高速数据传输支持。
- COM (Communication Manager):管理各种通信协议的传输,确保消息的可靠传递。
- PDU Router:协议数据单元路由,支持跨多个通信协议的消息传递。
6. I/O硬件抽象 (I/O Hardware Abstraction)
I/O硬件抽象层(IOAL)为上层软件提供与硬件设备的接口。它使得上层应用不需要关心具体硬件细节,可以通过统一接口与硬件交互。
主要功能:
- 硬件设备抽象:为不同类型的硬件设备提供统一的接口,隐藏具体硬件细节。
- 设备初始化与配置:初始化I/O设备,配置通信参数等。
- 驱动管理:支持外设的驱动程序管理,确保设备的正常运行。
典型模块:
- GPIO:支持通用输入输出端口的管理,控制数字信号的输入输出。
- PWM:控制脉冲宽度调制信号,调节输出信号的占空比。
- ADC/DAC:模拟数字转换器和数字模拟转换器,用于处理模拟信号。
- CAN Drivers:为 CAN 总线提供硬件抽象层,简化与硬件通信的复杂性。
7. 复杂驱动 (Complex Drivers)
复杂驱动模块通常涉及到更复杂的硬件设备和功能。它们为汽车中高端硬件(如电机控制单元、传感器、执行器等)提供专门的驱动程序。
主要功能:
- 硬件特定驱动:为复杂的硬件设备(如电机控制器、传感器)提供专用驱动。
- 实时性能要求:支持高性能的实时数据处理,满足复杂硬件的实时响应要求。
- 资源调度与管理:对硬件资源进行精细管理,确保其高效运行。
典型模块:
- Motor Control:电机控制驱动,管理电机的转速、扭矩等控制参数。
- Sensor Drivers:处理传感器输入数据,提供统一接口与传感器设备交互。
- Actuator Drivers:为执行器(如阀门、气缸等)提供驱动支持。
总结
上述模块在AUTOSAR基础软件架构中担负着各自的重要角色,提供了汽车系统中各类硬件抽象、通信协议支持、安全加密、远程通信和高效存储等关键功能。通过这种模块化的设计,AUTOSAR架构能够有效支持不同车型、不同硬件平台以及多种应用需求的灵活组合和扩展。
二、Microcontroller Abstraction Layer微控制器抽象层
AUTOSAR微控制器抽象层(MCAL,Microcontroller Abstraction Layer)是AUTOSAR架构中最底层的部分,直接与微控制器硬件资源交互。它的设计目标是屏蔽硬件差异,为上层软件提供统一、标准化的接口,使得应用开发者无需关注硬件特性,从而实现“硬件无关”的软件开发。
MCAL的核心功能
MCAL的主要功能是对微控制器的所有外设和资源(如I/O引脚、定时器、通信模块等)进行抽象化管理。它将底层的硬件功能封装成标准化的驱动接口,供上层模块(如ECU抽象层、服务层和应用层)调用,主要包括以下功能:
- 硬件资源的统一管理:
- 直接操作微控制器硬件资源(如GPIO、定时器、通信总线等)。
- 提供对硬件外设的标准化访问接口。
- 屏蔽硬件差异:
- 支持不同的微控制器型号和厂商。
- 在不同的硬件平台之间,MCAL通过配置即可实现兼容,而不需要修改上层应用。
- 提高可移植性:
- 上层模块无需关心硬件实现,可以方便地在不同平台之间移植。
- 实时性和高效性:
- 直接与硬件交互,具有高效的性能和实时响应能力。
MCAL的模块组成
MCAL由多个独立的驱动模块组成,每个模块对应一种硬件外设。以下是MCAL的主要模块及其功能:
1. 数字输入/输出驱动(DIO Driver)
- 管理和控制微控制器的数字引脚状态。
- 支持读取数字输入信号和设置数字输出信号。
- 提供高效的GPIO操作,如读取开关状态或点亮LED灯。
2. 模数转换驱动(ADC Driver)
- 负责对模拟信号进行采集和数字化。
- 通常用于传感器数据采集(如温度、电压、压力传感器等)。
- 支持多通道、多分辨率的ADC操作。
3. 脉宽调制驱动(PWM Driver)
- 生成脉宽调制(PWM)信号,用于控制执行器。
- 广泛应用于电机驱动、灯光调节等场景。
4. 定时器驱动(GPT Driver)
- 提供定时功能,用于触发周期性任务或计时。
- 支持延时、周期性事件触发等功能。
5. 中断控制驱动(ICU Driver)
- 管理和处理微控制器的中断事件。
- 支持外部中断(如传感器信号触发)和内部事件触发。
6. 存储器驱动
- Flash Driver:提供对片上闪存的访问,包括数据存储和擦写操作。
- EEPROM Driver:用于操作片上或外部的EEPROM存储器,支持非易失性数据存储。
7. 通信驱动
- CAN Driver:
- 用于控制CAN总线通信模块。
- 提供数据帧的发送和接收功能。
- LIN Driver:
- 支持LIN总线通信,常用于低速、经济型的通信场景。
- SPI Driver:
- 提供SPI通信功能,常用于与外部设备的高速通信(如传感器或外部存储器)。
- Ethernet Driver:
- 用于支持车载以太网通信。
- 提供高速数据传输的能力。
8. 看门狗驱动(Wdg Driver)
- 管理微控制器的看门狗功能。
- 用于检测和恢复系统运行异常,提升系统的可靠性。
9. CRC驱动(CRC Driver)
- 提供循环冗余校验(CRC)功能,用于数据完整性检查。
- 常用于通信数据或存储数据的校验。
MCAL与上层模块的协作
MCAL作为底层驱动层,与上层的ECU抽象层(ECU Abstraction Layer)和服务层(Service Layer)协同工作,共同实现对硬件资源的管理和抽象:
- 与ECU抽象层:
- ECU抽象层调用MCAL的接口以实现对硬件的高层次管理。
- 例如,I/O硬件抽象层调用DIO驱动实现GPIO的读写操作。
- 与服务层:
- 服务层通过MCAL实现对底层资源的间接访问。
- 例如,通信服务模块调用CAN驱动完成数据帧的发送和接收。
- 直接为应用层服务:
- 在某些情况下,MCAL可以直接为应用层提供接口,尤其是对硬实时性要求较高的场景,如高频PWM信号生成。
MCAL的特点与优势
1. 硬件无关性
MCAL屏蔽了不同微控制器的硬件实现差异,开发者可以通过统一的接口访问底层资源,从而实现硬件无关的软件设计。
2. 高度可配置性
- MCAL模块采用配置工具生成代码(如AUTOSAR的配置工具),允许开发者根据目标硬件平台进行灵活定制。
- 提供适应不同硬件特性和应用需求的配置选项。
3. 实时性和性能优化
- MCAL直接与硬件交互,具有极高的执行效率。
- 实时响应能力强,适用于需要快速响应的汽车电子系统(如发动机控制或主动安全系统)。
4. 可移植性和扩展性
- 上层应用与MCAL接口分离,应用软件无需因硬件变化而修改。
- 只需调整MCAL的配置或替换底层驱动,即可适配新的硬件平台。
5. 符合AUTOSAR标准
- MCAL完全符合AUTOSAR标准,确保模块的规范化和可互操作性。
- 提供经过标准认证的可靠驱动解决方案。
MCAL的典型应用场景
-
发动机管理系统:
- 使用ADC驱动采集传感器数据(如温度、压力)。
- 使用PWM驱动控制燃油喷射或点火。
- 使用CAN驱动实现发动机与其他ECU的通信。
-
车身控制系统:
- 使用DIO驱动控制车窗、门锁等数字设备。
- 使用LIN驱动实现与车门模块的低速通信。
-
主动安全系统:
- 使用ICU驱动处理外部中断事件(如雷达信号)。
- 使用SPI驱动与外部传感器进行高速通信。
-
高级驾驶辅助系统(ADAS):
- 使用以太网驱动实现高带宽数据传输。
- 使用CRC驱动确保传输数据的完整性。
总结
MCAL是AUTOSAR架构中连接硬件与软件的关键层次,通过标准化接口、模块化设计和高效的硬件抽象,大大简化了汽车电子系统的开发和移植过程。它的高度灵活性和实时性支持,使其在现代汽车电子系统中发挥着至关重要的作用,同时也符合AUTOSAR追求的高可靠性和可复用性目标。
2.1 I2C Driver介绍
I2C 驱动程序允许多个节点同时访问一个或多个 I2C 总线。
I²C(内部集成电路)是一种双线串行数据总线,广泛应用于汽车传感器或执行器中。
示例:温度传感器
- 3 轴加速度传感器
- 气压传感器
- EEPROM
- …
2.2 SPIHandlerDriver
SPIHandlerDriver 允许多个客户端同时访问一个或多个 SPI 总线。为了抽象出专门用于片选的 SPI 微控制器引脚的所有特性,这些引脚应直接由 SPIHandlerDriver 处理。这意味着这些引脚在 DIO 驱动程序中不可用。
三、Complex Drivers复杂驱动
复杂驱动层(Complex Drivers Layer)是AUTOSAR架构中的一个特殊层次,位于微控制器抽象层(MCAL)和ECU抽象层之间。它的主要作用是提供对特殊硬件或应用场景的支持,尤其是在这些功能无法通过AUTOSAR标准的模块实现时。
特点与功能
- 处理非标准功能
- 复杂驱动层用于实现一些特殊硬件或特定应用场景的功能,这些功能可能不属于AUTOSAR标准中定义的模块范围。
- 例如,某些定制的硬件接口或高度专用的外设需要通过复杂驱动层实现。
- 实时性支持
- 由于复杂驱动层可以直接与硬件交互,并且没有AUTOSAR标准模块的分层约束,因此可以实现对实时性要求更高的功能。
- 灵活性
- 复杂驱动层允许开发者实现自定义功能,为AUTOSAR架构提供了扩展和灵活性。
- 与标准模块的协作
- 复杂驱动层可以直接与MCAL交互,也可以与其他AUTOSAR模块协同工作,增强系统的整体功能。
典型应用场景
- 专用硬件支持
- 如某些特殊传感器、执行器或硬件接口的驱动程序。
- 特殊通信协议
- 支持一些AUTOSAR未定义的通信协议,如定制的串口通信或非标准的总线协议。
- 高实时性需求
- 实现对事件响应时间要求极高的功能,如特定安全功能或快速中断处理。
- 软件原型开发
- 在早期开发阶段,为新硬件平台或未成熟的软件模块提供支持。
复杂驱动程序是在基本软件栈内实现非标准化功能的模块。例如,使用特定中断和/或复杂的微控制器外设(如 PCP、TPU)直接访问微控制器来实现复杂的传感器评估和执行器控制。
- 喷油控制
- 电动阀控制
- 增量位置检测
**任务:**满足处理复杂传感器和执行器的特殊功能和时序要求
**特性:**实现:高度依赖微控制器(µC)、电子控制单元(ECU)和应用
与软件组件(SW-Cs)的上层接口:根据 AUTOSAR(AUTOSAR 接口)进行指定和实现
下层接口:对标准化接口的访问受限
复杂驱动层的优点
- 高灵活性:支持标准外的功能实现,满足特定需求。
- 实时性能:能够直接控制硬件,实现快速响应。
- 扩展性:弥补AUTOSAR标准模块覆盖不足的问题,为特殊硬件提供支持。
总结
复杂驱动层是AUTOSAR架构的一个补充层次,用于满足标准化模块难以覆盖的功能需求。它提供了灵活性、实时性和硬件定制支持,是开发者在特定场景下实现独特功能的重要工具。
四、ECU Abstraction ECU抽象层
4.1 ECU抽象层介绍
ECU抽象层(ECU Abstraction)位于汽车电子软件架构的微控制器抽象层(MCAL)之上,是整个AUTOSAR架构中极为重要的一部分。其主要目标是对ECU硬件的特性进行抽象,从而屏蔽硬件细节,向上层软件提供统一且一致的接口。这一层通过对硬件特性和硬件布局的隐藏,使应用层无需直接处理硬件设备的复杂性,从而大幅简化了上层开发工作,并提升了软件的可移植性和复用性。
具体来说,ECU抽象层负责将与ECU相关的输入输出信号的硬件特性(例如电流、电压、频率等)抽象为可以直接被应用层使用的逻辑信号或数据。例如,当I/O Driver(输入输出驱动层)采集到一个开关信号时,I/O硬件抽象层(I/O Hardware Abstraction)会将采集到的高低电平信号转化为逻辑上的“开(on)”或“关(off)”信号,再提供给应用层进行处理。应用层在调用这些信号时,不需要关心信号的具体来源,也无需了解它是通过I/O接口、ADC(模数转换器)采样,还是从外部通信驱动中获得的。这种设计实现了对ECU硬件的完全抽象化,使得应用层代码可以摆脱底层硬件的限制,从而实现了更高的灵活性和模块化。
ECU抽象层的功能不仅局限于输入输出信号的转换,它还包括了对多种硬件资源的抽象管理。具体而言,ECU抽象层由以下主要模块组成:
- I/O硬件抽象(I/O Hardware Abstraction)
该模块负责对与I/O设备相关的硬件信号进行抽象和处理。例如,将物理层的高低电平信号转化为应用层可理解的逻辑信号或数值。 - 通信硬件抽象(Communication Hardware Abstraction)
该模块负责屏蔽与通信相关的底层硬件差异,统一处理ECU间通信信号,例如CAN、LIN、FlexRay等总线通信。 - 无线通信硬件抽象(Wireless Communication Hardware Abstraction)
随着车联网技术的发展,无线通信硬件抽象模块应运而生,用于对无线通信协议(如Wi-Fi、蓝牙、5G等)的硬件接口进行封装,为上层提供统一的接口。 - 加密硬件抽象(Crypto Hardware Abstraction)
该模块用于抽象和管理硬件层的加密功能,例如硬件加密模块(HSM)提供的加密、解密、密钥管理等服务,为数据传输的安全性提供支持。 - 存储器硬件抽象(Memory Hardware Abstraction)
负责对不同类型的存储设备(如EEPROM、Flash存储器、RAM等)进行抽象管理,为上层提供一致的存储访问接口。 - 板载设备抽象(Onboard Device Abstraction)
对特定的板载设备(如传感器、执行器等)进行抽象和封装,使应用层可以通过统一的接口访问这些设备,而无需考虑设备类型或具体z实现。
通过这些模块的协同工作,ECU抽象层有效地实现了硬件的标准化接口,显著提高了汽车电子系统的开发效率。此外,这种分层设计还使得软件与硬件的解耦成为可能,从而支持在不修改上层逻辑的情况下更换或升级底层硬件。这对快速迭代和模块化开发的需求尤为重要,也符合汽车行业对可靠性和灵活性的高标准要求。
4.2 I/O Hardware Abstraction I/O驱动的抽象
I/O驱动抽象是AUTOSAR架构中ECU抽象层的一部分,其目的是将底层硬件相关的I/O操作进行抽象化和统一管理,从而为上层应用提供与硬件无关的访问方式。这一模块对底层硬件的电学特性和具体实现进行屏蔽,使得上层应用能够以逻辑信号的形式访问I/O设备,而无需关心其具体物理特性。
I/O驱动抽象的功能和特点
- 硬件抽象
I/O硬件抽象模块将底层的I/O驱动进行了标准化处理,通过统一的接口向上层提供抽象化的信号访问。应用层所访问的不是信号的电学特性(如电压、电流),而是信号所代表的抽象含义,例如开关状态、传感器测量值或执行器命令。 - 支持多种底层驱动
I/O硬件抽象层覆盖了多种类型的底层硬件驱动,包括:- DIO Drivers(数字输入输出驱动):用于数字信号的输入和输出。
- ADC Drivers(模数转换驱动):用于采集模拟信号并将其转换为数字信号。
- SPI Hardware Drivers(SPI硬件驱动):用于与外部设备通过SPI总线进行通信。
- 外部驱动(External Drivers):针对与外部器件(如扩展I/O芯片或特定传感器/执行器)相关的驱动。
- 抽象信号接口(I/O Signal Interface)
在I/O硬件抽象层中,I/O Signal Interface 是一个关键组件。它将底层I/O设备的信号抽象为逻辑信号变量,向上层应用提供与硬件无关的访问接口。例如,上层应用可以通过逻辑信号变量来直接访问开关的开/关状态或传感器的测量值,而无需关心这些信号在硬件层的具体实现方式。
I/O硬件抽象的结构
在AUTOSAR CP架构中,I/O硬件抽象的位置如图3.37所示,其内部结构如图所示。整体结构由以下几部分组成:
- I/O硬件抽象层
- 信号抽象:将底层硬件信号抽象为逻辑信号变量。
- 信号管理:对信号的输入、输出以及状态变化进行统一管理。
- 底层驱动
I/O硬件抽象层的下层依赖于MCAL(Microcontroller Abstraction Layer)的多种驱动模块,包括:- DIO驱动(DIO Drivers):负责数字输入/输出的基本操作,如读取数字输入信号的状态或设置数字输出信号的电平。
- ADC驱动(ADC Drivers):负责采集模拟信号(如电压信号)并将其转换为数字信号,供上层应用使用。
- SPI硬件驱动(SPI Hardware Drivers):用于访问通过SPI总线连接的外部设备,例如扩展I/O芯片或复杂的传感器模块。
- 外部驱动支持
I/O硬件抽象层中还包括一些针对特定外部设备的驱动程序。这些驱动由于与具体的外部芯片相关,无法直接归类到MCAL中,因此被归入ECU抽象层。例如,某些专用传感器或扩展模块的驱动程序可能需要通过I/O硬件抽象层来实现访问。
I/O硬件抽象的优点
- 硬件无关性
I/O硬件抽象屏蔽了底层硬件设备的电学特性和通信协议,使得上层应用只需与逻辑信号交互即可,极大地提高了软件的移植性和复用性。 - 统一的信号管理
通过抽象接口对I/O信号进行集中管理,可以在复杂系统中实现更高效的信号处理逻辑,简化应用层开发。 - 支持多种硬件扩展
无论是单片机内部的I/O设备,还是通过SPI、I2C等总线扩展的外部设备,I/O硬件抽象都能够以一致的方式进行管理和访问。 - 简化应用层开发
上层应用无需关心底层驱动的实现细节,只需通过逻辑信号接口调用即可完成对I/O设备的操作。
典型应用场景
- 数字信号处理
- 如读取按钮的开/关状态、控制LED的开闭。
- 通过逻辑信号访问这些设备,可以屏蔽底层硬件差异,便于开发。
- 模拟信号采集
- 如获取温度传感器的电压信号并将其转换为温度值。
- I/O硬件抽象层通过ADC驱动完成采集,并以逻辑信号形式提供给上层。
- 外部设备控制
- 如通过SPI访问扩展I/O芯片,读取或控制外部输入/输出信号。
- 上层无需关心SPI通信的具体细节,通信由SPI硬件驱动完成。
- 复杂设备管理
- 如读取外部传感器的数据,或通过扩展模块控制多个执行器。
- 外部驱动与MCAL驱动协同工作,确保外设的高效访问。
总结
I/O硬件抽象模块是AUTOSAR架构中实现硬件无关性和信号抽象化的关键部分。通过统一的I/O Signal Interface和对底层驱动的灵活支持,I/O硬件抽象简化了复杂车载系统中I/O设备的管理,提高了系统的扩展性、开发效率和可维护性。这一模块为数字、模拟和外部设备的统一管理提供了强大的技术基础,同时通过屏蔽硬件细节,为开发者带来了更高的便利性和灵活性。
4.3 Communication Hardware Abstraction 通信硬件抽象
通信硬件抽象模块是AUTOSAR架构中ECU抽象层的重要组成部分,其核心目的是对车载总线通信功能进行统一的抽象管理,为不同类型的通信总线(如LIN、CAN、以太网等)提供一致的访问机制,屏蔽底层硬件的差异性,从而简化上层应用的开发工作并提高系统的可移植性和扩展性。
通信硬件抽象的功能与特点
通信硬件抽象模块实现了对内部和外部通信控制器的统一抽象。例如,无论LIN或CAN总线的控制器是位于单片机内部,还是通过SPI、I2C等方式与外部扩展通信模块交互,在通信硬件抽象模块的接口层次上,这些差异都被隐藏,上层应用只需通过标准化接口进行调用即可。
统一的通道抽象
在通信硬件抽象模块之上,所有的通信通道在逻辑上都是一致的:
- 对于CAN总线:无论通信控制器是内部模块还是外部扩展模块,通过通信硬件抽象的接口(CAN Interface),都可以被视为统一的CAN通道。
- 对于LIN总线:所有LIN通信通道也都表现为一致的接口,屏蔽了硬件实现的复杂性。
这种抽象机制大大降低了上层服务层(Service Layer)开发时对底层硬件差异性的依赖,提高了软件的模块化和可复用性。
通信硬件抽象的结构
通信硬件抽象模块在AUTOSAR经典平台(Classic Platform, CP)架构中的位置如图3.39所示,其内部主要包含以下几个部分:
1. CAN模块示例(如下图所示)
图3.40展示了通信硬件抽象中CAN模块的架构示意图,体现了该模块的层次化设计:
- CAN接口(CAN Interface):
这是提供给上层服务层(如PDU路由模块、通信栈模块等)的接口。在这一层,上层服务无需关注具体CAN控制器的物理实现或其功能特性,所有访问均通过标准化接口进行调用。 - 外部器件驱动:
通信硬件抽象中还包含了对外部通信相关器件的驱动程序,例如:- CAN收发器驱动(CAN Transceiver Driver):负责控制外部CAN收发器的工作状态(如正常模式、待机模式等)。
- 外部CAN控制器的驱动(Drivers for external CAN ASIC):用于支持外部CAN控制器(如通过SPI或其他总线扩展的CAN控制器)。
2. LIN和其他通信模块
除了CAN模块,通信硬件抽象还可以扩展到LIN、以太网等其他通信总线协议,为它们提供类似的抽象机制。例如:
- LIN接口(LIN Interface):提供给上层服务的标准化LIN通道访问接口。
- 外部LIN控制器的驱动:针对外部扩展的LIN控制器硬件实现的驱动程序。
通信硬件抽象与MCAL的协作
通信硬件抽象模块与下层MCAL模块紧密配合,共同实现对底层通信硬件的访问。具体来说:
- CAN Driver:
在MCAL中,CAN Driver用于驱动单片机内部的CAN控制器,负责实现底层CAN通信的收发功能。 - SPI Handler Driver:
如果需要通过SPI访问外部通信硬件(如外部CAN控制器),则需要使用SPI Handler Driver进行通信。这种设计使得通信硬件抽象模块可以无缝集成内部和外部的CAN通信功能。 - DIO Driver:
在需要通过数字I/O接口(DIO)来控制外部CAN收发器状态(如启用、禁用或进入待机模式)时,DIO Driver负责对收发器的状态进行直接控制。
通信硬件抽象的优点
- 硬件无关性:屏蔽底层通信硬件的具体实现,上层开发人员无需关心通信控制器的内部或外部位置。
- 统一的接口设计:为不同总线协议(如CAN、LIN)提供一致的接口,简化了上层服务层的开发工作。
- 可扩展性:支持内部和外部通信硬件的无缝集成,可以方便地扩展支持新的总线协议或硬件模块。
- 增强的移植性:在更换硬件平台或通信硬件时,只需调整MCAL或通信硬件抽象模块的配置,而无需修改上层应用逻辑。
典型应用场景
- CAN通信:
在复杂的车载网络中,CAN总线被广泛用于控制器之间的通信。通过通信硬件抽象模块,无论CAN控制器位于单片机内部还是外部扩展硬件,都可以以相同的方式被访问。 - LIN通信:
对于成本敏感的应用场景(如车门模块、车窗控制),LIN总线提供了一种经济高效的通信解决方案,而通信硬件抽象模块确保了对不同LIN硬件的统一管理。 - 混合总线通信:
在现代汽车中,多个通信协议(如CAN、LIN、以太网)常常共存,通信硬件抽象模块通过统一的接口屏蔽了不同总线硬件之间的差异,为上层通信栈提供了一种一致的访问方式。
通过通信硬件抽象模块,AUTOSAR实现了对复杂车载通信系统的高效管理,不仅增强了系统的灵活性和扩展性,也降低了开发和维护的复杂度。
4.4 Memory Hardware Abstraction
在汽车电子领域的开发中,存储器是核心且不可或缺的部件,其作用包括数据存储、代码存储以及非易失性数据管理。根据物理位置的不同,存储器可以分为单片机内部的片上存储器(如Flash、EEPROM)和单片机外部的板载存储器(如通过SPI通信的外部EEPROM或其他存储芯片)。在AUTOSAR架构中,这两类存储器采用不同的管理方式,但为了方便上层应用的开发,AUTOSAR通过存储器硬件抽象层(Memory Hardware Abstraction, MHA)提供了一种统一的机制,将各种类型的存储器抽象为一致的接口。
存储器硬件抽象层的作用与设计
存储器硬件抽象层是ECU抽象层的一部分,旨在对存储设备进行统一的抽象和管理。它的主要作用包括:
- 屏蔽存储设备差异:
- 无论存储器是片上存储器还是片外存储器,MHA都通过统一的抽象接口屏蔽底层硬件的差异性。
- 服务层和应用层可以通过标准化接口一致地访问存储器,而无需关心具体的硬件实现或通信协议。
- 提升系统的移植性与扩展性:
- 在不同硬件平台之间,只需更换或调整MCAL驱动层和MHA配置,而无需修改上层逻辑。
- 增强了系统对不同存储器类型的兼容性。
- 支持非易失性存储功能:
- MHA支持对非易失性数据的可靠存储和管理,包括对Flash、EEPROM等存储设备的抽象和操作。
- 提供对Flash模拟EEPROM(Flash EEPROM Emulation)的支持,解决某些硬件平台中缺少独立EEPROM的问题。
MHA的核心模块
存储器硬件抽象层的设计采用模块化架构,主要包括以下核心部分:
1. Memory Abstraction Interface(存储器抽象接口)
- 这是MHA的顶层模块,向服务层(如NVRAM Manager和FEE)提供标准化的存储访问接口。
- 上层服务通过该接口访问存储器,无需了解存储设备的具体类型或硬件实现方式。
2. EEPROM Abstraction(EEPROM抽象模块)
- 抽象和管理片上或片外的EEPROM设备,支持标准化的读写和擦除操作。
- 无论EEPROM是片内设备还是通过SPI通信的外部芯片,都通过统一的方式进行操作。
3. Flash EEPROM Emulation(Flash的EEPROM模拟模块)
- 在某些没有独立EEPROM的硬件平台上,通过片内Flash模拟EEPROM功能。
- 解决了Flash设备擦写周期限制的问题,提供可靠的数据存储服务。
4. 外部存储器驱动支持(External Memory Drivers)
- 通过SPI或I2C等通信协议访问外部存储器芯片(如扩展EEPROM或NVRAM)。
- 提供对外部存储设备的标准化管理和抽象支持。
MHA与MCAL的关系
MHA与下层的MCAL(Microcontroller Abstraction Layer,微控制器抽象层)紧密协作,共同完成对存储器的管理和访问。MCAL直接与硬件交互,为MHA提供驱动支持:
- 内部存储器支持:
- Internal Flash Driver(内部Flash驱动):提供对片内Flash的操作支持,包括读写和擦除功能。
- EEPROM Driver(内部EEPROM驱动):管理片内EEPROM的存储操作。
- 外部存储器支持:
- SPI Handler Driver(SPI通信驱动):用于访问通过SPI接口连接的外部存储器(如外部EEPROM)。
- DIO Driver(数字I/O驱动):控制外部存储设备的状态(如启用或禁用)。
通过这种分层设计,MHA屏蔽了存储器的物理位置差异,使得片上存储器(如Flash、EEPROM)和片外存储器(如SPI外部EEPROM)的操作方式对上层模块完全一致。
在MCAL(Microcontroller Abstraction Layer,微控制器抽象层)中,片上存储器通过 Memory Drivers 进行访问,例如内部Flash驱动和内部EEPROM驱动;而对于片外存储器,由于其通常需要通过通信协议(如SPI)来访问,因此通过 Communication Drivers(通信驱动模块)实现,例如SPI处理驱动(SPI Handler Driver)。然而,无论存储器是片上还是片外,存储器硬件抽象层(Memory Hardware Abstraction Layer)将这些硬件统一抽象成标准化接口,屏蔽了底层实现的差异性。
在存储器硬件抽象层中,最上层模块是 Memory Abstraction Interface(存储器抽象接口),它向服务层提供标准化的存储器访问接口。该模块涵盖了对片内存储器(如Flash、模拟EEPROM)的访问,也支持片外存储器(如通过SPI通信的EEPROM)的访问。通过这一层,服务层无需关心底层硬件的具体实现方式,例如访问的是单片机内部的Flash模拟EEPROM,还是通过SPI通信访问的外部EEPROM,都可以以一致的方式进行操作。
存储器硬件抽象层的另一项重要功能是支持 Flash EEPROM Emulation(Flash的EEPROM模拟功能)。这对于一些仅提供Flash存储而无独立EEPROM的微控制器尤为重要,通过该功能可以模拟EEPROM的特性,以满足应用对非易失性存储的需求。因此,在存储器硬件抽象层中,还包括了 EEPROM Abstraction(EEPROM抽象模块)和 Flash EEPROM Emulation(Flash模拟EEPROM模块)等子模块。
在存储器硬件抽象层之下,是MCAL层的具体实现。对于片上存储器,MCAL层中包括诸如 Internal Flash Driver(内部Flash驱动)、EEPROM Driver(内部EEPROM驱动)等模块,这些驱动直接与单片机内部的存储器硬件(如Flash或EEPROM)交互。而对于片外存储器,由于需要通过通信外设(如SPI模块)访问MCU外部的存储芯片,因此MCAL中的 SPI Handler Driver(SPI处理驱动)承担了这一角色。这一驱动与单片机的SPI外设硬件交互,从而实现对外部存储器的访问。
如下图所示,AUTOSAR将存储器访问分为多个抽象层次,从底层硬件到MCAL,再到存储器硬件抽象层,每一层都通过模块化设计简化了上层应用的开发复杂度,同时增强了系统的移植性和可扩展性。这种设计使得开发人员无需关注存储器物理位置的差异性,可以通过统一接口便捷地操作各种存储器资源。
工作原理
- 上层服务模块(如NVRAM Manager)通过Memory Abstraction Interface发起存储器操作请求。
- MHA根据请求的存储设备类型(片上或片外)调用对应的抽象模块(如EEPROM Abstraction或Flash Emulation)。
- 如果需要操作底层硬件,MHA调用MCAL的存储器驱动模块(如Flash Driver或SPI Handler Driver)完成具体的读写、擦除操作。
- 操作完成后,统一返回结果给上层服务模块。
MHA的典型应用场景
- 非易失性数据存储:
- 管理系统中的关键数据(如用户配置参数、诊断信息)的存储,确保在断电情况下数据不丢失。
- 提供可靠的读写和擦除操作。
- EEPROM模拟:
- 在缺少独立EEPROM的硬件平台中,通过Flash模拟EEPROM功能,为非易失性数据存储提供支持。
- 解决了Flash存储寿命管理和数据擦写的技术难题。
- 外部存储扩展:
- 通过SPI接口访问外部存储器芯片(如扩展EEPROM或NVRAM),为系统提供更大的存储容量。
MHA的优点
- 硬件无关性:
- 屏蔽存储器物理位置和实现方式的差异,上层应用可通过统一接口访问存储器。
- 高扩展性:
- 支持片上和片外存储器的无缝集成,可适配多种硬件平台和存储设备。
- 可靠性:
- 通过EEPROM模拟和存储器抽象,提供稳定、高效的数据存储解决方案。
- 支持对存储器寿命管理和错误处理。
- 模块化设计:
- 通过分层架构简化了开发和维护,提高了系统的可移植性和开发效率。
总结
AUTOSAR中的存储器硬件抽象层(MHA)是存储管理的核心组件。它通过屏蔽底层存储器硬件的差异,为上层应用和服务提供统一、标准化的接口。无论是内部存储器(如Flash、EEPROM)还是外部存储设备(如SPI外部EEPROM),都能通过MHA实现一致的操作。同时,MHA支持Flash EEPROM Emulation等高级功能,进一步提升了系统的灵活性、可靠性和扩展能力。这种分层设计简化了复杂汽车电子系统中存储设备的管理,极大地提高了开发效率和系统适应性。
4.5 Onboard Device Abstraction 板载设备抽象
车载设备抽象层包含了 ECU 车载设备的驱动程序,这些设备不能被视为传感器或执行器,例如内部或外部看门狗。这些驱动程序通过微控制器抽象层访问 ECU 车载设备。
在AutoSAR架构中,板载设备抽象(On-board Device Abstraction)在CP(Classic Platform)架构中的位置如下图所示。该模块的主要功能是实现对除传感器、执行器、通信模块和存储器之外的其他板载设备的抽象,典型例子包括外部看门狗等设备。为了提高系统的通用性和简化上层服务的调用,板载设备抽象层提供了统一的接口,将不同类型的硬件设备抽象为一致的访问方式。
具体来说,板载设备抽象层将看门狗设备分为单片机内部的看门狗(Internal Watchdog)和单片机外部的看门狗(External Watchdog),但无论是内部看门狗还是外部看门狗,抽象层都统一将其封装成相同的接口。这样,服务层在访问这些看门狗时,不需要关心是访问内部看门狗还是外部看门狗,从而减少了复杂性并提高了系统的可维护性。
如下图所示,与之前描述的BSW(Basic Software)架构类似,在板载设备抽象模块中,包含了两个关键组件:看门狗接口(Watchdog Interface)和外部看门狗驱动(External Watchdog Driver)。其中,单片机内部的看门狗可以直接利用单片机内部的硬件资源,因此只需要调用MCAL(Microcontroller Abstraction Layer)中Microcontroller Drivers下的Internal Watchdog Driver来驱动底层硬件。与此不同,外部看门狗需要通过SPI(Serial Peripheral Interface)进行通信,因此MCAL中的Communication Drivers提供了SPI Handler Driver来处理与底层硬件的交互。该SPI Handler Driver通过SPI总线与外部看门狗进行数据交换,从而完成看门狗的操作。
通过这种方式,AutoSAR的板载设备抽象模块不仅确保了对不同硬件设备的统一管理,还通过硬件抽象层(如MCAL)将硬件依赖性与上层软件解耦,提升了系统的灵活性和可移植性。
4.6 Crypto Hardware Abstraction 硬件加密抽象
加密硬件抽象是一组模块,它从加密原语(内部或外部硬件或基于软件)的位置中抽象出来。
Crypto Hardware Abstraction的主要作用是为上层软件(例如密码服务模块、通信安全模块)提供统一的加密操作接口,而不需要关心底层硬件加密模块(如HSM、TPM或专用加密协处理器)的具体实现。这种抽象屏蔽了不同硬件厂商在加密模块设计上的差异,使得系统具有更高的可移植性和硬件无关性。
通过Crypto Hardware Abstraction,上层软件可以调用标准化接口完成以下功能:
- 对称加密/解密(如AES)
- 非对称加密/解密(如RSA、ECC)
- 哈希计算(如SHA系列算法)
- 数字签名生成与验证
- 密钥管理(如密钥生成、存储、销毁)
在AUTOSAR架构中,硬件加密抽象(Crypto Hardware Abstraction)的具体组成如下图所示,它是ECU抽象层的重要部分,用于屏蔽底层加密硬件的差异性,为上层提供统一的加密操作接口,从而简化开发过程并增强系统的可移植性和扩展性。
硬件加密抽象的核心功能是对底层硬件加密模块的抽象与统一管理。在具体实现上,不同类型的加密模块通过不同的方式被访问和控制:
1. 内部硬件加密模块
对于位于单片机内部的加密模块,例如:
- 安全硬件扩展(Secure Hardware Extension,SHE)
- 硬件安全模块(Hardware Security Module,HSM)
这些模块通过MCAL(Microcontroller Abstraction Layer)的Crypto Drivers直接驱动。这些驱动程序负责与片上加密硬件交互,并完成具体的加密任务。通过这种设计,片上硬件的加密功能可以高效地被利用,并且上层应用无需关心这些硬件的具体实现细节。
2. 外部硬件加密模块
对于基于单片机外部的硬件加密模块(如外部加密芯片),由于其通常通过SPI通信接口访问,因此需要MCAL中的SPI Handler Driver来负责与外部硬件的通信。SPI Handler Driver通过SPI接口与外部加密模块交互,并驱动External Crypto Driver(外部加密驱动),将外部加密硬件的功能整合到ECU抽象层的硬件加密抽象中。这种方式使得外部硬件加密模块的使用与内部硬件模块一样简单和一致。
3. 基于软件的加密模块
硬件加密抽象中的另一部分是基于软件的加密驱动(Crypto Driver - SW-based)。这一驱动实现了在没有专用加密硬件时的加密功能,完全通过软件算法完成。例如,AES加密、RSA签名或SHA哈希等操作都可以由这一模块通过纯软件实现。这是硬件加密抽象相比于其他功能的一个显著不同点,因为它提供了硬件和软件两种实现方式的灵活选择。
4. 统一接口的提供
无论底层使用的是内部硬件加密模块、外部硬件加密模块,还是基于软件的加密模块,这些功能最终都通过Crypto Interface向上层提供标准化的接口。Crypto Interface屏蔽了底层加密模块的实现差异,使得上层服务(例如密码服务模块、通信安全模块)能够以统一的方式调用加密功能,而无需关注这些功能是由片上硬件、片外硬件还是纯软件实现的。
工作原理总结
- 上层服务模块(如Crypto Service Manager)通过Crypto Interface发起加密操作请求。
- 硬件加密抽象模块判断任务类型,并通过Crypto Job Manager对请求进行调度。
- 根据加密任务的需求和硬件资源分配情况,选择合适的驱动:
- 如果使用内部硬件模块,则调用MCAL的Crypto Drivers。
- 如果使用外部硬件模块,则通过SPI Handler Driver与外部硬件交互。
- 如果没有专用加密硬件,则调用基于软件的加密驱动。
- 加密操作完成后,结果通过Crypto Interface返回给上层模块。
优点和意义
硬件加密抽象模块的设计实现了以下目标:
- 硬件无关性:屏蔽硬件实现差异,上层无需关心加密功能的实现方式。
- 灵活性:支持内部硬件、外部硬件和纯软件的多种加密实现方式,满足不同系统的需求。
- 可移植性:即使硬件平台发生变化,只需调整驱动层配置,无需更改上层代码。
- 性能优化:优先利用硬件加速资源,在没有硬件支持时提供软件备选方案。
典型应用场景
- 安全通信:如CAN/CAN-FD的消息加密和认证。
- 软件更新保护:确保OTA更新的完整性和真实性。
- 数据保护:对敏感信息进行加密存储。
- 身份认证:通过数字签名验证系统组件的合法性。
通过整合内部硬件、外部硬件以及软件实现的加密功能,硬件加密抽象模块为AUTOSAR架构的安全应用提供了灵活、高效和统一的支持。
五、总结
至此,ECU抽象层的内容到这里就结束了,下篇文章我们继续讲解AutoSAR CP分层架构,服务层Services Layer。
往期文章:
汽车基础软件AutoSAR自学攻略(一)-低成本AutoSAR环境搭建
汽车基础软件AutoSAR自学攻略(二)-AutoSAR CP分层架构(1)
汽车基础软件AutoSAR自学攻略(三)-AutoSAR CP分层架构(2)
相关文章:
汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)
汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念,下面我们来具体到每一层的具体内容进行讲解,每一层的每一个功能块力求用一个总览图,外加一个例子的图给大家进…...
有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗
近期,有多名开发者反馈,收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞,写给AppStore的投诉邮件。 邮件内容主要说的是,腾讯注册了【水印相机】这四个字的商标,所以你们这些在AppStore上的app&…...
SpringBoot操作spark处理hdfs文件
SpringBoot操作spark处理hdfs文件 1、导入依赖 <!-- spark依赖--><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.2.2</version></dependency><depend…...
Spring Boot中的依赖注入是如何工作
Spring Boot 中的依赖注入(Dependency Injection,简称 DI)是通过 Spring 框架的核心机制——控制反转(Inversion of Control,IOC)容器来实现的。Spring Boot 基于 Spring Framework,在应用中自动…...
算法面试1
简述yolov1的网络架构 YOLOv1网络结构包括24层卷积层用来提取图像的特征,2层全连接层回归得到7730(141420)的张量。 网络结构大概如下:输入的是4484483通道的图像,就是RGB图像,然后用64个卷积核大小是…...
Android车机DIY开发之软件篇(八)单独编译
Android车机DIY开发之软件篇(八)单独编译 1.CarLauncher单独编译 CarLauncher源码位于 packages/apps/Car/Launcher 用Eclipse ADT 谷歌定制版编译而成,.mk .bp编译 Android13目录如下: alientekalientek:~/packages/apps/Car$ ls Calendar …...
保证Mysql数据库到ES的数据一致性的解决方案
文章目录 1.业务场景介绍1.1 需求分析1.2 技术实现方案 2.业界常用数据一致性方案分析2.1 同步双写方案2.2 MQ异步双写方案2.3 扫表定期同步方案2.4 监听binlog同步方案 1.业务场景介绍 1.1 需求分析 某知名的在线旅游平台,在即将到来的春季促销活动之前ÿ…...
Cursor实现go项目配置并实现仓库Gin项目运行
✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏:知识备份 ✨特色专栏:知识分享 &#x…...
【网络云SRE运维开发】2025第2周-每日【2025/01/11】小测-【第11章NAT理论和实操考试】解析
文章目录 一、选择题二、理论题三、实操题 【网络云SRE运维开发】2025第2周-每日【2025/01/11】小测-【第11章NAT理论和实操考试】解析 一、选择题 在H3C设备上,NAT技术主要用于( ) A. 提高网络安全性 B. 实现不同网段的通信 C. 将内部私有IP…...
drawDB docker部属
docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问:http://192.168.31.135:3000/...
页面顶部导航栏(Navbar)的功能(Navbar/index.vue)
这段代码是一个 Vue.js 组件,实现了页面顶部导航栏(Navbar)的功能。我将分块分析它的各个部分: 模板 (Template): <!-- spid-admin/src/layout/components/Navbar/index.vue --> <template><div class"navb…...
【人工智能】用Python进行对象检测:从OpenCV到YOLO的全面指南
对象检测是计算机视觉领域的核心任务之一,广泛应用于视频监控、自动驾驶、智能安防等多个场景。随着深度学习技术的发展,基于传统方法的对象检测逐渐被基于神经网络的先进模型所取代。本文将系统地介绍如何使用Python进行对象检测,重点探讨了…...
深度学习从入门到实战——卷积神经网络原理解析及其应用
卷积神经网络CNN 卷积神经网络前言卷积神经网络卷积的填充方式卷积原理展示卷积计算量公式卷积核输出的大小计算感受野池化自适应均值化空洞卷积经典卷积神经网络参考 卷积神经网络 前言 为什么要使用卷积神经网络呢? 首先传统的MLP的有什么问题呢? - …...
Flink概念知识讲解之:Restart重启策略配置
Flink概念知识讲解之:Restart重启策略配置 当 Task 发生故障时,Flink 需要重启出错的 Task 以及其他受到影响的 Task ,以使得作业恢复到正常执行状态。 Flink 通过重启策略和故障恢复策略来控制 Task 重启:重启策略决定是否可以…...
Golang中使用 Mqtt
MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 ,可以用极少的代码和带宽为联网设备提供实时可靠的消息服务,它广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。 本文主要介绍如何在 Golang 项目中使用 github.com/eclips…...
腾讯云下架印度云服务器节点,印度云服务器租用何去何从
近日,腾讯云下架印度云服务器节点的消息引起了业界的广泛关注。这一变动让许多依赖印度云服务器的用户开始担忧,印度云服务器租用的未来究竟在何方? 从印度市场本身来看,其云服务市场的潜力不容小觑。据 IDC 报告,到 2…...
STM32内置Flash
一、原理 利用flash存储用户数据需要注意查看,用户数据是否会覆盖芯片运行程序。 IAP(在程序中编程)利用程序修改程序本身,和OTA是一个原理。IAP在程序中编程支持任意一种通信下载。 ICP(在电路中编程,通…...
面试:C++类成员初始化顺序
1、非静态数据成员:按它们在类定义的声明顺序初始化,不会按它们在初始化列表的顺序。 2、静态数据成员:在main函数启动之前,并且只初始化一次 3、基类构造函数:如果类从一个或多个基类继承而来,基类的构造…...
约束的笔记
约束的分类 为什么需要约束 为了保证数据的完整性 ①实体完整性(Entity Integrity)(同一个表中,不能存在两条完全相同无法区分的记录) ②域完整性(Domain Integrity) ③引用完整性(Referential Integ…...
【Docker】安装registry本地镜像库,开启Https功能
下载镜像 docker pull registry:2 需要启动https功能,就要生成服务端的自签名的证书和私钥,以及在docker客户端安装这个经过签名的证书。 第一步:生成公私钥信息,第二步,制作证书签名申请文件, 第三步&…...
el-tree拖拽光标错位问题
背景:el-tree实现的分类树增加拖拽功能后,当分类树由于数量较多产生滚动条,如果分类树已滚动,进行拖拽时会造成光标错位的问题: 原因:el-tree拖拽光标定位的高度并未加上滚动的高度解决:将滚动的样式属性放…...
Linux权限
目录 一.Linux权限的概念 二.Linux权限管理 1.文件访问者的分类 2.文件类型和访问权限 1.文件类型 2.基本权限 3.文件权限的表示方法 1.字符表示法 2.八进制表示法 4.文件权限的相关访问方法 1.chmod 2.chown 3.chgrp 4.粘滞位 三.权限总结 一.Linux权限的概念 …...
mysql binlog 日志分析查找
文章目录 前言一、分析 binlog 内容二、编写脚本结果总结 前言 高效快捷分析 mysql binlog 日志文件。 mysql binlog 文件很大 怎么快速通过关键字查找内容 一、分析 binlog 内容 通过 mysqlbinlog 命令可以看到 binlog 解析之后的大概样子 二、编写脚本 编写脚本 search_…...
win32汇编环境,窗口程序中对按钮控件常用操作的示例
;运行效果 ;win32汇编环境,窗口程序中对按钮控件常用操作的示例 ;常用的操作,例如创建按钮控件,使其无效,改变文本,得到文本等。 ;将代码复制进radasm软件里,直接就可以编译运行。重点部分加备注。 ;>&g…...
风水算命系统架构与功能分析
系统架构 服务端:Java(最低JDK1.8,支持JDK11以及JDK17)数据库:MySQL数据库(标配5.7版本,支持MySQL8)ORM框架:Mybatis(集成通用tk-mapper,支持myb…...
如何在 Ubuntu 22.04 上安装和配置邮件服务器教程
简介: 在本指南中,我们将演示如何在 Ubuntu 22.04 上安装和配置邮件服务器,因为大中型公司可以从拥有私人邮件服务器中获益匪浅。通过使用邮件服务器,可以密切监视所有电子邮件流量。此外,自定义设置的灵活性使得建立…...
后门原理与实践
实验目录 windows主机与kali虚拟机实现互联互通使用netcat获取主机操作Shell,cron启动使用socat获取主机操作Shell, 任务计划启动使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell使用MSF meterpreter生成获取目标主机…...
代理模式详解与应用
代理模式(Proxy Pattern),也称为委托模式或 surrogate 模式,是一种结构型设计模式。它为其他对象提供一个代理以控制对这个对象的访问。通过引入代理对象,可以在不改变原始对象接口的前提下,添加额外的功能…...
C#,动态规划问题中基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法与源代码
1 分词 分词是自然语言处理的基础,分词准确度直接决定了后面的词性标注、句法分析、词向量以及文本分析的质量。英文语句使用空格将单词进行分隔,除了某些特定词,如how many,New York等外,大部分情况下不需要考虑分词…...
基于单片机的智能家居排气扇系统设计
1系统方案设计 本设计基于单片机的智能家居排气扇系统采用STM32单片机作为主控制器,通过DHT11温湿传感器和MQ-2烟雾传感器实现温度、湿度、烟雾检测,在自动模式下,可以根据烟雾浓度通过PWM调速的方式自动调节排气扇的速度,而在手…...
基于JAVA+SpringBoot+Vue的二手车交易系统
基于JAVASpringBootVue的二手车交易系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈喽…...
【JVM-2.2】使用JConsole监控和管理Java应用程序:从入门到精通
在Java应用程序的开发和运维过程中,监控和管理应用程序的性能和资源使用情况是非常重要的。JConsole是Java Development Kit(JDK)自带的一款图形化监控工具,它可以帮助开发者实时监控Java应用程序的内存、线程、类加载以及垃圾回收…...
windows及linux 安装 Yarn 4.x 版本
1. 确保系统环境准备 a. 安装 Node.js Yarn 依赖于 Node.js,所以需要先安装 Node.js。前往 Node.js 官网 下载并安装适合你的 Windows 版本的 Node.js(推荐 LTS 版本)。安装完成后,打开命令提示符(CMD)或 PowerShell,验证安装:node -v npm -v如果显示版本号,则表示安…...
VS2015 + OpenCV + OnnxRuntime-Cpp + YOLOv8 部署
近期有个工作需求是进行 YOLOv8 模型的 C 部署,部署环境如下 系统:WindowsIDE:VS2015语言:COpenCV 4.5.0OnnxRuntime 1.15.1 0. 预训练模型保存为 .onnx 格式 假设已经有使用 ultralytics 库训练并保存为 .pt 格式的 YOLOv8 模型…...
1.两数之和--力扣
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1…...
MySQL库表的操作
目录 一、库的操作 1.1库的创建 1.2字符集和校验规则 1.2.1 查看系统默认字符集以及校验规则 1.2.2 查看数据库支持的字符集 1.2.3 查看数据库支持的字符集校验规则 1.2.4 校验规则对数据库的影响 1.3操纵数据库 1.3.1显示库 1.3.2显示创建语句 1.3.3修改数据库 1.3…...
【强化学习】深度确定性策略梯度算法(DDPG)详解(附代码)
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
单片机实物成品-011 火灾监测
火灾监测(20个版本) 版本20: oled显示温湿度烟雾浓度火焰传感器天然气浓度窗户风扇水泵排气系统声光报警语音播报按键WIFI模块 ----------------------------------------------------------------------------- https://www.bilibili.com…...
牛客网刷题 ——C语言初阶(6指针)——BC106 上三角矩阵判定
1. 题目描述——BC106 上三角矩阵判定 牛客网OJ题链接 描述 KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。 示例 输入: 3 1 2 3 0 4 5 0 0…...
Mysql--重点篇--索引(索引分类,Hash和B-tree索引,聚簇和非聚簇索引,回表查询,覆盖索引,索引工作原理,索引失效,索引创建原则等)
索引是数据库中用于加速查询操作的重要机制。通过索引,MySQL可以快速定位到满足查询条件的数据行,而不需要扫描整个表。合理的索引设计可以显著提高查询性能,但不合理的索引可能会导致性能下降和磁盘空间浪费。因此,理解索引的工作…...
Vue3框架核心功能点响应式数据reactive、组合式API setup、computed、组件通信、路由导航,状态管理vuex、pinia等的实战示例代码
记录几个Vue3框架核心功能点,例如响应式数据reactive、组合式API setup、computed、组件通信、路由导航,状态管理vuex、pinia……等实战示例代码: 一、响应式数据(Reactive Data) 创建响应式对象 使用reactive函数创建…...
Gitlab-Runner配置
原理 Gitlab-Runner是一个非常强大的CI/CD工具。它可以帮助我们自动化执行各种任务,如构建、测试和部署等。Gitlab-Runner和Gitlab通过API通信,接收作业并提交到执行队列,Gitlab-Runner从队列中获取作业,并允许在不同环境下进行作…...
多台PC共用同一套鼠标键盘
当环境中有多个桌面 pc 需要操作的时候,在 多台 pc 之间切换会造成很多的不方便 可以通过远程进行连接,但是有一个更好的方案是让多台机器之间共用同一套键盘鼠标 常用的解决方案 synergy 和 sharemouse,通过移动光标在不同的 pc 间切换 s…...
学会使用computed计算属性与watch监听(小白学习笔记)
1. 使用不同方法实现 姓名案例 需求: 根据data中 firstName 和 lastName 的值 来动态地展示全名 1.1. 插值语法 如果只使用学过的插值语法 那可以在模板中直接使用两个变量 . 但是如果需要对数据进行计算等处理 就需要在插值语法里写复杂的js表达式. 这样就违背了vue风格指…...
atoi函数的概念和使用案例
atoi 函数是 C 语言标准库中的一个函数,它用于将字符串转换为整数。atoi 的名称是 “ASCII to integer” 的缩写。该函数定义在 <stdlib.h> 头文件中。 概念 atoi 函数会从字符串的开始位置开始转换,直到遇到第一个非数字字符或遇到字符串结束符…...
unittest VS pytest
以下是 unittest 和 pytest 框架的对比表格: 特性unittestpytest设计理念基于类的设计,类似于 Java 的 JUnit更简洁,基于函数式编程设计,支持类和函数两种方式测试编写需要继承 unittest.TestCase 类,方法以 test_ 开…...
B2C API安全警示:爬虫之外,潜藏更大风险挑战
在数字化时代,B2C(Business-to-Consumer)电子商务模式已成为企业连接消费者、推动业务增长的重要桥梁。而B2C API(应用程序编程接口)作为企业与消费者之间数据交互的桥梁,其安全性更是至关重要。然而&#…...
大型语言模型(LLM)中的tokens是什么
大型语言模型(LLM)中的tokens是什么 在大型语言模型(LLM)中,tokens是文本处理的基本单位,它可以是一个单词、一个字符、一个标点符号,或者是一个特殊的标记。以下是关于tokens的详细介绍及举例: 一、tokens的定义和作用 定义:tokens是将文本分割成的一个个有意义的…...
自动驾驶---E2E架构演进
1 背景 模型最早应用的自动驾驶模块就是感知层面,随着技术的发展,逐渐开始应用到决策规划等其它模块。端到端自动驾驶架构是一种基于深层神经网络模型和方法的自动驾驶技术模式。目前一段式端到端系统只有在英伟达早期所做的demo中实现,再者就…...
w~自动驾驶~合集16
我自己的原文哦~ https://blog.51cto.com/whaosoft/12765612 #SIMPL 用于自动驾驶的简单高效的多智能体运动预测基准 原标题:SIMPL: A Simple and Efficient Multi-agent Motion Prediction Baseline for Autonomous Driving 论文链接:https://ar…...