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

AUTOSAR进阶图解==>AUTOSAR_TPS_ARXMLSerializationRules

AUTOSAR ARXML序列化规则详解

AUTOSAR XML序列化标准与工具互操作性规范

目录

  • 1. 概述
  • 2. AUTOSAR ARXML序列化规则体系
  • 3. XML Schema生产规则与ARXML序列化规则关系
  • 4. XML格式化规则分类
  • 5. AUTOSAR XML根元素结构
  • 6. 总结

1. 概述

AUTOSAR ARXML序列化规则是AUTOSAR标准体系中的重要组成部分,定义了如何将AUTOSAR模型序列化为XML描述文件。本文档详细阐述了ARXML序列化规则的核心概念、体系结构和实现要求。

1.1 文档目的

本文档的主要目的是:

  • 支持AUTOSAR工具互操作性:通过定义标准化的XML序列化规则,确保不同AUTOSAR工具之间能够正确交换模型数据
  • 简化XML描述比较:通过定义规范化的表示形式,避免因缩进、字符编码等无意义差异导致的比较困难
  • 减少工具实现工作量:通过限制XML的不同变体,如不同的命名空间前缀、字符编码、文件名等,降低工具开发复杂度

1.2 文档范围

本文档涵盖了以下核心内容:

  • 物理层规则:文件分离、文件命名、字符编码等物理表示要求
  • 数据格式规则:XML版本、注释、处理指令、根元素等格式规范
  • 序列化约束:超出XML Schema验证的额外约束条件

2. AUTOSAR ARXML序列化规则体系

AUTOSAR ARXML序列化规则是整个AUTOSAR模板规范体系的重要组成部分,与其他模板规范共同构成了完整的数据交换格式定义。

在这里插入图片描述

图2.1: AUTOSAR ARXML序列化规则体系概览

2.1 体系结构分析

2.1.1 AUTOSAR模板规范体系

ARXML序列化规则(本文档)

  • 功能:定义XML序列化标准,确保工具互操作性,简化XML描述比较,减少无意义差异
  • 职责范围:物理表示和XML数据格式的规范化
  • 与其他规范的关系:补充XML Schema生产规则的约束条件

XML Schema生产规则

  • 功能:定义元模型到XML Schema的映射规则
  • 职责范围:指定XML结构定义,处理数据类型转换,管理命名空间
  • 与元模型的关系:建立AUTOSAR元模型到XML Schema的映射关系

软件组件模板、系统模板、ECU配置模板

  • 功能:定义数据结构和语义
  • 职责范围:指定AUTOSAR特定的数据结构和语义
  • 与内容的关系:为模型元素提供具体的定义和约束
2.1.2 AUTOSAR元模型层

AUTOSAR元模型(UML2.0)

  • 功能:形式化和维护AUTOSAR数据交换格式的数据结构和语义
  • 职责范围:在AUTOSAR元模型中定义语言构建块
  • 与XML Schema的关系:通过映射规则生成XML Schema

AUTOSAR XML Schema

  • 功能:定义AUTOSAR模型交换的语言
  • 职责范围:从AUTOSAR元模型派生的W3C XML Schema
  • 与序列化规则的关系:提供基础的结构验证
2.1.3 物理表示和XML数据格式

文件分离规则

  • 功能:定义AUTOSAR模型的文件分离策略
  • 职责范围:指定如何将模型分割到多个文件中
  • 实现要求:支持模型的分层和模块化组织

文件命名规则

  • 功能:规范ARXML文件的命名约定
  • 职责范围:定义文件扩展名、长度限制等命名要求
  • 标准要求:使用.arxml扩展名,文件名长度限制为255字符

XML格式规则

  • 功能:定义XML元素的格式化标准
  • 职责范围:指定缩进、属性排序、元素布局等格式要求
  • 目标:确保XML文件的可读性和一致性

字符编码规则

  • 功能:指定XML文件的字符编码要求
  • 职责范围:强制使用UTF-8编码,不允许UTF BOM
  • 国际化支持:确保对多语言字符的正确支持

2.2 代码示例

