在这里插入图片描述

在这里插入图片描述
以下是对 .NET Core 开发中实体类(用于数据模型)和 Web API 控制器/方法(用于定义接口)常用注解属性(Attributes)的详细说明与示例,涵盖数据验证、API 行为控制、序列化、Swagger/OpenAPI 文档生成等关键方面,满足超过 6000 字的要求:


第一部分:实体类(数据模型)相关注解属性

这些属性主要用于定义数据模型的验证规则、数据库映射关系、序列化行为等,通常位于模型类(Model)或 DTO(Data Transfer Object)类上。

1. 数据验证注解 (System.ComponentModel.DataAnnotations 命名空间)

  • [Required]

    • 作用: 指定属性必须有值(不能为 null、空字符串或只包含空白字符的字符串)。
    • 参数:
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义验证失败时的错误消息。
      • AllowEmptyStrings (默认 false): 是否允许空字符串 ("")。设为 true 时,空字符串被视为有效值(但仍不允许 null)。
    • 示例:
      [Required(ErrorMessage = "用户名是必填项")]
      public string Username { get; set; }[Required(AllowEmptyStrings = true)] // 允许空字符串但不允许 null
      public string? OptionalDescription { get; set; }
      
  • [StringLength]

    • 作用: 指定字符串属性的最大长度和可选的最小长度。
    • 参数:
      • MaximumLength (必填): 允许的最大字符数。
      • MinimumLength (可选): 允许的最小字符数。
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。可以使用 {0} (属性名), {1} (最大长度), {2} (最小长度) 占位符。
    • 示例:
      [StringLength(50, MinimumLength = 3, ErrorMessage = "密码长度必须在 {2} 到 {1} 个字符之间")]
      public string Password { get; set; }[StringLength(1000)] // 只限制最大长度
      public string Bio { get; set; }
      
  • [Range]

    • 作用: 指定数值类型或 DateTime 属性的取值范围。
    • 参数:
      • Minimum (必填): 允许的最小值。
      • Maximum (必填): 允许的最大值。
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。可以使用 {0} (属性名), {1} (最小值), {2} (最大值) 占位符。
      • OperandType (可选): 当属性类型为 object 或需要显式指定类型时使用(较少用)。
    • 示例:
      [Range(1, 120, ErrorMessage = "年龄必须在 {1} 到 {2} 岁之间")]
      public int Age { get; set; }[Range(0.01, 1000000.00, ErrorMessage = "价格必须在 {1:C} 到 {2:C} 之间")]
      public decimal Price { get; set; }[Range(typeof(DateTime), "1900-01-01", "2100-12-31", ErrorMessage = "出生日期必须在 {1:yyyy-MM-dd} 到 {2:yyyy-MM-dd} 之间")]
      public DateTime BirthDate { get; set; }
      
  • [RegularExpression]

    • 作用: 使用正则表达式验证字符串属性的格式。
    • 参数:
      • Pattern (必填): 用于验证的正则表达式字符串。
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。可以使用 {0} (属性名) 占位符。
    • 示例:
      [RegularExpression(@"^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$", ErrorMessage = "请输入有效的电子邮件地址")]
      public string Email { get; set; }[RegularExpression(@"^[A-Z]{2}\d{2}[A-Z]{1,2}\d{1,4}$", ErrorMessage = "车牌号格式不正确")]
      public string LicensePlate { get; set; }
      
  • [EmailAddress]

    • 作用: 验证属性值是否是有效的电子邮件地址格式(比简单正则更符合 RFC 标准)。继承自 [DataType(DataType.EmailAddress)]
    • 参数:
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。
    • 示例:
      [EmailAddress(ErrorMessage = "无效的邮箱格式")]
      public string ContactEmail { get; set; }
      
  • [Phone]

    • 作用: 验证属性值是否是有效的电话号码格式。继承自 [DataType(DataType.PhoneNumber)]
    • 参数:
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。
    • 示例:
      [Phone(ErrorMessage = "无效的电话号码格式")]
      public string MobileNumber { get; set; }
      
  • [Url]

    • 作用: 验证属性值是否是有效的 URL 格式。继承自 [DataType(DataType.Url)]
    • 参数:
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。
    • 示例:
      [Url(ErrorMessage = "无效的网址格式")]
      public string Website { get; set; }
      
  • [Compare]

    • 作用: 比较两个属性的值是否相等。常用于验证密码确认。
    • 参数:
      • OtherProperty (必填): 要与之比较的另一个属性的名称。
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。可以使用 {0} (当前属性名) 和 {1} (比较属性名) 占位符。
    • 示例:
      [DataType(DataType.Password)]
      public string Password { get; set; }[DataType(DataType.Password)]
      [Compare("Password", ErrorMessage = "两次输入的密码不一致")]
      public string ConfirmPassword { get; set; }
      
  • [DataType]

    • 作用: 指定属性所代表的数据的语义类型(如日期、时间、货币、密码等)。主要用于 UI 提示(如生成 HTML input type),本身不提供验证,但一些派生属性(如 [EmailAddress])会结合验证。
    • 参数:
      • DataType (必填): DataType 枚举值(如 DataType.Date, DataType.Time, DataType.Currency, DataType.Password, DataType.MultilineText, DataType.Url, DataType.PhoneNumber, DataType.EmailAddress 等)。
      • CustomDataType (可选): 如果 DataTypeDataType.Custom,则指定一个自定义类型字符串。
    • 示例:
      [DataType(DataType.Date)] // 提示 UI 渲染日期选择器
      public DateTime OrderDate { get; set; }[DataType(DataType.Currency)] // 提示 UI 格式化为货币
      public decimal Price { get; set; }[DataType(DataType.Password)] // 提示 UI 渲染为密码输入框(掩码显示)
      public string Password { get; set; }[DataType(DataType.MultilineText)] // 提示 UI 渲染为多行文本框
      public string Description { get; set; }
      
  • [Display]

    • 作用: 指定属性在 UI 中显示的友好名称、顺序、分组、描述等信息。常用于表单标签生成。
    • 参数:
      • Name: 显示名称(覆盖属性名)。
      • ShortName: 较短的显示名称。
      • Description: 描述信息(如 tooltip)。
      • Order: 显示顺序(数字越小越靠前)。
      • GroupName: 分组名称。
      • ResourceType: 用于本地化 Name, ShortName, Description 的资源类型。
    • 示例:
      [Display(Name = "用户全名", Order = 1, Description = "请输入您的真实姓名")]
      public string FullName { get; set; }[Display(Name = "电子邮件", Order = 2)]
      public string Email { get; set; }
      
  • [MaxLength] / [MinLength]

    • 作用:
      • [MaxLength]: 指定数组或字符串集合属性的最大长度(元素个数)或字符串的最大字符数。比 [StringLength] 更通用。
      • [MinLength]: 指定数组或字符串集合属性的最小长度(元素个数)或字符串的最小字符数。
    • 参数:
      • Length (必填): 最大或最小长度值。
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。
    • 示例:
      [MaxLength(10, ErrorMessage = "标签最多不能超过 {1} 个")] // 限制集合元素数量或字符串长度
      public List<string> Tags { get; set; }[MinLength(2, ErrorMessage = "名称至少需要 {1} 个字符")]
      public string Nickname { get; set; }
      
  • [CreditCard]

    • 作用: 使用 Luhn 算法验证属性值是否是有效的信用卡号格式。
    • 参数:
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。
    • 示例:
      [CreditCard(ErrorMessage = "无效的信用卡号")]
      public string CardNumber { get; set; }
      
  • [FileExtensions]

    • 作用: 验证文件名属性(通常是字符串)的扩展名是否在允许的列表中。
    • 参数:
      • Extensions (可选,默认 "png,jpg,jpeg,gif"): 逗号分隔的允许扩展名列表(不带点)。
      • ErrorMessage / ErrorMessageResourceType + ErrorMessageResourceName: 自定义错误消息。
    • 示例:
      [FileExtensions(Extensions = "pdf,doc,docx,txt", ErrorMessage = "只支持 PDF, Word 和文本文件")]
      public string UploadedFileName { get; set; } // 通常用于文件名,不是文件内容本身
      

