Autosar CP Transformer规范工作原理和应用场景导读

在这里插入图片描述

一、AUTOSAR规范中Transformer的主要功能和分类

(一)主要功能
  1. 数据转换与处理
    • 从运行时环境(RTE)获取数据,进行序列化(将复杂数据结构转换为线性字节数组)或其他转换操作(如添加校验和等),然后将处理后的结果返回给RTE。例如,将包含车辆传感器数据的复杂数据结构转换为适合在网络上传输的字节数组格式。
    • 支持多种数据类型和通信场景,包括处理发送/接收接口(Sender/Receiver Interface)的数据元素、客户端/服务器操作(Client/Server Operation)及其参数,以及非排队外部触发事件(non - queued external trigger events)。
  2. 通信支持
    • 实现不同ECU之间或ECU内部的通信数据转换,确保数据在不同组件和系统之间的正确传输和交互。例如,在车辆控制系统中,实现发动机控制单元(ECU)与仪表盘控制单元之间的数据转换,以便准确显示发动机状态信息。
    • 定义了用于ECU间客户端/服务器通信的协议,支持数据的可靠传输和交互。
  3. 错误处理与通知
    • 检测和处理转换过程中的错误,将错误以返回码的形式返回给RTE。错误分为软错误(Soft Errors)和硬错误(Hard Errors),软错误时RTE可继续执行Transformer链,硬错误时RTE通常会中止执行。
    • 每个Transformer类都有自己固定的抽象错误集,Transformer只能返回其所属类定义的错误子集,便于软件组件(SWC)进行错误处理和诊断。
  4. 配置与管理
    • 根据系统配置(在[3, System Template]中)和软件组件配置(在[6, Software Component Template]中)来确定其行为和参数,包括确定使用的缓冲机制(原地缓冲或异地缓冲)、Transformer链的组成和顺序等。
    • 支持多种配置参数,如开发错误检测开关、实例ID、版本信息API激活等,以满足不同的应用需求和系统集成要求。
(二)主要分类
  1. Serializer(序列化)
    • 功能:接受复杂数据(如Sender/Receiver数据元素或带参数的Client/Server操作)或无数据(如Trigger通信),将其序列化为字节数组,以便在网络上传输或在系统中进一步处理。例如,将车辆的位置信息(包含经度、纬度、海拔等多个数据字段)序列化为字节流进行传输。
    • 特点:定义了序列化算法,明确数据元素的序列化顺序、字节序(endianness)、数据语义(如数据值的表示方式,如整数的补码表示、文本数据的字符编码等)、源数据类型以及数据填充方式等,确保数据在序列化和反序列化过程中的一致性和正确性。
  2. Safety(安全)
    • 功能:保护与安全相关的SWC之间的通信,确保数据传输的正确性、顺序性和内容完整性。例如,在车辆的制动系统通信中,通过添加序列计数器和校验和等方式,防止数据在传输过程中被无意修改或丢失,确保制动指令的准确传递。
    • 特点:通过一系列机制来保证通信安全,如检测数据的有效性(即使接收到重复计数器或计数器跳跃的数据,也能判断数据是否有效)、检查数据内容的正确性、确保数据的新鲜度(防止数据重放攻击)等。
  3. Security(安全防护)
    • 功能:保护通信免受有意修改,确保通信的安全性,包括数据的真实性(确保数据来源可靠)、完整性(防止数据被篡改)和新鲜度(防止数据被重放)。例如,在车辆的远程信息处理系统中,防止黑客篡改车辆的诊断数据或远程控制指令。
    • 特点:采用加密、认证等技术手段来实现安全防护,例如添加数字签名、加密算法等,对通信数据进行保护,防止非法访问和篡改。
  4. Custom(自定义)
    • 功能:由开发方根据特定需求自定义实现的Transformer,用于处理未被AUTOSAR标准化的转换功能。例如,针对特定车辆制造商的私有通信协议进行数据转换。
    • 特点:未被AUTOSAR详细规定,开发方可以根据具体应用场景灵活设计和实现其功能,可作为补充来满足特殊的转换需求。

二、不同Transformer工作示例