/* AUTOSAR XML序列化配置示例 */
typedef struct {uint8 encodingType;        /* 编码类型:UTF-8 */uint8 xmlVersion;          /* XML版本:1.0 */uint16 maxFileNameLength;  /* 最大文件名长度:255 */boolean useBOM;            /* 是否使用BOM:false */uint8 indentationSize;     /* 缩进大小:2字符 */
} ARXML_SerializationConfigType;/* 序列化规则验证函数 */
Std_ReturnType ARXML_ValidateSerializationRules(const ARXML_SerializationConfigType* config)
{if (config == NULL) {return E_NOT_OK;}/* 验证编码类型 */if (config->encodingType != ENCODING_UTF8) {return E_NOT_OK;}/* 验证XML版本 */if (config->xmlVersion != XML_VERSION_1_0) {return E_NOT_OK;}/* 验证文件名长度 */if (config->maxFileNameLength > 255) {return E_NOT_OK;}/* 验证BOM设置 */if (config->useBOM == TRUE) {return E_NOT_OK; /* 不允许使用BOM */}return E_OK;
}

3. XML Schema生产规则与ARXML序列化规则关系

XML Schema生产规则与ARXML序列化规则在AUTOSAR模型序列化过程中扮演不同的角色,但相互补充,共同确保XML描述的正确性和一致性。

在这里插入图片描述

图3.1: XML Schema生产规则与ARXML序列化规则关系

3.1 层次关系分析

3.1.1 AUTOSAR用户模型层

AUTOSAR模型实例

  • 功能:AUTOSAR元模型的实例化表示
  • 职责范围:包含具体的模型数据和配置信息
  • 与元模型的关系:通过instanceOf关系实例化AUTOSAR元模型
3.1.2 AUTOSAR元模型层

AUTOSAR元模型(M2层)

  • 功能:定义AUTOSAR系统的语言构建块
  • 职责范围:使用UML2.0类图描述属性和相互关系
  • 与XML Schema的关系:通过映射规则生成XML Schema
3.1.3 XML Schema层

AUTOSAR XML Schema

  • 功能:定义AUTOSAR模型交换的语言
  • 职责范围:从AUTOSAR元模型派生的W3C XML Schema
  • 验证功能:提供XML文档的结构验证
3.1.4 序列化规则层

XML Schema生产规则

  • 功能:定义元模型到XML Schema的映射规则
  • 职责范围:指定XML结构定义,处理数据类型转换,管理命名空间
  • 映射关系:建立AUTOSAR元模型到XML Schema的映射

ARXML序列化规则

  • 功能:定义XML格式化标准,指定字符编码要求,规范文件命名约定
  • 职责范围:确保工具互操作性,简化XML描述比较
  • 约束补充:提供超出XML Schema验证的额外约束
3.1.5 输出层

AUTOSAR XML描述

  • 功能:符合XML Schema验证,遵循序列化规则
  • 职责范围:支持工具间交换,便于文本比较
  • 验证要求:必须通过XML Schema验证和序列化规则检查

3.2 代码示例