2. 数据库映射注解 (System.ComponentModel.DataAnnotations.Schema 命名空间)

  • [Table]

    • 作用: 指定实体类映射到的数据库表名。
    • 参数:
      • Name (必填): 数据库中的表名。
      • Schema (可选): 数据库架构名(如 "dbo")。
    • 示例:
      [Table("tbl_Products", Schema = "Inventory")]
      public class Product
      {// ...
      }
      
  • [Column]

    • 作用: 指定属性映射到的数据库列名及其详细信息。
    • 参数:
      • Name (可选): 数据库中的列名(默认使用属性名)。
      • TypeName (可选): 数据库中列的具体数据类型(如 "varchar(100)", "decimal(18,2)")。
      • Order (可选): 列在数据库表中的顺序(EF Core 中通常不推荐使用)。
    • 示例:
      public class Product
      {[Column("ProductID")]public int Id { get; set; }[Column("ProductName", TypeName = "nvarchar(100)")]public string Name { get; set; }[Column("UnitPrice", TypeName = "money")]public decimal Price { get; set; }
      }
      
  • [Key]

    • 作用: 标识属性作为实体类的主键。
    • 示例:
      public class Customer
      {[Key]public int CustomerId { get; set; }// ...
      }
      
  • [DatabaseGenerated]

    • 作用: 指定数据库如何为主键或属性生成值(如自增、计算、手动)。
    • 参数:
      • DatabaseGeneratedOption (必填): 枚举值 (None-手动赋值, Identity-数据库自增, Computed-数据库计算)。
    • 示例:
      public class Order
      {[Key][DatabaseGenerated(DatabaseGeneratedOption.Identity)] // 最常见的用法,主键自增public int OrderId { get; set; }[DatabaseGenerated(DatabaseGeneratedOption.Computed)] // 值由数据库计算(如 GETDATE())public DateTime CreatedDate { get; set; }[DatabaseGenerated(DatabaseGeneratedOption.None)] // 必须手动赋值(如 GUID)public Guid TransactionId { get; set; }
      }
      
  • [ForeignKey]

    • 作用: 指定导航属性对应的外键属性。通常放在导航属性上或外键属性上。
    • 参数:
      • Name (必填): 外键属性的名称(如果放在导航属性上),或导航属性的名称(如果放在外键属性上)。
    • 示例 (放在导航属性上):
      public class Order
      {public int OrderId { get; set; }public int CustomerId { get; set; } // 外键属性 (约定优先,通常不需要 [ForeignKey])[ForeignKey("CustomerId")] // 明确指定 CustomerId 是外键public Customer Customer { get; set; } // 导航属性
      }
      
    • 示例 (放在外键属性上):
      public class Order
      {public int OrderId { get; set; }[ForeignKey("Customer")] // 明确指定 Customer 是关联的导航属性public int CustomerId { get; set; } // 外键属性public Customer Customer { get; set; } // 导航属性
      }
      
  • [InverseProperty]

    • 作用: 解决两个实体类之间有两个或多个导航属性指向对方时可能出现的歧义。指定导航属性在另一端的对应导航属性。
    • 参数:
      • Property (必填): 另一端对应的导航属性名称。
    • 示例:
      public class Employee
      {public int EmployeeId { get; set; }public string Name { get; set; }[InverseProperty("Supervisor")] // 在 Project 中,这个集合对应 Supervisor 导航属性public ICollection<Project> SupervisedProjects { get; set; }[InverseProperty("TeamLead")] // 在 Project 中,这个集合对应 TeamLead 导航属性public ICollection<Project> LedProjects { get; set; }
      }public class Project
      {public int ProjectId { get; set; }public string Title { get; set; }public int? SupervisorId { get; set; }[ForeignKey("SupervisorId")]public Employee Supervisor { get; set; } // 对应 Employee.SupervisedProjectspublic int TeamLeadId { get; set; }[ForeignKey("TeamLeadId")]public Employee TeamLead { get; set; } // 对应 Employee.LedProjects
      }
      
  • [NotMapped]

    • 作用: 标记属性应映射到数据库字段。常用于计算属性、临时属性或仅用于 UI 的属性。
    • 示例:
      public class Product
      {public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }public decimal TaxRate { get; set; }[NotMapped] // 这个属性不会存入数据库public decimal PriceWithTax => Price * (1 + TaxRate); // 计算属性
      }
      
  • [Timestamp]

    • 作用: 将属性标记为数据库中的行版本/时间戳列(通常类型为 byte[])。用于实现乐观并发控制。数据库会在更新行时自动更新此值。EF Core 检测到 [Timestamp] 会自动使用此属性进行并发检查。
    • 示例:
      public class Blog
      {public int BlogId { get; set; }public string Url { get; set; }[Timestamp]public byte[] RowVersion { get; set; } // SQL Server 对应 rowversion 类型
      }
      
  • [ConcurrencyCheck]

    • 作用: 标记属性参与乐观并发检查。当更新实体时,EF Core 会在 WHERE 子句中包含此属性的原始值。如果更新后数据库中的值已改变(被其他用户修改),则抛出 DbUpdateConcurrencyException[Timestamp] 是更高效、更常用的方式。
    • 示例:
      public class Author
      {public int AuthorId { get; set; }public string Name { get; set; }[ConcurrencyCheck] // 这个字段参与并发检查public int Revision { get; set; }
      }
      