(一)Serializer Transformer示例
  1. 应用场景
    • 在车辆的自动驾驶系统中,传感器(如摄像头、雷达等)采集到的环境数据(如目标物体的距离、速度、形状等信息)需要传输给决策控制单元进行处理。这些环境数据通常是复杂的数据结构,包含多个数据字段。Serializer Transformer将这些复杂的传感器数据序列化为字节数组,以便通过车载网络(如以太网)高效地传输到决策控制单元。
  2. 工作过程
    • 假设传感器数据以特定的数据结构存储在内存中,Serializer Transformer按照预定义的序列化算法,将数据结构中的各个字段依次转换为字节序列。例如,对于一个包含目标物体距离(float类型)、速度(int类型)和形状(可能是一个自定义的结构体类型)的传感器数据结构,它会先将距离字段转换为字节流,接着转换速度字段,最后处理形状字段(根据形状结构体的定义,将其内部成员逐个转换为字节)。转换后的字节数组可以被封装在网络数据包中进行传输。在接收端,另一个对应的反序列化过程可以将字节数组还原为原始的数据结构,供决策控制单元进行分析和决策。
(二)Safety Transformer示例
  1. 应用场景
    • 在车辆的电子稳定控制系统(ESC)中,车轮速度传感器、转向角传感器等不断向控制单元发送数据,控制单元根据这些数据计算并调整车辆的制动压力和发动机扭矩,以确保车辆的稳定性和安全性。Safety Transformer用于保护这些关键传感器数据在传输过程中的安全,防止数据被干扰或篡改,从而保证控制单元接收到准确可靠的数据,做出正确的控制决策。
  2. 工作过程
    • Safety Transformer在数据传输过程中,会为每个数据包添加序列计数器和校验和。例如,每次发送数据时,序列计数器递增,接收端通过检查序列计数器的连续性来确保数据的顺序性。同时,计算数据包的校验和(如CRC校验和),并将其附加在数据包中。接收端收到数据包后,首先验证校验和是否正确,若校验和错误,则表明数据可能在传输过程中被篡改,Safety Transformer会将此情况视为错误并进行相应处理(如通知RTE数据错误,根据系统配置,RTE可能采取重传数据或触发错误处理机制等操作)。若校验和正确,再检查序列计数器是否连续,若不连续但校验和正确,可能表示有数据丢失或重复,Safety Transformer也会根据预定义的规则进行处理,例如根据数据的重要性决定是否可以接受不连续的序列计数器,或者请求重传数据。

三、C++代码展示Transformer工作原理

以下是一个简化的C++代码示例,用于展示Transformer的基本工作原理,包括数据序列化、转换和反序列化过程(以一个简单的车辆速度数据转换为例)。