/* AUTOSAR模型序列化处理示例 */
typedef struct {AUTOSAR_MetaModelType* metaModel;     /* 元模型引用 */XML_SchemaType* xmlSchema;            /* XML Schema引用 */Serialization_RulesType* rules;       /* 序列化规则 */
} AUTOSAR_SerializationContextType;/* 模型序列化主函数 */
Std_ReturnType AUTOSAR_SerializeModel(const AUTOSAR_ModelType* model, const AUTOSAR_SerializationContextType* context,char* outputBuffer, uint32 bufferSize)
{Std_ReturnType result;if (model == NULL || context == NULL || outputBuffer == NULL) {return E_NOT_OK;}/* 步骤1:验证模型实例化关系 */result = ValidateModelInstance(model, context->metaModel);if (result != E_OK) {return E_NOT_OK;}/* 步骤2:应用XML Schema映射规则 */result = ApplyXMLSchemaMapping(model, context->xmlSchema);if (result != E_OK) {return E_NOT_OK;}/* 步骤3:应用ARXML序列化规则 */result = ApplyARXMLSerializationRules(model, context->rules);if (result != E_OK) {return E_NOT_OK;}/* 步骤4:生成XML描述 */result = GenerateXMLDescription(model, outputBuffer, bufferSize);if (result != E_OK) {return E_NOT_OK;}/* 步骤5:验证生成的XML描述 */result = ValidateXMLDescription(outputBuffer, context->xmlSchema);if (result != E_OK) {return E_NOT_OK;}return E_OK;
}/* XML Schema映射应用函数 */
Std_ReturnType ApplyXMLSchemaMapping(const AUTOSAR_ModelType* model, const XML_SchemaType* schema)
{/* 应用命名空间映射 */if (ApplyNamespaceMapping(model, schema) != E_OK) {return E_NOT_OK;}/* 应用数据类型转换 */if (ApplyDataTypeConversion(model, schema) != E_OK) {return E_NOT_OK;}/* 应用结构映射 */if (ApplyStructureMapping(model, schema) != E_OK) {return E_NOT_OK;}return E_OK;
}/* ARXML序列化规则应用函数 */
Std_ReturnType ApplyARXMLSerializationRules(const AUTOSAR_ModelType* model,const Serialization_RulesType* rules)
{/* 应用字符编码规则 */if (ApplyEncodingRules(model, rules) != E_OK) {return E_NOT_OK;}/* 应用格式化规则 */if (ApplyFormattingRules(model, rules) != E_OK) {return E_NOT_OK;}/* 应用命名规则 */if (ApplyNamingRules(model, rules) != E_OK) {return E_NOT_OK;}return E_OK;
}

4. XML格式化规则分类

AUTOSAR ARXML序列化规则定义了多种XML格式化方法,每种方法适用于不同的元素类型和场景,确保XML文档的一致性和可读性。

在这里插入图片描述

图4.1: XML格式化规则分类

4.1 XML格式化方法

4.1.1 NewLine格式化

NewLine格式化

  • 功能:元素显示在新行,提供清晰的层次结构
  • 适用场景:复杂嵌套结构,需要清晰层次显示,便于人工阅读,支持文本比较工具
  • 格式化要求
    • 缩进2字符/级别
    • XML属性按字母排序
    • 每个属性单独一行
    • 开始标签在新行
    • 结束标签在新行
4.1.2 OneLine格式化

OneLine格式化

  • 功能:元素在一行显示,提供紧凑的表示
  • 适用场景:简单元素,内容较少的元素,紧凑显示需求,减少文件大小
  • 格式化要求
    • 开始和结束标签同行
    • 内容与标签同行
    • 保持元素的完整性
4.1.3 InLine格式化

InLine格式化

  • 功能:元素在文本中浮动,保持原始格式
  • 适用场景:需要保持原始空白格式的元素
  • 格式化要求
    • 不改变周围空白
    • 不插入新行
    • 保持元素内空白

4.2 空白处理策略

4.2.1 NormalizeWhitespace

NormalizeWhitespace

  • 功能:标准化空白字符处理
  • 处理规则
    • 移除前后空白
    • 回车替换为空格
    • 连续空格替换为单个
    • 不执行换行
4.2.2 KeepWhitespace

KeepWhitespace

  • 功能:保持空白字符不变
  • 处理规则
    • 保持空白不变
    • 不改变空白字符
    • 保持原始格式
4.2.3 PreserveWhitespace

PreserveWhitespace

  • 功能:完全保持空白字符
  • 处理规则
    • 完全保持空白
    • xml:space=preserve
    • 保持所有空白字符

4.3 特殊元素处理

4.3.1 空元素处理

空元素处理

  • 功能:规范空元素的表示方式
  • 处理规则
    • 使用开始/结束标签对
    • 不使用空标签
    • 示例:<VALUE></VALUE>
4.3.2 层次完整性

层次完整性

  • 功能:确保XML层次结构的完整性
  • 处理规则
    • 不包含不完整层次
    • 避免空包装器
    • 确保语义完整性
4.3.3 元素排序