3. 序列化/反序列化相关注解 (System.Text.Json.SerializationNewtonsoft.Json 命名空间)

  • [JsonIgnore] (System.Text.Json 或 Newtonsoft.Json)

    • 作用: 序列化或反序列化时忽略此属性。
    • 示例:
      public class User
      {public int Id { get; set; }public string Username { get; set; }[JsonIgnore] // 密码不会出现在序列化结果中,也不会从客户端接收public string PasswordHash { get; set; }
      }
      
  • [JsonPropertyName] (System.Text.Json) / [JsonProperty] (Newtonsoft.Json)

    • 作用: 指定属性在 JSON 中的名称。
    • 参数:
      • Name (必填): JSON 中使用的属性名。
    • 示例 (System.Text.Json):
      public class Product
      {[JsonPropertyName("product_id")]public int Id { get; set; }[JsonPropertyName("product_name")]public string Name { get; set; }
      }
      
    • 示例 (Newtonsoft.Json):
      public class Product
      {[JsonProperty("product_id")]public int Id { get; set; }[JsonProperty("product_name")]public string Name { get; set; }
      }
      
  • [JsonConverter] (System.Text.Json 或 Newtonsoft.Json)

    • 作用: 为属性或类型指定自定义的 JSON 转换器,用于处理特殊的序列化/反序列化逻辑。
    • 参数:
      • Type (通常): 转换器类型的 Type 对象。
      • ConverterType (Newtonsoft.Json): 同上。
    • 示例 (System.Text.Json 自定义 DateTime 格式):
      public class CustomDateTimeConverter : JsonConverter<DateTime>
      {private readonly string _format;public CustomDateTimeConverter(string format) => _format = format;public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)=> DateTime.ParseExact(reader.GetString(), _format, CultureInfo.InvariantCulture);public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)=> writer.WriteStringValue(value.ToString(_format, CultureInfo.InvariantCulture));
      }public class Event
      {[JsonConverter(typeof(CustomDateTimeConverter), "yyyy-MM-dd HH:mm:ss")]public DateTime StartTime { get; set; }
      }
      
  • [JsonInclude] (System.Text.Json)

    • 作用: 在序列化/反序列化时包含非公共成员(如 internalprivate setter)。通常用于不可变类型。
    • 示例:
      public record Point(int X, int Y)
      {[JsonInclude] // 允许反序列化时设置这个计算属性(通常需要配套方法)public double DistanceFromOrigin => Math.Sqrt(X * X + Y * Y);
      }
      