#include <iostream>
#include <vector>
#include <cstring>// 假设这是一个表示车辆速度数据的结构体
struct VehicleSpeedData {int speed;int timestamp;
};// 定义一个抽象的Transformer类
class Transformer {
public:virtual ~Transformer() {}virtual std::vector<uint8_t> transform(const std::vector<uint8_t>& data) = 0;virtual VehicleSpeedData inverseTransform(const std::vector<uint8_t>& serializedData) = 0;
};// SerializerTransformer类,继承自Transformer类,用于将数据序列化为字节数组
class SerializerTransformer : public Transformer {
public:std::vector<uint8_t> transform(const std::vector<uint8_t>& data) override {VehicleSpeedData* speedData = reinterpret_cast<VehicleSpeedData*>(const_cast<uint8_t*>(data.data()));std::vector<uint8_t> serializedData;serializedData.resize(sizeof(VehicleSpeedData));std::memcpy(serializedData.data(), speedData, sizeof(VehicleSpeedData));return serializedData;}VehicleSpeedData inverseTransform(const std::vector<uint8_t>& serializedData) override {VehicleSpeedData speedData;std::memcpy(&speedData, serializedData.data(), sizeof(VehicleSpeedData));return speedData;}
};// SafetyTransformer类,继承自Transformer类,用于添加简单的安全校验(这里只是示例,实际会更复杂)
class SafetyTransformer : public Transformer {
public:std::vector<uint8_t> transform(const std::vector<uint8_t>& data) override {std::vector<uint8_t> transformedData = data;// 这里可以添加安全校验相关的操作,比如添加校验和等// 为了简单示例,只是在数据末尾添加一个固定值作为校验标识transformedData.push_back(0xAB);return transformedData;}VehicleSpeedData inverseTransform(const std::vector<uint8_t>& serializedData) override {VehicleSpeedData speedData;// 这里需要先验证校验和等安全相关信息(示例中简单判断最后一个字节是否为预期值)if (serializedData.back() == 0xAB) {std::memcpy(&speedData, serializedData.data(), sizeof(VehicleSpeedData));} else {std::cerr << "Safety check failed in inverseTransform." << std::endl;}return speedData;}
};// 测试函数,模拟数据经过SerializerTransformer和SafetyTransformer的转换过程
void testTransformers() {VehicleSpeedData originalData = {60, 123456789};std::vector<uint8_t> originalDataBytes(reinterpret_cast<uint8_t*>(&originalData),reinterpret_cast<uint8_t*>(&originalData) + sizeof(VehicleSpeedData));SerializerTransformer serializer;std::vector<uint8_t> serializedData = serializer.transform(originalDataBytes);SafetyTransformer safety;std::vector<uint8_t> transformedData = safety.transform(serializedData);// 反序列化和逆转换过程VehicleSpeedData recoveredData = safety.inverseTransform(transformedData);recoveredData = serializer.inverseTransform(std::vector<uint8_t>(recoveredData.speedData,recoveredData.speedData + sizeof(VehicleSpeedData)));std::cout << "Original Speed: " << originalData.speed << ", Recovered Speed: " << recoveredData.speed << std::endl;std::cout << "Original Timestamp: " << originalData.timestamp << ", Recovered Timestamp: " << recoveredData.timestamp << std::endl;
}

在上述代码中:

  1. 定义了一个抽象的Transformer类,包含transform(用于正向转换数据)和inverseTransform(用于反向转换数据)两个纯虚函数。

  2. SerializerTransformer类实现了Transformer类,将VehicleSpeedData结构体数据序列化为字节数组,并能从字节数组反序列化为原始数据结构。

  3. SafetyTransformer类在SerializerTransformer的基础上添加了简单的安全校验,在转换时添加一个校验标识,在SafetyTransformer类的inverseTransform函数中,先对校验和进行验证,如果校验和不正确(即最后一个字节不是预期的0xAB),则输出错误信息并返回一个可能不正确的VehicleSpeedData结构体(这里只是简单示例,实际可能需要更复杂的错误处理)。如果校验和正确,则从字节数组中恢复出原始数据结构。