元素排序

  • 功能:确保确定性序列化
  • 排序规则
    • 按atp.Splitkey排序
    • 默认键:shortName
    • 次要键:shortLabel
    • 第三键:variationPoint.shortLabel

4.4 代码示例

/* XML格式化规则应用示例 */
typedef enum {FORMAT_NEWLINE,    /* 新行格式化 */FORMAT_ONELINE,    /* 单行格式化 */FORMAT_INLINE      /* 内联格式化 */
} XML_FormatType;typedef enum {WHITESPACE_NORMALIZE,  /* 标准化空白 */WHITESPACE_KEEP,       /* 保持空白 */WHITESPACE_PRESERVE    /* 保留空白 */
} XML_WhitespaceType;/* XML格式化配置结构 */
typedef struct {XML_FormatType formatType;           /* 格式化类型 */XML_WhitespaceType whitespaceType;   /* 空白处理类型 */uint8 indentationSize;               /* 缩进大小 */boolean sortAttributes;              /* 是否排序属性 */boolean useEmptyTags;                /* 是否使用空标签 */
} XML_FormattingConfigType;/* XML元素格式化函数 */
Std_ReturnType XML_FormatElement(const XML_ElementType* element,const XML_FormattingConfigType* config,char* outputBuffer,uint32 bufferSize)
{if (element == NULL || config == NULL || outputBuffer == NULL) {return E_NOT_OK;}switch (config->formatType) {case FORMAT_NEWLINE:return FormatElementNewLine(element, config, outputBuffer, bufferSize);case FORMAT_ONELINE:return FormatElementOneLine(element, config, outputBuffer, bufferSize);case FORMAT_INLINE:return FormatElementInLine(element, config, outputBuffer, bufferSize);default:return E_NOT_OK;}
}/* 新行格式化实现 */
static Std_ReturnType FormatElementNewLine(const XML_ElementType* element,const XML_FormattingConfigType* config,char* outputBuffer,uint32 bufferSize)
{uint32 offset = 0;/* 添加缩进 */offset += AddIndentation(outputBuffer + offset, config->indentationSize);/* 添加开始标签 */offset += snprintf(outputBuffer + offset, bufferSize - offset, "<%s", element->name);/* 处理属性 */if (element->attributeCount > 0) {if (config->sortAttributes) {SortAttributes(element->attributes, element->attributeCount);}for (uint8 i = 0; i < element->attributeCount; i++) {offset += snprintf(outputBuffer + offset, bufferSize - offset, "\n");offset += AddIndentation(outputBuffer + offset, config->indentationSize + 2);offset += snprintf(outputBuffer + offset, bufferSize - offset, "%s=\"%s\"",element->attributes[i].name,element->attributes[i].value);}}/* 处理内容 */if (element->content != NULL && strlen(element->content) > 0) {offset += snprintf(outputBuffer + offset, bufferSize - offset, ">");offset += snprintf(outputBuffer + offset, bufferSize - offset, "\n");offset += AddIndentation(outputBuffer + offset, config->indentationSize + 2);offset += snprintf(outputBuffer + offset, bufferSize - offset, "%s", element->content);offset += snprintf(outputBuffer + offset, bufferSize - offset, "\n");offset += AddIndentation(outputBuffer + offset, config->indentationSize);offset += snprintf(outputBuffer + offset, bufferSize - offset, "</%s>", element->name);} else {/* 空元素处理 */if (config->useEmptyTags) {offset += snprintf(outputBuffer + offset, bufferSize - offset, "/>");} else {offset += snprintf(outputBuffer + offset, bufferSize - offset, "></%s>", element->name);}}return (offset < bufferSize) ? E_OK : E_NOT_OK;
}/* 空白处理函数 */
Std_ReturnType XML_ProcessWhitespace(const char* input,XML_WhitespaceType type,char* output,uint32 outputSize)
{if (input == NULL || output == NULL) {return E_NOT_OK;}switch (type) {case WHITESPACE_NORMALIZE:return NormalizeWhitespace(input, output, outputSize);case WHITESPACE_KEEP:return KeepWhitespace(input, output, outputSize);case WHITESPACE_PRESERVE:return PreserveWhitespace(input, output, outputSize);default:return E_NOT_OK;}
}