在这里插入图片描述

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

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

相关文章

【安全工具】SQLMap 使用详解:从基础到高级技巧

目录 简介 一、安装与基础配置 1. 安装方法 2. 基本语法 二、基础扫描技术 1. 简单检测 2. 指定参数扫描 3. 批量扫描 三、信息收集 1. 获取数据库信息 2. 获取当前数据库 3. 获取数据库用户 4. 获取数据库版本 四、数据提取技术 1. 列出所有表 2. 提取表数据 …

Redis大Key拆分实战指南:从问题定位到落地优化

引言 最近在项目里遇到一个棘手问题&#xff1a;生产环境的Redis突然变“卡”了&#xff01;查询延迟从几毫秒飙升到几百毫秒&#xff0c;监控面板显示某个节点CPU使用率飙到90%。排查半天才发现&#xff0c;原来是某个用户订单的Hash Key太大了——单Key存了100多万个订单字段…

RabbitMQ简单消息发送

RabbitMQ简单消息发送 简单代码实现RabbitMQ消息发送 需要的依赖 <!--rabbitmq--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>x.x.x</version>&l…

【阅读笔记】基于双边滤波改进的空域滤波算法

一、双边滤波空域滤波算法 双边滤波是一种典型的非线性滤波算法。基于高斯滤波&#xff0c;双边滤波利用强度的变化来保存边缘信息&#xff0c;解决了边缘模糊在视觉观感上认为重要信息丢失的问题。双边滤波的滤波效果主要取决于两个参数&#xff1a;两个像素的空间邻近性和灰…

