GD32E23x flash作为静态存储的读写操作
目录
一、前言
二、GD32E23x flash扇区地址划分
三、GD32E23x 固件库下载
四、GD32E23x falsh擦写操作函数封装
五,引用示例
一、前言
在只有芯片没有外部存储时需要存储一些配置信息,使用flash进行存储是很好的选择了,在GD32E23x中以flash扇区为单位进行擦写,一个扇区大小为1K,需要时优先拿出最后几个扇区来作为存储区。
二、GD32E23x flash扇区地址划分
一般来,GD32E23x的flash第一个扇区的首地址为0x0800_0000,以我使用的这一款64k的flash为例,扇区划分为:
页(Page)编号 | 起始地址(Flash Address) | 结束地址(Flash Address) |
---|---|---|
Page 0 | 0x0800_0000 | 0x0800_03FF |
Page 1 | 0x0800_0400 | 0x0800_07FF |
Page 2 | 0x0800_0800 | 0x0800_0BFF |
Page 3 | 0x0800_0C00 | 0x0800_0FFF |
Page 4 | 0x0800_1000 | 0x0800_13FF |
Page 5 | 0x0800_1400 | 0x0800_17FF |
Page 6 | 0x0800_1800 | 0x0800_1BFF |
Page 7 | 0x0800_1C00 | 0x0800_1FFF |
Page 8 | 0x0800_2000 | 0x0800_23FF |
Page 9 | 0x0800_2400 | 0x0800_27FF |
Page 10 | 0x0800_2800 | 0x0800_2BFF |
Page 11 | 0x0800_2C00 | 0x0800_2FFF |
Page 12 | 0x0800_3000 | 0x0800_33FF |
Page 13 | 0x0800_3400 | 0x0800_37FF |
Page 14 | 0x0800_3800 | 0x0800_3BFF |
Page 15 | 0x0800_3C00 | 0x0800_3FFF |
Page 16 | 0x0800_4000 | 0x0800_43FF |
Page 17 | 0x0800_4400 | 0x0800_47FF |
Page 18 | 0x0800_4800 | 0x0800_4BFF |
Page 19 | 0x0800_4C00 | 0x0800_4FFF |
Page 20 | 0x0800_5000 | 0x0800_53FF |
Page 21 | 0x0800_5400 | 0x0800_57FF |
Page 22 | 0x0800_5800 | 0x0800_5BFF |
Page 23 | 0x0800_5C00 | 0x0800_5FFF |
Page 24 | 0x0800_6000 | 0x0800_63FF |
Page 25 | 0x0800_6400 | 0x0800_67FF |
Page 26 | 0x0800_6800 | 0x0800_6BFF |
Page 27 | 0x0800_6C00 | 0x0800_6FFF |
Page 28 | 0x0800_7000 | 0x0800_73FF |
Page 29 | 0x0800_7400 | 0x0800_77FF |
Page 30 | 0x0800_7800 | 0x0800_7BFF |
Page 31 | 0x0800_7C00 | 0x0800_7FFF |
Page 32 | 0x0800_8000 | 0x0800_83FF |
Page 33 | 0x0800_8400 | 0x0800_87FF |
Page 34 | 0x0800_8800 | 0x0800_8BFF |
Page 35 | 0x0800_8C00 | 0x0800_8FFF |
Page 36 | 0x0800_9000 | 0x0800_93FF |
Page 37 | 0x0800_9400 | 0x0800_97FF |
Page 38 | 0x0800_9800 | 0x0800_9BFF |
Page 39 | 0x0800_9C00 | 0x0800_9FFF |
Page 40 | 0x0800_A000 | 0x0800_A3FF |
Page 41 | 0x0800_A400 | 0x0800_A7FF |
Page 42 | 0x0800_A800 | 0x0800_ABFF |
Page 43 | 0x0800_AC00 | 0x0800_AFFF |
Page 44 | 0x0800_B000 | 0x0800_B3FF |
Page 45 | 0x0800_B400 | 0x0800_B7FF |
Page 46 | 0x0800_B800 | 0x0800_BBFF |
Page 47 | 0x0800_BC00 | 0x0800_BFFF |
Page 48 | 0x0800_C000 | 0x0800_C3FF |
Page 49 | 0x0800_C400 | 0x0800_C7FF |
Page 50 | 0x0800_C800 | 0x0800_CBFF |
Page 51 | 0x0800_CC00 | 0x0800_CFFF |
Page 52 | 0x0800_D000 | 0x0800_D3FF |
Page 53 | 0x0800_D400 | 0x0800_D7FF |
Page 54 | 0x0800_D800 | 0x0800_DBFF |
Page 55 | 0x0800_DC00 | 0x0800_DFFF |
Page 56 | 0x0800_E000 | 0x0800_E3FF |
Page 57 | 0x0800_E400 | 0x0800_E7FF |
Page 58 | 0x0800_E800 | 0x0800_EBFF |
Page 59 | 0x0800_EC00 | 0x0800_EFFF |
Page 60 | 0x0800_F000 | 0x0800_F3FF |
Page 61 | 0x0800_F400 | 0x0800_F7FF |
Page 62 | 0x0800_F800 | 0x0800_FBFF |
Page 63 | 0x0800_FC00 | 0x0800_FFFF |
三、GD32E23x 固件库下载
我这里使用的是GD32E23x标准固件库,下载地址为:
兆易创新GigaDevice-资料下载兆易创新GD32 MCUhttps://www.gd32mcu.com/cn/download?kw=GD32E23x&lan=cn如图,如果只需要固件库下载GD32E23x Firmware Library即可,如果需要固件库+示例则下载GD32E23x Demo Suites:
四、GD32E23x falsh擦写操作函数封装
直接给示例吧,引用头文件gd32e23x_fmc.h的库函数,稍加封装方便调用:
//写入数据到目标扇区 参数依次:扇区首地址、数据首地址、数据大小
void flash_write_multi(uint32_t start_addr, uint32_t *data, uint32_t word_count) {fmc_unlock();//解锁fmc_page_erase(start_addr);//擦掉fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGAERR | FMC_FLAG_PGERR );for (uint32_t i = 0; i < word_count; i++) {//写入新数据fmc_word_program(start_addr + (i * 4), data[i]);}fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGAERR | FMC_FLAG_PGERR );fmc_lock();//加锁
}//读取扇区数据 参数依次:扇区首地址、读取缓存区首地址、读取大小
void flash_read_multi(uint32_t start_addr, uint32_t *buffer, uint32_t word_count) {for (uint32_t i = 0; i < word_count; i++) {buffer[i] = *(volatile uint32_t*)(start_addr + (i * 4));}
}
五,引用示例
这里结合结构体进行一个配置信息的保存,可以很方便的保存数据,示例代码:
#define FLASH_PAGE_SIZE 1024 //一个扇区的大小
#define FLASH_SAVE_ADDR (0x0800FC00) //使用最后一个扇区作为静态区
#define CONFIG_SIZE (sizeof(Config_data)) //配置信息实际大小
#define CONFIG_WORDS ((CONFIG_SIZE + 3) / 4) //注意最小单位是32位#pragma pack(push, 1)
//配置信息结构体 总大小小于1K
typedef struct Config_data
{uint8_t rtuid[5];uint8_t password[2];uint8_t othen[20];
} Config_data;
#pragma pack(pop)//写入配置信息:uint32_t buffer[CONFIG_WORDS];memset(buffer, 0xFF, sizeof(buffer));memcpy((uint8_t*)buffer, config, CONFIG_SIZE);flash_write_multi(FLASH_SAVE_ADDR, buffer, CONFIG_WORDS);//读取配置信息:uint32_t buffer[CONFIG_WORDS];flash_read_multi(FLASH_SAVE_ADDR, buffer, CONFIG_WORDS);memcpy(config, (uint8_t*)buffer, CONFIG_SIZE);
相关文章:
GD32E23x flash作为静态存储的读写操作
目录 一、前言 二、GD32E23x flash扇区地址划分 三、GD32E23x 固件库下载 四、GD32E23x falsh擦写操作函数封装 五,引用示例 一、前言 在只有芯片没有外部存储时需要存储一些配置信息,使用flash进行存储是很好的选择了,在GD32E23x中以flash…...
空闲列表:回收和再利用
空闲列表:回收和再利用 手动与自动内存管理 手动管理:程序员需要明确地分配和释放内存。自动管理:例如使用垃圾收集器(GC),它能够自动检测并回收未使用的对象,不需要程序员干预。 对于某些数据结构如B树,…...
功能脑网络较新的方法[和ai讨论的方向和学习资源]
文章目录 前言和回顾代码实现ai 提问大脑连通性分析方法扩展与分类指南一、现有方法的补充与分类1. 补充的其他连通性方法2. 分类框架 二、近年来的新方法(2019年后)1. 相位动力学扩展2. 信息论与复杂度3. 基于图论与网络科学4. 动态系统与因果推断 三、…...
【MongoDB + Spark】 技术问题汇总与解决方案笔记
场景背景 最近练手项目:Spark 结合 MongoDB 构建商品推荐系统的过程中,过程中出现多种环境配置与兼容性问题,主要涉及 MongoDB 连接、版本兼容性、Casbah 驱动使用问题等。汇总调试过程中遇到的常见错误及其解决方案,供参考复用。…...
给git配置SSH(github,gitee)
更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 本文基于mac,linux和win可以参考 个人同时配置gitee和github的ss…...
Linux基础使用-笔记
1. 文件和目录操作 查看当前目录:pwd 命令用于显示当前工作目录的完整路径。 pwd切换目录:cd 命令用于切换工作目录。 # 切换到指定目录 cd /home/user/Documents # 切换到上一级目录 cd .. # 切换到用户主目录 cd ~列出目录内容:ls 命令用…...
什么是Maven
Maven的概念 Maven是一个一键式的自动化的构建工具。Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。Maven 是目前最流行的自动化构建工具࿰…...
DNS主从同步及解析
DNS 域名解析原理 域名系统的层次结构 :DNS 采用分层树状结构,顶级域名(如.com、.org、.net 等)位于顶层,下面是二级域名、三级域名等。例如,在域名 “www.example.com” 中,“com” 是顶级域名…...
Git 的基本概念和使用方式
Git 是一种分布式版本控制系统,广泛用于跟踪文件的变化和协作开发项目。以下是 Git 的基本概念和使用方式: 仓库(Repository):Git 用来存储项目文件和历史记录的地方。可以是本地仓库(Local Repository)或远程仓库(Remote Repository)。 工作区(Working Directory):…...
【C++】二叉树进阶面试题
根据二叉树创建字符串 重点是要注意括号省略问题,分为以下情况: 1.左字树为空,右子树不为空,左边括号保留 2.左右子树都为空,括号都不保留 3。左子树不为空,右子树为空,右边括号不保留 如果根节…...
时序数据库IoTDB构建的能源电力解决方案
随着能源格局的快速变化与“双碳”战略的逐步践行,电力系统的绿色低碳转型已成为重要发展趋势。在这一背景下,数字化、智能化技术正逐步扩大在新型电力系统发电侧、电网侧、储能侧的应用,以推动传统电力发输配用向全面感知、双向互动、智能高…...
【KWDB 创作者计划】_上位机知识篇---Github
文章目录 前言1. GitHub 核心功能(1) 代码托管(Git 仓库)存储代码版本控制代码浏览(2) 协作开发Pull RequestlssuesProjectsDiscussions(3) 自动化与 CI/CDGitHub ActionsGitHub PagesDependabot(4) 社区与开源ForkStarWatchSponsor2. GitHub 基本使用方法(1) 创建仓库(Repo…...
vxe-table封装表头
待补充使用说明,但是可以用 一.效果二.封装MyTable.vue1.封装index.vue2.日期选择筛选3.输入筛选4.下拉筛选5.多选筛选6.远程多选筛选7.远程单选筛选 三、页面使用1.具体页面使用2./utils/filter.js 注意:需要使用jsx、vxe-table、element-plus 一.效果 …...
力扣hot100 91-100记录
91-100 (动态规划) class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> f(m, vector<int>(n, 1));for(int i 1; i < m; i){for(int j 1; j < n; j){f[i][j] f[i-1][j] f[i][j-1];} }return f[…...
SpringMVC处理请求映射路径和接收参数
目录 springmvc处理请求映射路径 案例:访问 OrderController类的pirntUser方法报错:java.lang.IllegalStateException:映射不明确 核心错误信息 springmvc接收参数 一 ,常见的字符串和数字类型的参数接收方式 1.1 请求路径的…...
ESP32上C语言实现JSON对象的创建和解析
在ESP32上使用C语言实现JSON对象的创建和解析,同样可以借助cJSON库。ESP-IDF(Espressif IoT Development Framework)本身已经集成了cJSON库,你可以直接使用。以下是详细的步骤和示例代码。 1. 创建一个新的ESP-IDF项目 首先&…...
关于Qt对Html/CSS的支持
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、原生控件二、QtWebEngine总结 前言 最近遇到了一些问题需要使用Qt加载Html发现一些特性不能使用,估计很多人也和我一样遇到这种情况。需要说明…...
Python 读取 txt 文件详解 with ... open()
文章目录 1 概述1.1 注意事项1.2 模式说明1.3 文件准备 2 读文件2.1 读取整个文件2.2 逐行读取2.3 读取所有行到列表 3 写文件3.1 覆盖写入3.2 追加写入3.3 写入多行 4 实用技巧4.1 检查文件是否存在4.2 异常处理 1 概述 1.1 注意事项 文件编码:建议指定编码&…...
[Mac] 使用homebrew安装miniconda
使用虚拟环境可以对不同项目的依赖进行隔离。可以使用venv或者conda来创建和使用虚拟环境。 venv是Python内置的虚拟环境管理模块,适合纯Python项目以及快速轻量级的开发和部署。conda具备更强大的版本管理能力,但是占用较大的磁盘空间。 考虑到我基本不…...
如何获取适用于广告过滤增强的Chrome浏览器版本【广告净化】
不少人使用浏览器时,会遇到广告弹窗、视频前贴广告或页面跳转。这些情况会影响上网体验。想要改善,可以从选择合适版本的谷歌浏览器开始,并加上合理设置。 先打开电脑上的浏览器,在搜索栏中输入“谷歌浏览器官方下载页面”。找到带…...
JVM(Java虚拟机)详解
目录 1 JVM执行流程 2 JVM运行时数据区(内存布局) 2.1 堆 2.2 栈 2.3 方法区 2.4 程序计数器 2.5 Java和运行时数据区相关的异常 3 JVM类加载(Class Loading) 3.1 加载Loading 3.2 连接Linking 3.2.1 验证Verification…...
Vue3 + TypeScript,使用provide提供只读的响应式数据的详细分析与解决方法
原始无类型写法(不报错) typescript const applySampleTableData ref<ApplySample[]>([]); const applySampleListSymbol Symbol("applySampleList"); provide(applySampleListSymbol, readonly(applySampleTableData)); 类型推断&a…...
深入理解 BLE PHY 模式:1M、2M 与 Coded 的演进与应用
随着蓝牙技术不断演进,BLE(Bluetooth Low Energy)在物联网、可穿戴设备、智能家居等领域的应用愈发广泛。BLE 中的 PHY(Physical Layer,物理层)是决定无线传输速率、覆盖范围和功耗的核心因素。本文将以浅显易懂的语言,结合示意图和代码示例,系统梳理 BLE 三种 PHY 模式…...
人工智能与机器学习:二元分类决策树构建指南
引言 在人工智能与机器学习的领域里,算法犹如智慧的钥匙,开启着数据洞察的大门。决策树作为其中一颗璀璨的明珠,以其独特的非线性处理能力和可解释性备受瞩目。今天,让我们跟随作者的脚步,深入探究如何构建一个用于二…...
Ubuntu下软件运行常见异常退出问题汇总分析
软件在Ubuntu下运行时,可能会遇到各种异常退出情况,常见可分为以下几点: 目录 一、系统资源耗尽导致退出 二、权限导致无法运行 三、找不到依赖的动态库 四、编译可执行文件时,动态库所引用的头文件与动态库不匹配 一、系统资…...
机器学习漏洞大汇总——利用机器学习服务
在本节中,我们将展示机器学习框架中存在的漏洞,这些漏洞会直接处理模型工件,或者通过工件存储或模型注册表的凭证来处理。利用此类漏洞,攻击者可以在企业系统内部进行非常强大的横向移动,从而劫持被利用的模型注册表中的机器学习模型。 WANDB Weave 目录遍历 - CVE-2024-…...
类的六个默认成员函数
如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认…...
精益数据分析(21/126):剖析创业增长引擎与精益画布指标
精益数据分析(21/126):剖析创业增长引擎与精益画布指标 大家好!在创业和数据分析的探索道路上,我一直希望能和大家携手共进,共同学习。今天,我们继续深入研读《精益数据分析》,剖析…...
SAIL-RK3588协作机器人运动控制器技术方案
一、核心能力与政策适配 政策合规性 满足工信部《智能机器人重点技术攻关指南》要求,支持 EtherCAT主站协议(符合IEC 61158标准),助力企业申报工业机器人研发专项补贴(最高300万元/项目)核心板…...
手搓箱图并输出异常值(MATLAB)
看下需求 想要复刻这种箱图,咱们直接开始手搓 %% 可修改 % 生成模拟数据(假设5个用户群体的发帖数) data {randn(100,1)*10 30, ... % 核心用户randn(200,1)*5 10, ... % 边缘用户randn(150,1)*8 20, ... % 积极社交用户randn(8…...
Java:XML被自动转义
在Java中处理XML响应被自动转义的问题时,需结合XML规范及工具特性进行针对性处理。以下是常见原因及解决方案的总结: 一、XML自动转义的原因 字符安全性处理 XML中的保留字符(如 <、>、&)会被自动转义为实体&a…...
Day-3 应急响应实战
应急响应实战一:Web入侵与数据泄露分析 1. Web入侵核心原理 漏洞利用路径 未授权访问:弱口令(如空密码/默认口令)、目录遍历漏洞代码注入攻击:JSP/ASP木马、PHP一句话木马(利用eval($_POST[cmd])&…...
【软件设计师】模拟题一
以下是 10道软考-软件设计师模拟试题,涵盖高频考点和易错点,附带答案和解析: 一、软件工程 1. 在软件开发生命周期中,瀑布模型的主要特点是( ) A. 强调快速原型迭代 B. 阶段间有明…...
每日一练(4~24):互质的数【省模拟赛】
算法:暴力枚举 问题描述 如果两个整数 a, b 除了 1 以外,没有其它的公约数,则称整数 a 与 b 互质。 请问,与 2024 互质的数(包括 1)中,第 2024 小的是多少? 答案提交 这是一道结…...
金融软件测试有哪些注意事项?专业第三方软件测试服务机构分享
在现代金融行业中,软件系统的稳定性和安全性直接关系到资金的安全和业务的正常运转。金融软件因涉及庞大的资金流和敏感的个人及交易信息,对软件测试提出了更高的要求,那么金融软件在进行测试时有哪些注意事项呢?卓码软件测评作为专业的第三…...
关于QT信号、槽、槽函数的讲解
也是好久没有发帖子了,最近博主主要还是在边学QT边完成任务,所以进度很慢,但确实在这几天对于QT自身槽和信号这类特殊的机制有了一定简单的理解,所以还是想记录下来,如果有初学者看到帖子对他有一定的帮助,…...
算法训练营第三十天 | 动态规划 (三)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、01背包问题理论基础(一)动态规划五部曲确定dp数组以及下标的含义确定递推公式初始化dp数组确定遍历顺序 二、01背包问题理论基础&#…...
Vue开发网站会有“#”原因是前端路由使用了 Hash 模式
前言 网站链接中出现 #(井号)是因为你的前端路由使用了 Hash 模式(hash mode),这是一种前端框架(如 Vue.js、React 等)中常用的路由策略。 为什么有 # 比如 https://www.zimeinew.com/#/order…...
SpringBootTest报错
Unable to find a SpringBootConfiguration, you need to use ContextConfiguration or … 解决方案:在SpringTest注解中添加属性(classes )填写启动类 如我的启动类是MainApplication.class javax.websocket.server.ServerContainer no…...
【质量管理】现代TRIZ(萃智)理论概述
一、什么是TRIZ理论 TRIZ理论,即发明问题解决理论(Teoriya Resheniya Izobreatatelskikh Zadatch),是由前苏联发明家根里奇阿奇舒勒(Genrich S. Altshuller)于1946年创立的。它是一门基于知识的、面向人的发明问题解决系统化方法学。TRIZ理论通过研究大量的专利,总结出技…...
前端面经-JS篇(四)--回调地狱、promise异步编程、Proxy 与 Reflect 、模块化
一、回调地狱 回调地狱(Callback Hell),也称为回调地狱,是指在 JavaScript 中处理多个嵌套的异步回调函数时,代码结构变得非常难以阅读和维护的现象。 为什么会出现回调地狱? 回调地狱通常出现在需要执行…...
【oql】spark thriftserver内存溢出,使用oql查询导致oom的sql
eclipse memory analyzer (mat)软件内的OQL实现查询内促信息。 帮助信息:软件Help/Help Contents/Querying Heap Objects (OQL) 就是查询SparkExecuteStatementOperation 的statement 字段。 select objects s.statement from org.apache.spark.sql.hive.thriftser…...
算法设计与分析(基础)
问题列表 一、 算法的定义与特征,算法设计的基本步骤二、 算法分析的目的是什么?如何评价算法,如何度量算法的复杂性?三、 递归算法、分治法、贪婪法、动态规划法、回溯法的基本思想方法。四、 同一个问题,如TSP&#…...
爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取
一、使用HTTP服务代理 由于网络环境、网站对用户的访问速度的限制等原因,使得爬取过程会出现IP被封禁,故使用代理可提高爬取速度。在Scrapy中提供了一个HttpProxyMiddleware专门用于进行爬虫代理设置。在使用该代理进行爬取操作时,需要先在ba…...
机器学习中的特征存储是什么?我需要一个吗?
本质上,特征存储是一个专用存储库,用于系统地存储和排列特征,主要用于数据科学家训练模型,并帮助已训练模型的应用程序进行预测。它是一个关键的聚合点,人们可以在此构建或修改从各种数据源提取的特征集合。此外,它还支持从这些特征组中创建和增强新的数据集,以满足处于…...
【C语言】C语言中的联合体与枚举类型
前言 在C语言中,联合体(union)和枚举(enum)是两种非常实用但又常被忽视的自定义数据类型。它们在内存管理、代码可读性以及程序设计的灵活性方面都有着独特的优势。今天,我们就来深入探讨一下联合体和枚举…...
Golang编程拒绝类型不安全
button-chen/containertypesafe-go: 使用泛型包装标准库的容器 list、ring、heap、sync.Pool 和 sync.Map,实现类型安全 简介 在 Go 中,标准库提供了多种容器类型,如 list、ring、heap、sync.Pool 和 sync.Map。然而,这些容器默认…...
炼锌废渣提取钴工艺流程
炼锌废渣中提取钴的工艺流程通常结合湿法冶金技术,针对废渣中钴与锌、铁、铜等金属的复杂共生特性,通过预处理、浸出、除杂、钴富集及提纯等步骤实现钴的高效回收。以下是典型工艺流程的详细说明: 一、预处理 炼锌废渣(如锌浸出…...
Restful接口学习
一、为什么RESTful接口是数据开发的核心枢纽? 在数据驱动的时代,RESTful接口如同数据高速公路上的收费站,承担着数据交换的核心职责。数据工程师每天需要面对: 异构系统间的数据交互(Hadoop集群 ↔ 业务系统…...
仿真每日一练 | ABAQUS应力松弛
应力松弛是弹性材料在应力作用下产生微塑性变形,并且逐渐积累,在保持应变或者位移不变的前提下,表现为应力逐渐下降的现象。今天介绍一个ABAQUS中应力松弛的相关案例,模型如下所示: 图1 模型认识 回顾一下ABAQUS的有限…...