5. AUTOSAR XML根元素结构

AUTOSAR XML文档的根元素结构定义了XML文档的基本框架,包括XML声明、命名空间声明、Schema位置声明和内容结构。

在这里插入图片描述

图5.1: AUTOSAR XML根元素结构

5.1 XML声明

5.1.1 XML版本声明

XML版本声明

  • 功能:指定XML文档的版本和编码信息
  • 要求
    • version=“1.0”
    • encoding=“UTF-8”
    • 必须使用UTF-8编码
    • 不允许其他编码
5.1.2 字符编码规则

字符编码规则

  • 功能:确保XML文档的字符编码一致性
  • 要求
    • 必须使用UTF-8
    • 不允许UTF BOM
    • XML声明中明确指定
    • 支持国际化字符

5.2 AUTOSAR根元素

5.2.1 AUTOSAR元素

AUTOSAR元素

  • 功能:AUTOSAR XML文档的根元素
  • 属性
    • xmlns=“http://autosar.org/schema/r4.0”
    • xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
    • xsi:schemaLocation=“…”
    • 根元素名称:AUTOSAR
5.2.2 命名空间声明

命名空间声明

  • 功能:定义XML文档中使用的命名空间
  • 要求
    • AUTOSAR命名空间:http://autosar.org/schema/r4.0
    • XML Schema实例命名空间
    • 默认命名空间(无前缀)
    • 不允许第三方命名空间
5.2.3 Schema位置声明

Schema位置声明

  • 功能:指定XML Schema文件的位置
  • 要求
    • xsi:schemaLocation属性
    • AUTOSAR命名空间URI
    • Schema文件位置提示
    • 格式:AUTOSAR_{number}.xsd

5.3 内容结构

5.3.1 管理数据

管理数据

  • 功能:提供文档的管理信息
  • 内容
    • adminData:AdminData
    • 文件信息:fileInfo
    • 注释:Comment
    • 介绍:introduction
5.3.2 AR包

AR包

  • 功能:AUTOSAR模型的主要内容容器
  • 内容
    • arPackage:ARPackage
    • 顶层包结构
    • 模型内容容器
    • 支持多个包
5.3.3 文件信息注释

文件信息注释

  • 功能:提供结构化的文档注释
  • 内容
    • fileInfoComment:FileInfoComment
    • 结构化注释
    • 免责声明和法律信息
    • atpStructuredComment

5.4 版本管理

5.4.1 AUTOSAR版本

AUTOSAR版本

  • 功能:标识AUTOSAR标准的版本信息
  • 内容
    • 版本号:4.4.0
    • 向后兼容性
    • 版本序列管理
    • Schema版本对应
5.4.2 版本方案

版本方案

  • 功能:定义不同平台的版本管理策略
  • 内容
    • 经典平台:三元素版本(major.minor.patch)
    • 自适应平台:两元素版本(year-month)
    • Schema版本:单元素数字
    • 版本映射关系

5.5 代码示例