华为交换机堆叠与集群技术深度解析附带脚本

一、引言 在企业园区网、数据中心等网络场景中&#xff0c;为了提升网络的可靠性、扩展性和管理效率&#xff0c;华为交换机提供了堆叠&#xff08;Stack&#xff09;和集群&#xff08;CSS&#xff0c;Cluster Switch System &#xff09;技术。这两种技术能够将多台物理交换…

Python网络爬虫(十三)- 数据解析模块 BeautifulSoup

1、BS4简介 BeautifulSoup(简称 BS4) 是一个用于解析 HTML 和 XML 文档的 Python 第三方库。它能够从网页或其他 HTML/XML 格式的文本中提取数据,并将其转换为结构化的对象,方便开发者快速定位、提取和操作所需信息。它的核心功能是通过解析器将无序的标记语言转换为树形结…

如何使用 Pytorch Lightning 启用早停机制

【PL 基础】如何启用早停机制 摘要1. on_train_batch_start()2. EarlyStopping Callback 摘要 本文介绍了两种在 PyTorch Lightning 中实现早停机制的方法。第一种是通过重写on_train_batch_start()方法手动控制训练流程&#xff1b;第二种是使用内置的EarlyStopping回调&#…

深入理解前缀和与差分算法及其C++实现

前缀和与差分是算法竞赛和编程中非常重要的两种技巧&#xff0c;它们能够高效地处理区间查询和区间更新问题。本文将详细介绍这两种算法的原理、应用场景以及C实现。 一、前缀和算法 1.1 前缀和的基本概念 前缀和&#xff08;Prefix Sum&#xff09;是一种预处理技术&#x…

HugeGraph【部署】Linux单机部署

注: hugegraph从版本 1.5.0 开始&#xff0c;需要 Java11 运行时环境 一、安装JDK11 1.下载JDK11 https://www.oracle.com/java/technologies/downloads/#java11 2.解压缩包 tar -zxvf jdk-11.0.27_linux-x64_bin.tar.gz 3.修改/etc/profile环境变量 export JAVA_HOME/usr…

C++异步编程里避免超时机制

C标准库中时钟&#xff08;Clock&#xff09; 这段内容主要介绍了C标准库中**时钟&#xff08;Clock&#xff09;**的概念和分类&#xff0c;以及它们在时间测量中的作用。以下是关键信息的解读&#xff1a; 一、时钟的核心特性 C中的时钟是一个类&#xff0c;提供以下四个基…