  4. testTransformers函数中,首先创建了原始的VehicleSpeedData结构体并将其转换为字节数组。然后,通过SerializerTransformer将数据序列化为字节数组,接着通过SafetyTransformer添加安全校验信息进行转换。最后,通过SafetyTransformerinverseTransform函数和SerializerTransformerinverseTransform函数进行反序列化和逆转换,得到恢复后的VehicleSpeedData结构体,并输出原始数据和恢复后数据的对比信息。

四、ARXML配置文件示例

以下是一个简单的ARXML配置文件示例,用于配置上述的Transformer(假设为一个简单的车辆数据处理系统,实际配置会更复杂且包含更多细节)。

<?xml version="1.0" encoding="UTF-8"?>
<AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 autosar_4-0.xsd"><AR-PACKAGES><!-- 定义Transformer模块 --><ECUC-MODULE-DEFITIONS><XFRM><SHORT-NAME>VehicleDataTransformer</SHORT-NAME><XFRM-GENERAL><XFRM-DEV-ERROR-DETECT>true</XFRM-DEV-ERROR-DETECT><XFRM-INSTANCE-ID>0</XFRM-INSTANCE-ID><XFRM-VERSION-INFO-API>true</XFRM-VERSION-INFO-API></XFRM-GENERAL><XFRM-IMPLEMENTATION-MAPPING><!-- 配置SerializerTransformer --><XFRM-TRANSFORMATION-TECHNOLOGY-REF DEST="TRANSFORMATION-TECHNOLOGY">Serializer</XFRM-TRANSFORMATION-TECHNOLOGY-REF><XFRM-TRANSFORMER-CLASS-EXTRACT-PROTOCOL-HEADER-FIELDS>SERIALIZER</XFRM-TRANSFORMER-CLASS-EXTRACT-PROTOCOL-HEADER-FIELDS><XFRM-TRANSFORMER-BSW-MODULE-ENTRY-REF DEST="BSW-MODULE-ENTRY">SerializerTransformerEntry</XFRM-TRANSFORMER-BSW-MODULE-ENTRY-REF></XFRM-IMPLEMENTATION-MAPPING><XFRM-IMPLEMENTATION-MAPPING><!-- 配置SafetyTransformer --><XFRM-TRANSFORMATION-TECHNOLOGY-REF DEST="TRANSFORMATION-TECHNOLOGY">Safety</XFRM-TRANSFORMATION-TECHNOLOGY-REF><XFRM-TRANSFORMER-CLASS-EXTRACT-PROTOCOL-HEADER-FIELDS>SAFETY</XFRM-TRANSFORMER-CLASS-EXTRACT-PROTOCOL-HEADER-FIELDS><XFRM-TRANSFORMER-BSW-MODULE-ENTRY-REF DEST="BSW-MODULE-ENTRY">SafetyTransformerEntry</XFRM-TRANSFORMER-BSW-MODULE-ENTRY-REF></XFRM-IMPLEMENTATION-MAPPING></XFRM></ECUC-MODULE-DEFITIONS><!-- 定义数据转换相关的映射 --><SYSTEM-TEMPLATE><DATA-TRANSFORMATION-SET><DATA-TRANSFORMATION><SHORT-NAME>VehicleDataTransformation</SHORT-NAME><DATA-TRANSFORMATION-KIND>serializer</DATA-TRANSFORMATION-KIND><TRANSFORMATION-TECHNOLOGY><SHORT-NAME>Serializer</SHORT-NAME><PROTOCOL>VehicleDataSerializationProtocol</PROTOCOL><TRANSFORMER-CLASS>SERIALIZER</TRANSFORMER-CLASS><BUFFER-PROPERTIES><BUFFER-PROPERTY><SHORT-NAME>SerializerBuffer</SHORT-NAME><BUFFER-SIZE>1024</BUFFER-SIZE></BUFFER-PROPERTY></BUFFER-PROPERTIES></TRANSFORMATION-TECHNOLOGY><TRANSFORMATION-TECHNOLOGY><SHORT-NAME>Safety</SHORT-NAME><PROTOCOL>SafetyProtocol</PROTOCOL><TRANSFORMER-CLASS>SAFETY</TRANSFORMER-CLASS><BUFFER-PROPERTIES><BUFFER-PROPERTY><SHORT-NAME>SafetyBuffer</SHORT-NAME><BUFFER-SIZE>1024</BUFFER-SIZE></BUFFER-PROPERTY></BUFFER-PROPERTIES></TRANSFORMATION-TECHNOLOGY></DATA-TRANSFORMATION></DATA-TRANSFORMATION-SET></SYSTEM-TEMPLATE></AR-PACKAGES>

在上述ARXML配置文件中:

  1. <ECUC-MODULE-DEFITIONS>部分:
    • 定义了名为VehicleDataTransformer的Transformer模块。
    • <XFRM-GENERAL>节点配置了通用参数,如启用开发错误检测(XFRM-DEV-ERROR-DETECTtrue)、实例ID为0、启用版本信息API(XFRM-VERSION-INFO-APItrue)。
    • 有两个<XFRM-IMPLEMENTATION-MAPPING>节点,分别用于配置SerializerTransformerSafetyTransformer
      • 对于SerializerTransformer,通过<XFRM-TRANSFORMATION-TECHNOLOGY-REF>指定其对应的转换技术为Serializer<XFRM-TRANSFORMER-CLASS-EXTRACT-PROTOCOL-HEADER-FIELDS>设置为SERIALIZER<XFRM-TRANSFORMER-BSW-MODULE-ENTRY-REF>指向具体的BSW模块入口SerializerTransformerEntry
      • 对于SafetyTransformer,类似地,<XFRM-TRANSFORMATION-TECHNOLOGY-REF>指向Safety<XFRM-TRANSFORMER-CLASS-EXTRACT-PROTOCOL-HEADER-FIELDS>SAFETY<XFRM-TRANSFORMER-BSW-MODULE-ENTRY-REF>指向SafetyTransformerEntry
  2. <SYSTEM-TEMPLATE>部分:
    • <DATA-TRANSFORMATION-SET>中的<DATA-TRANSFORMATION>定义了数据转换的相关设置。
      • 名为VehicleDataTransformation的数据转换,其DATA-TRANSFORMATION-KINDserializer
      • 包含两个<TRANSFORMATION-TECHNOLOGY>节点,分别对应SerializerSafety的转换技术配置。
        • 对于Serializer转换技术,指定了协议名称为VehicleDataSerializationProtocol,所属的TRANSFORMER-CLASSSERIALIZER,并通过<BUFFER-PROPERTIES>设置了缓冲区属性,如缓冲区大小为1024字节(<BUFFER-SIZE>)。
        • 对于Safety转换技术,协议为SafetyProtocolTRANSFORMER-CLASSSAFETY,同样设置了缓冲区属性,缓冲区大小也是1024字节。

这个ARXML配置文件为Transformer模块及其相关的数据转换技术提供了基本的配置信息,使得在AUTOSAR系统中能够正确地识别、初始化和使用这些Transformer,以实现车辆数据在不同模块之间的转换和处理,同时保证数据的正确性、安全性和高效传输。实际应用中的ARXML配置会更加复杂,可能涉及更多的参数、数据映射关系以及与其他模块的集成配置等内容。

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

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

相关文章

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析

未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…

天津营业执照注销流程

营业执照不注销会有什么影响&#xff1f;1、公司不经营&#xff0c;放几年自动注销&#xff1f;真相&#xff1a;不管放多长时间&#xff0c;公司是不会自动注销的。相反&#xff0c;放任长久不维护&#xff0c;公司会出现异常&#xff0c;营业执照被吊销&#xff0c;公司股东、…

MySQL数据库专栏(五)连接MySQL数据库C API篇

摘要 本篇文章主要介绍通过C语言API接口链接MySQL数据库&#xff0c;各接口功能及使用方式&#xff0c;辅助类的封装及调用实例&#xff0c;可以直接移植到项目里面使用。 目录 1、环境配置 1.1、添加头文件 1.2、添加库目录 2、接口介绍 2.1、MySql初始化及数据清理 2.1.…

计算机课程管理:Spring Boot实现的工程认证路径

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足&#xff0c;创建了一个计算机管理基于工程教育认…

【无人机设计与控制】无人机集群路径规划:5种最新优化算法(ECO、AOA、SFOA、MGO、PLO)求解无人机集群路径规划

摘要 本文提出了基于无人机集群路径规划的研究&#xff0c;通过使用五种最新优化算法&#xff08;ECO、AOA、SFOA、MGO、PLO&#xff09;进行求解。这些算法主要优化无人机在复杂环境中的路径&#xff0c;以实现多目标规划问题的高效解。实验结果表明&#xff0c;不同算法在收…

从0开始搭建一个生产级SpringBoot2.0.X项目(十)SpringBoot 集成RabbitMQ

前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 SpringBoot集成RabbitMQ RabbitMQ中的一些角色&#xff1a; publisher&#xff1a;生产者 consumer&#xff1a;消费者 exchange个&#xff1a;交换机&#xff0c;负责消息路由 queue&#xff1a;队列…

牧神记开分9.7,2024新国漫巅峰出现了

现在国漫越来越卷了&#xff0c;卷播放量也卷评分。最近&#xff0c;b站上线不久的国漫《牧神记》开分9.7&#xff0c;口碑还是相当不错的&#xff0c;已经和《凡人修仙传》评分齐平。这部国漫仅仅播出4集&#xff0c;为什么就能获得这么高的评分呢&#xff1f;下面就一起来看看…

了解GPT大模型,读这本书就够了!(文末送书)

小异最近发现&#xff0c;当国外OpenAI的权力的游戏反转再反转的时候&#xff0c;国内的AI创业者们除了吃瓜之外也没闲着。 有很多程序员正在AIGC赛道中默默发财&#xff0c;有通过短视频做内容爆火&#xff0c;接广告的&#xff1b;有卖AI解决方案的&#xff1b;有卖AI课程的…

〔 MySQL 〕数据库基础

1. 数据库基础&#xff08;重点&#xff09; 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库?文件保存数据有以下几个缺点&#xff1a; ● 文件的安全性问题 ● 文件不利于数据查询和管理 ● 文件不利于存储海量数据 …

关于C++友元函数的优缺点和应用场景!

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 友元函数的相关内容&#xff01; 关于…

笔记本怎么开启TPM2.0_笔记本开启TPM2.0教程(不同笔记本开启tpm2.0方法)

在win11最低要求是提示&#xff0c;电脑必须满足 TPM 2.0&#xff0c;并开需要开启TPM 才能正常安装windows11系统&#xff0c;有很多笔记本的用户问我&#xff0c;笔记本怎么开启tpm功能呢&#xff1f;下面小编就给大家详细介绍一下笔记本开启tpm功能的方法。 如何确认你笔记本…

Fastjson反序列化漏洞部署复现1.2.24版本反序列RCE笔记

环境部署 docker容器地址&#xff1a;https://github.com/vulhub/vulhub/tree/master/fastjson/1.2.24-rce 启动docker环境 docker容器每次一启动就报错 根据docker log [容器id] 查看报错日志发现有如下报错 library initialization failed - unable to allocate file desc…

PostgreSQL pg-xact(clog)目录文件缺失处理

一、 背景 前些天晚上突然收到业务反馈&#xff0c;查询DB中的一个表报错 Could not open file "pg-xact/005E": No such file or directory. 两眼一黑难道是文件损坏了...登录查看DB日志&#xff0c;还好没有其他报错&#xff0c;业务也反馈只有这一个表在从库查询报…

【Python】项目结构

【Python】项目结构 前言前置知识Python 的基本项目结构int main() 与 def main() 的区别举例&#xff1a;基于 KNN 的 OpenCV 数字识别的项目结构 前言 本文总结了 Python 项目结构的知识&#xff0c;规范项目结构能使得项目开发过程高效流畅&#xff0c;提升代码可读性、团队…

arcgis pro 学习笔记

二维三维集合在一起&#xff0c;与arcgis不同 一、首次使用&#xff0c;几个基本设置 1.选项——常规里面设置自动保存时间 2.新建工程文件&#xff0c;会自动加载地图&#xff0c;可以在选项里面设置为无&#xff0c;以提高启动效率。 3.设置缓存位置&#xff0c;可勾选每次…

OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据 ECC 标准 78找到两幅图像之间的几何变换&#xff08;warp&#xff09;。 该函数根据 ECC 标准 ([78]) 估计最优变换&#xff08;warpMatri…

Redis 典型应用 - 缓存(cache)

一、什么是缓存 缓存(cache)是计算机中的⼀个经典的概念.在很多场景中都会涉及到. 核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅,⽅便随时读取. 这⾥所说的"触⼿可及"是个相对的概念. 对于硬件的访问速度来说,通常情况下: CPU寄存器>内存>…

DevCheck Pro手机硬件检测工具v5.33

前言 DevCheck Pro是一款手机硬件和操作系统信息检测查看工具&#xff0c;该软件的功能非常强大&#xff0c;为用户提供了系统、硬件、应用程序、相机、网络、电池等一系列信息查看功能 安装环境 [名称]&#xff1a;DevCheckPro [版本]&#xff1a;5.33 [大小]&a…

教程:FFmpeg结合GPU实现720p至4K视频转换

将一个 720p 的视频放大编码到 4K&#xff0c;这样的视频处理在很多业务场景中都会用到。很多视频社交、短视频、视频点播等应用&#xff0c;都会需要通过服务器来处理大量的视频编辑需求。 本文我们会探讨一下做这样的视频处理&#xff0c;最低的 GPU 指标应该是多少。利用开源…

鸿蒙进阶篇-网格布局 Grid/GridItem(二)

hello大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天让我们来继续学习鸿蒙进阶篇-网格布局 Grid/GridItem&#xff0c;上一篇博文我们已经学习了固定行列、合并行列和设置滚动&#xff0c;这一篇我们将继续学习Grid的用法&#xff0c;实现翻页滚动、自定义滚动条样式&…