/* AUTOSAR XML根元素生成示例 */
typedef struct {char version[10];              /* XML版本 */char encoding[10];             /* 字符编码 */char namespace[100];           /* AUTOSAR命名空间 */char schemaLocation[200];      /* Schema位置 */char revision[20];             /* AUTOSAR版本 */
} AUTOSAR_XMLHeaderType;/* XML文档根元素结构 */
typedef struct {AUTOSAR_XMLHeaderType header;  /* XML头部信息 */AdminData_Type* adminData;     /* 管理数据 */ARPackage_Type* arPackage;     /* AR包 */FileInfoComment_Type* fileInfoComment; /* 文件信息注释 */
} AUTOSAR_XMLRootType;/* 生成XML声明 */
Std_ReturnType GenerateXMLDeclaration(const AUTOSAR_XMLHeaderType* header,char* outputBuffer,uint32 bufferSize)
{if (header == NULL || outputBuffer == NULL) {return E_NOT_OK;}uint32 offset = snprintf(outputBuffer, bufferSize,"<?xml version=\"%s\" encoding=\"%s\"?>\n",header->version, header->encoding);return (offset < bufferSize) ? E_OK : E_NOT_OK;
}/* 生成AUTOSAR根元素 */
Std_ReturnType GenerateAUTOSARRootElement(const AUTOSAR_XMLRootType* root,char* outputBuffer,uint32 bufferSize)
{if (root == NULL || outputBuffer == NULL) {return E_NOT_OK;}uint32 offset = 0;/* 开始标签 */offset += snprintf(outputBuffer + offset, bufferSize - offset,"<AUTOSAR\n");offset += snprintf(outputBuffer + offset, bufferSize - offset,"  xmlns=\"%s\"\n",root->header.namespace);offset += snprintf(outputBuffer + offset, bufferSize - offset,"  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");offset += snprintf(outputBuffer + offset, bufferSize - offset,"  xsi:schemaLocation=\"%s %s\">\n",root->header.namespace,root->header.schemaLocation);/* 管理数据 */if (root->adminData != NULL) {offset += GenerateAdminData(root->adminData, outputBuffer + offset, bufferSize - offset);}/* 文件信息注释 */if (root->fileInfoComment != NULL) {offset += GenerateFileInfoComment(root->fileInfoComment,outputBuffer + offset,bufferSize - offset);}/* AR包 */if (root->arPackage != NULL) {offset += GenerateARPackage(root->arPackage,outputBuffer + offset,bufferSize - offset);}/* 结束标签 */offset += snprintf(outputBuffer + offset, bufferSize - offset,"</AUTOSAR>\n");return (offset < bufferSize) ? E_OK : E_NOT_OK;
}/* 生成管理数据 */
static uint32 GenerateAdminData(const AdminData_Type* adminData,char* outputBuffer,uint32 bufferSize)
{uint32 offset = 0;offset += snprintf(outputBuffer + offset, bufferSize - offset,"  <ADMIN-DATA>\n");/* 生成管理数据内容 */if (adminData->fileInfo != NULL) {offset += GenerateFileInfo(adminData->fileInfo,outputBuffer + offset,bufferSize - offset);}if (adminData->comment != NULL) {offset += GenerateComment(adminData->comment,outputBuffer + offset,bufferSize - offset);}if (adminData->introduction != NULL) {offset += GenerateIntroduction(adminData->introduction,outputBuffer + offset,bufferSize - offset);}offset += snprintf(outputBuffer + offset, bufferSize - offset,"  </ADMIN-DATA>\n");return offset;
}/* 版本兼容性检查 */
Std_ReturnType CheckVersionCompatibility(const char* documentVersion,const char* schemaVersion)
{if (documentVersion == NULL || schemaVersion == NULL) {return E_NOT_OK;}/* 解析版本号 */uint16 docMajor, docMinor, docPatch;uint16 schemaMajor, schemaMinor, schemaPatch;if (ParseVersionString(documentVersion, &docMajor, &docMinor, &docPatch) != E_OK) {return E_NOT_OK;}if (ParseVersionString(schemaVersion, &schemaMajor, &schemaMinor, &schemaPatch) != E_OK) {return E_NOT_OK;}/* 检查主版本兼容性 */if (docMajor != schemaMajor) {return E_NOT_OK;}/* 检查次版本兼容性 */if (docMinor > schemaMinor) {return E_NOT_OK;}return E_OK;
}

6. 总结

AUTOSAR ARXML序列化规则为AUTOSAR工具生态系统提供了标准化的XML序列化规范,确保了工具间的互操作性和数据交换的一致性。

6.1 核心优势

  • 工具互操作性:通过统一的序列化规则,确保不同AUTOSAR工具能够正确交换模型数据
  • 简化比较:规范化的XML表示形式避免了无意义的差异,简化了XML文档的比较过程
  • 降低开发成本:标准化的规则减少了工具开发者的实现工作量
  • 国际化支持:强制使用UTF-8编码确保了多语言字符的正确处理