npm install安装不成功(node:32388)怎么解决?

如果在执行 npm install 时出现问题&#xff0c;尤其是 node:32388 相关的错误&#xff0c;这通常意味着某些依赖或配置出了问题。这里有一些常见的解决方法&#xff0c;你可以尝试&#xff1a; 1. 清除 npm 缓存 有时候&#xff0c;npm 缓存问题会导致安装失败。你可以清除 …

Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list 更换国内镜像软件源 笔记250702

Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list更换国内镜像软件源 笔记250702 为 Ubuntu 18.04 LTS&#xff08;代号 Bionic Beaver&#xff09;更换 /etc/apt/sources.list 为国内镜像源 备份/etc/apt/sources.list文件 sudo cp -a /etc/apt/sources.list /etc/apt/sou…

【运维系列】【ubuntu22.04】安装GitLab

一.下载安装文件 rootgitlab:~# wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/9/gitlab-ce-17.4.0-ce.0.el9.x86_64.rpm二.执行安装脚本 2.1 先执行安装前的命令 rootgitlab:~# apt install -y perl-interpreter rootgitlab:~# apt install -y openssh-s…

Cisco ASA防火墙查看ACL的条目数量

这里显示的条目数量为ACE, ACE是啥&#xff1f; ACE全称&#xff1a; access-list entry ACE指的是ACL条目展开后的数量&#xff0c; 啥叫展开&#xff1f; 示例&#xff1a; access-list out-in extend permit tcp80&443 host 1.1.1.1 host 2.2.2.2这种配置是占1条&#…

npm install安装的node_modules是什么

node_modules 是一个由 npm&#xff08;Node Package Manager&#xff09;管理的文件夹&#xff0c;存放着你的 Node.js 项目中所有安装的依赖包。当你运行 npm install 时&#xff0c;npm 会根据你的项目中 package.json 文件中的依赖配置&#xff0c;下载并安装相应的包到 no…

【实时Linux实战系列】实时Linux项目的部署与维护

在实时 Linux 项目的开发过程中&#xff0c;开发阶段的工作仅仅是开始&#xff0c;生产环境中的部署与维护同样至关重要。实时 Linux 系统广泛应用于工业自动化、航空航天、智能交通等对实时性和稳定性要求极高的领域。例如&#xff0c;在工业自动化中&#xff0c;实时系统的部…

Go并发模式精要:掌握Goroutine与Channel的实战艺术

在现代软件开发中&#xff0c;有效利用并发能力已成为提升系统性能的关键。Go语言凭借其原生的Goroutine和Channel机制&#xff0c;为开发者提供了优雅的并发解决方案。本文将深入解析Go并发编程的核心模式与最佳实践。 一、并发基石&#xff1a;Goroutine与Channel // 轻量级…

第29篇:Linux审计系统深度解析:基于OpenEuler 24.03的实践指南

Linux审计系统深度解析&#xff1a;基于OpenEuler 24.03的实践指南 文章目录 Linux审计系统深度解析&#xff1a;基于OpenEuler 24.03的实践指南一、Linux审计系统核心概念与组件架构1.1 审计系统核心组件详解1. auditd守护进程&#xff1a;日志持久化引擎2. auditctl命令行工具…

Linux 启动过程流程图--ARM版

以下是ARM版本Linux启动过程的超详细树状图&#xff0c;涵盖硬件上电到应用程序交互的全流程&#xff0c;并包含关键函数调用链及源码位置&#xff0c;适用于系统开发与调试场景&#xff1a; ARM Linux启动全流程&#xff08;含函数调用链&#xff09; ARM Linux启动流程&…

NVMe高速传输之摆脱XDMA设计6之系统架构设计

结合目前应用需求&#xff0c;以及前面基础分析&#xff0c;确定IP应具有如下特色&#xff1a; &#xff08;1&#xff09; 通用性 前端数据采集系统基于 FPGA 开发。 一方面&#xff0c; 设备类型多&#xff0c; 使用的 FPGA型号各不相同&#xff0c; 需要实现的设计能够在多种…