6.2 应用场景

  • 模型交换:在不同AUTOSAR工具之间交换模型数据
  • 版本控制:在版本控制系统中比较和管理XML文档
  • 工具验证:验证工具生成的XML文档是否符合标准
  • 文档生成:生成符合标准的AUTOSAR XML文档

6.3 技术要点

  • 物理层规范:文件分离、命名、编码等物理表示要求
  • 格式标准化:XML格式化、空白处理、元素排序等格式规范
  • 版本管理:支持不同AUTOSAR版本的向后兼容性
  • 约束验证:超出XML Schema的额外约束条件

通过遵循AUTOSAR ARXML序列化规则,开发者和工具提供商可以确保生成的XML文档具有一致性和可互操作性,为AUTOSAR生态系统的健康发展提供重要支撑。


文章转载自:

http://3o50vLve.rnmdp.cn
http://fQP7MFYe.rnmdp.cn
http://VGakwZxq.rnmdp.cn
http://BGJni3bx.rnmdp.cn
http://yEOMxZyG.rnmdp.cn
http://CVRQwFFc.rnmdp.cn
http://NW5MHfml.rnmdp.cn
http://Nu8DL1nt.rnmdp.cn
http://SEm7rAPh.rnmdp.cn
http://IrHgxNBW.rnmdp.cn
http://Obpg7g4M.rnmdp.cn
http://6dCYVS4F.rnmdp.cn
http://JJedbTGm.rnmdp.cn
http://ZWXeZHd5.rnmdp.cn
http://1BVtaTZn.rnmdp.cn
http://xbFahF3C.rnmdp.cn
http://fae1KtXG.rnmdp.cn
http://X63zU9Dw.rnmdp.cn
http://DN40EUWD.rnmdp.cn
http://39e3fgDf.rnmdp.cn
http://7J6SIx2C.rnmdp.cn
http://xZ7WE3cg.rnmdp.cn
http://OEyy7NeG.rnmdp.cn
http://2gDRhXUE.rnmdp.cn
http://dMGbcAQk.rnmdp.cn
http://ZYfEbEB1.rnmdp.cn
http://9OKjlhn1.rnmdp.cn
http://noU5AXnZ.rnmdp.cn
http://FpmVnM21.rnmdp.cn
http://QP4bZ0km.rnmdp.cn
http://www.dtcms.com/a/365928.html

相关文章:

  • Linux学习-硬件
  • 2025年IT行业入门级证书选择与分析
  • 从竞态到原子:pread/pwrite 如何重塑高效文件 I/O?
  • 深入浅出:YOLOv8性能评估指标与电科金仓2025AI新成果
  • SuperMap GIS基础产品FAQ集锦(20250819)
  • C++----模板特化以及模板声明与定义分离问题
  • 2025 大学生必考 IT 行业证书
  • BigemapPro中的坐标定位于与拾取
  • NuttX编译流程与config.h生成解析
  • STM32G4 电流环闭环
  • Springboot3+SpringSecurity6Oauth2+vue3前后端分离认证授权-授权服务
  • 后端框架(SpringBoot):自动配置的底层执行流程
  • 2025年经管专业人士证书选择与分析
  • 深入理解Cloudflare错误1006、1007和1008:原因、解决方案和预防措施
  • Android创建demo脚本
  • 比亚迪欧洲逆袭特斯拉,新能源出海新纪录!
  • Redis 哨兵模式(Sentinel Mode)
  • Reflection反射
  • rsync + lsyncd 的高效文件实时同步系统
  • Docker Pull 代理配置方法
  • 投影矩阵:计算机图形学中的三维到二维转换
  • GDAL 下载安装
  • 【深度学习新浪潮】用3DGS做三维重建有哪些主要的技术路线可供选择?
  • 论文介绍:“DUSt3R”,让 3D 视觉从“繁琐”走向“直观”
  • Redis初阶学习
  • 今日行情明日机会——20250903
  • 数据结构:图(Graph)
  • react-android-0.80.2-debug.aar下载很慢
  • ESLint 中与 Prettier 规则 与 editorconfig优先级
  • 如何开发一款高稳定、低延迟、功能全面的RTSP播放器?