Linux arm64 pte相关宏
文章目录
- 一、pte 和 pfn
- 1.1 pte_pfn
- 1.2 pfn_pte
- 二、其他宏
- 参考资料
一、pte 和 pfn
// linux-5.4.18/arch/arm64/include/asm/pgtable.h#define pte_pfn(pte) (__pte_to_phys(pte) >> PAGE_SHIFT)
#define pfn_pte(pfn,prot) \__pte(__phys_to_pte_val((phys_addr_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot))
1.1 pte_pfn
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT CONFIG_ARM64_PAGE_SHIFT
CONFIG_ARM64_PAGE_SHIFT=12
通常arm64架构 PAGE_SHIFT = 12
#define pte_pfn(pte) (__pte_to_phys(pte) >> PAGE_SHIFT)
用于从页表项(Page Table Entry,PTE)中提取页帧号(Page Frame Number,PFN)。通过将PTE转换为物理地址,然后右移位来获得页帧号。页帧号表示物理页在内存中的位置,用于访问和管理物理内存。
#define PTE_ADDR_LOW (((_AT(pteval_t, 1) << (48 - PAGE_SHIFT)) - 1) << PAGE_SHIFT)#define PTE_ADDR_MASK PTE_ADDR_LOW
#define __pte_to_phys(pte) (pte_val(pte) & PTE_ADDR_MASK)
__pte_to_phys宏根据pte来获取对应的物理地址,用于从页表项(Page Table Entry,PTE)中提取低位的物理地址。
PTE_ADDR_LOW这个宏定义的步骤如下:
(1)_AT(pteval_t, 1):这是一个类型转换宏,将常量1强制转换为pteval_t类型。pteval_t是一个代表页表项的数据类型,在这里假设它是一个无符号整数类型。
(2)48 - PAGE_SHIFT:PAGE_SHIFT是一个常量,表示页的大小的位移量。这个表达式计算了48减去页的大小的位移量,得到了用于掩码操作的位数。
(3)(_AT(pteval_t, 1) << (48 - PAGE_SHIFT)):将1左移上一步计算得到的位数,得到一个掩码,只有最低的一些位被设置为1。
(4)(((_AT(pteval_t, 1) << (48 - PAGE_SHIFT)) - 1) << PAGE_SHIFT):将上一步得到的掩码减去1,得到一个更低位全为1的掩码。然后将这个掩码左移PAGE_SHIFT位,相当于将物理地址的低位清零,得到一个基地址。
这个宏定义的作用是根据页表项的位宽和页的大小,计算出页表项中低位的物理地址。这个物理地址是页表项中存储的物理页的基地址,用于访问对应的物理内存。
让我们通过一个示例来分解宏的工作原理:
(1)假设PAGE_SHIFT的值是12,表示页面大小为4KB(2^12 = 4KB)。
(2)_AT(pteval_t, 1) << (48 - PAGE_SHIFT)表达式计算出一个掩码,低位被设置为1。例如,如果pteval_t是一个无符号64位整数,_AT(pteval_t, 1)的结果为1ULL(无符号长整型),那么掩码的值将是0xFFFFFFFFFFFFF000。
(3)从掩码中减去1,得到0xFFFFFFFFFFFFEFFF。
(4)将掩码左移PAGE_SHIFT位(在这个示例中为12位),有效地将低12位清零,结果为0xFFFFFFFFFFFFF000。这代表了物理页的基地址。
(5)执行位与操作pte & PTE_ADDR_LOW,保留了PTE中物理地址的低位,丢弃了高位。
通过这种方式应用宏,你可以从页表项中提取物理地址的低位。得到的值表示与PTE相关联的物理页的基地址。
1.2 pfn_pte
typedef struct { pteval_t pgprot; } pgprot_t;
#define pgprot_val(x) ((x).pgprot)
#define __phys_to_pte_val(phys) (phys)#define pfn_pte(pfn,prot) \__pte(__phys_to_pte_val((phys_addr_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot))
用于将页帧号(Page Frame Number,PFN)和页面保护属性(Page Protection,prot)转换为页表项(Page Table Entry,PTE)。
这个宏定义的作用是将PFN和页面保护属性转换为PTE。它通过将PFN左移位得到物理地址,然后将物理地址转换为PTE的值。接着,将页面保护属性的值与PTE的值进行按位或操作,得到最终的PTE。这个PTE可以用于更新或设置页表中的条目,以实现对应PFN的映射和页面的保护。
二、其他宏
(1)
#define pte_none(pte) (!pte_val(pte))
#define pte_clear(mm,addr,ptep) set_pte(ptep, __pte(0))
#define pte_page(pte) (pfn_to_page(pte_pfn(pte)))
pte_none(pte): 这个宏判断给定的PTE是否为空。它使用了pte_val(pte)宏,将PTE转换为数值,然后判断该数值是否为0。如果数值为0,表示该PTE为空,返回值为真(非零);否则返回假(0)。
pte_clear(mm, addr, ptep): 这个宏用于将给定的PTE清空,即将其设置为0。它使用了set_pte(ptep, __pte(0)),将给定的PTE指针(ptep)设置为值为0的新的PTE。这样就清除了该PTE所指向的页表项。
pte_page(pte): 这个宏用于从PTE中获取对应的页结构(Page)指针。它使用了pte_pfn(pte)宏获取PTE的页帧号(PFN),并将其传递给pfn_to_page()函数,以获取与该PFN对应的页结构指针。
(2)
// linux-5.4.18/arch/arm64/include/asm/pgtable-hwdef.h/** Level 3 descriptor (PTE).*/
#define PTE_VALID (_AT(pteval_t, 1) << 0)
#define PTE_TYPE_MASK (_AT(pteval_t, 3) << 0)
#define PTE_TYPE_PAGE (_AT(pteval_t, 3) << 0)
#define PTE_TABLE_BIT (_AT(pteval_t, 1) << 1)
#define PTE_USER (_AT(pteval_t, 1) << 6) /* AP[1] */
#define PTE_RDONLY (_AT(pteval_t, 1) << 7) /* AP[2] */
#define PTE_SHARED (_AT(pteval_t, 3) << 8) /* SH[1:0], inner shareable */
#define PTE_AF (_AT(pteval_t, 1) << 10) /* Access Flag */
#define PTE_NG (_AT(pteval_t, 1) << 11) /* nG */
#define PTE_DBM (_AT(pteval_t, 1) << 51) /* Dirty Bit Management */
#define PTE_CONT (_AT(pteval_t, 1) << 52) /* Contiguous range */
#define PTE_PXN (_AT(pteval_t, 1) << 53) /* Privileged XN */
#define PTE_UXN (_AT(pteval_t, 1) << 54) /* User XN */
#define PTE_HYP_XN (_AT(pteval_t, 1) << 54) /* HYP XN */
/** The following only work if pte_present(). Undefined behaviour otherwise.*/
#define pte_present(pte) (!!(pte_val(pte) & (PTE_VALID | PTE_PROT_NONE)))
#define pte_young(pte) (!!(pte_val(pte) & PTE_AF))
#define pte_special(pte) (!!(pte_val(pte) & PTE_SPECIAL))
#define pte_write(pte) (!!(pte_val(pte) & PTE_WRITE))
#define pte_user_exec(pte) (!(pte_val(pte) & PTE_UXN))
#define pte_cont(pte) (!!(pte_val(pte) & PTE_CONT))
#define pte_devmap(pte) (!!(pte_val(pte) & PTE_DEVMAP))
这些宏定义用于处理页表项(Page Table Entry,PTE),但前提是PTE必须处于有效状态。否则,行为未定义。
pte_present(pte): 这个宏用于判断给定的PTE是否为有效状态(即存在于内存中)。它使用了pte_val(pte)宏将PTE转换为数值,然后通过位掩码检查PTE_VALID和PTE_PROT_NONE是否同时存在于该数值中。如果两个位都存在,表示PTE为有效状态,返回值为真(非零);否则返回假(0)。
pte_young(pte): 这个宏用于判断给定的PTE是否为"young"状态,即表示该页最近被访问过。它使用了pte_val(pte)宏将PTE转换为数值,然后通过位掩码检查PTE_AF是否存在于该数值中。如果存在,表示PTE为"young"状态,返回值为真(非零);否则返回假(0)。
pte_special(pte): 这个宏用于判断给定的PTE是否为特殊标记状态。它使用了pte_val(pte)宏将PTE转换为数值,然后通过位掩码检查PTE_SPECIAL是否存在于该数值中。如果存在,表示PTE为特殊标记状态,返回值为真(非零);否则返回假(0)。
pte_write(pte): 这个宏用于判断给定的PTE是否为可写状态。它使用了pte_val(pte)宏将PTE转换为数值,然后通过位掩码检查PTE_WRITE是否存在于该数值中。如果存在,表示PTE为可写状态,返回值为真(非零);否则返回假(0)。
pte_user_exec(pte): 这个宏用于判断给定的PTE是否允许用户态执行。它使用了pte_val(pte)宏将PTE转换为数值,然后通过位掩码检查PTE_UXN是否不存在于该数值中。如果不存在,表示PTE允许用户态执行,返回值为真(非零);否则返回假(0)。
pte_cont(pte): 这个宏用于判断给定的PTE是否为连续标记状态。它使用了pte_val(pte)宏将PTE转换为数值,然后通过位掩码检查PTE_CONT是否存在于该数值中。如果存在,表示PTE为连续标记状态,返回值为真(非零);否则返回假(0)。
pte_devmap(pte): 这个宏用于判断给定的PTE是否为设备映射标记状态。它使用了pte_val(pte)宏将PTE转换为数值,然后通过位掩码检查PTE_DEVMAP是否存在于该数值中。如果存在,表示PTE为设备映射标记状态,返回值为真(非零);否则返回假(0)。
#define pte_hw_dirty(pte) (pte_write(pte) && !(pte_val(pte) & PTE_RDONLY))
#define pte_sw_dirty(pte) (!!(pte_val(pte) & PTE_DIRTY))
#define pte_dirty(pte) (pte_sw_dirty(pte) || pte_hw_dirty(pte))#define pte_valid(pte) (!!(pte_val(pte) & PTE_VALID))
#define pte_valid_not_user(pte) \((pte_val(pte) & (PTE_VALID | PTE_USER)) == PTE_VALID)
#define pte_valid_young(pte) \((pte_val(pte) & (PTE_VALID | PTE_AF)) == (PTE_VALID | PTE_AF))
#define pte_valid_user(pte) \((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER))
这些宏定义用于进一步处理页表项(Page Table Entry,PTE),提供了更多的状态判断和标记位操作。
下面是每个宏定义的说明:
pte_hw_dirty(pte): 这个宏用于判断给定的PTE是否为硬件脏页状态。它使用了pte_write(pte)宏判断PTE是否可写,然后通过位掩码检查PTE_RDONLY是否不存在于PTE的数值中。如果PTE可写且不是只读状态,表示PTE为硬件脏页状态,返回值为真(非零);否则返回假(0)。
pte_sw_dirty(pte): 这个宏用于判断给定的PTE是否为软件脏页状态。它使用了pte_val(pte)宏将PTE转换为数值,然后通过位掩码检查PTE_DIRTY是否存在于该数值中。如果存在,表示PTE为软件脏页状态,返回值为真(非零);否则返回假(0)。
pte_dirty(pte): 这个宏用于判断给定的PTE是否为脏页状态(硬件脏页或软件脏页)。它使用了pte_sw_dirty(pte)宏判断PTE是否为软件脏页,以及pte_hw_dirty(pte)宏判断PTE是否为硬件脏页。如果PTE为软件脏页或硬件脏页状态,返回值为真(非零);否则返回假(0)。
pte_valid(pte): 这个宏用于判断给定的PTE是否为有效状态。它使用了pte_val(pte)宏将PTE转换为数值,然后通过位掩码检查PTE_VALID是否存在于该数值中。如果存在,表示PTE为有效状态,返回值为真(非零);否则返回假(0)。
pte_valid_not_user(pte): 这个宏用于判断给定的PTE是否为有效状态且不是用户态的。它使用了位掩码检查PTE_VALID和PTE_USER是否同时存在于PTE的数值中。如果同时存在,表示PTE为有效状态且不是用户态的,返回值为真(非零);否则返回假(0)。
pte_valid_young(pte): 这个宏用于判断给定的PTE是否为有效状态且是"young"状态。它使用了位掩码检查PTE_VALID和PTE_AF是否同时存在于PTE的数值中。如果同时存在,表示PTE为有效状态且是"young"状态,返回值为真(非零);否则返回假(0)。
pte_valid_user(pte): 这个宏用于判断给定的PTE是否为有效状态且是用户态的。它使用了位掩码检查PTE_VALID和PTE_USER是否同时存在于PTE的数值中。如果同时存在,表示PTE为有效状态且是用户态的,返回值为真(非零);否则返回假(0)。
参考资料
Linux 5.4.18
相关文章:
Linux arm64 pte相关宏
文章目录 一、pte 和 pfn1.1 pte_pfn1.2 pfn_pte 二、其他宏参考资料 一、pte 和 pfn // linux-5.4.18/arch/arm64/include/asm/pgtable.h#define pte_pfn(pte) (__pte_to_phys(pte) >> PAGE_SHIFT) #define pfn_pte(pfn,prot) \__pte(__phys_to_pte_val((phys_addr_t)…...
MVCC:多版本并发控制案例分析(一)
(笔记总结自b站马士兵教育课程) 一、简介 MVCC:全称multi-version Concurency control,多版本并发控制,是为了解决并发读写问题存在的。MVCC的实现原理由三部分组成:隐藏字段、undolog、readview。 二、概…...
以数据为中心的安全市场快速增长
根据Adroit Market Research的数据,2021年全球以数据为中心的安全市场规模估计为27.6亿美元,预计到2030年将增长至393.48亿美元,2021年至2030年的复合年增长率为30.9%。 研究人员表示,以数据为中心的安全强调保护数据本身&#x…...
AUTOSAR汽车电子嵌入式编程精讲300篇-经典 AUTOSAR 安全防御能力的分析及改善(下)
目录 4.4.2 Security 攻击 4.4.3 Security 要求 4.4.4 SDSA 有效性验证 经典 AUTOSAR 安全防御能力分析...
AI绘图提示词Stable Diffusion Prompt 笔记
基础 提示词分为正向提示词(positive prompt)和反向提示词(negative prompt),用来告诉AI哪些需要,哪些不需要词缀的权重默认值都是1,从左到右依次减弱,权重会影响画面生成结果。AI …...
xml元素值需要保留space
XmlReaderSettings.IgnoreWhitespace 属性 如果忽略空白,则为 true;否则为 false。 默认值为 false。 示例 下面创建一个设置对象,该对象可用于构造一个读取器,该读取器去除处理指令、注释和微不足道的空白。 StreamReader tex…...
Eclipse开源代码下载
当前插件开发,需要修改eclipse源码,如需要修改remote相关的代码,所以需要下载相关源码。网上大多资料都说的不清不楚的,也可能我太小白,不明白,反正就是折腾了一两天才感觉有点思路,改如何找源码…...
python多线程、进程
1、 并行和并发 (1)并发:一定周期内,多个任务来回切换执行,宏观上形成“该周期内有多个任务在同时进行”;但同一时间点,只有一个任务在执行。 举例: 你想在2小时内同时完成做饭、扫…...
Vue基础之模板语法介绍
前言 上篇我分享了关于Vue的入门,简单的入了个门。本篇文章将要分享的内容为Vue的模板语法。 一、插值 1.1、文本 1.2、html 1.3、属性 1.4、class、style绑定 1.5、表达式 在Vue的模板语法中,插值是一种常用的方式来动态地将数据渲染到视图中。Vue使用双…...
【SLAM】 前端-视觉里程计之特征点
前端-视觉里程计之特征点 参考资料: 以不变应万变:前端-视觉里程计之特征点 视觉SLAM——特征点法 task05 本次了解了特征点是由关键子和描述子组成,并且对比了SIFT、SURF等七种获取特征点的方法,同时对比了SIFT、SURF和ORB方法…...
Android笔记(二十九):利用python自动生成多语言
背景 项目需要支持十几种多语言,而且每个版本的新功能ui都有很多地方需要多语言,如果手动添加非常耗时,于是设计了一个python脚本,通过excel表格转化多语言到项目values/strings文件内 步骤 android工程项目结构 脚本位于langu…...
【C++STL基础入门】list的运算符重载和关于list的算法
文章目录 前言一、list运算符1.1 逻辑运算符1.2 赋值运算符 二、list相关算法2.1 查找函数总结 前言 C标准模板库(STL)是一组强大而灵活的工具,用于处理数据结构和算法。其中,std::list是STL中的一个重要容器,它实现了…...
查找内轮廓(孔洞)
一 说明 findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,int method, Point offset=Point());参数列表中有个数据结构参数:hierarchy(译层次结构),hierarchy是一个向量,其元素个数与查找到的轮廓总数相同,每一个…...
Git(6)——GitHub
目录 一、简介 二、概要 三、注册 四、创建仓库 五、推送本地代码 六、拉取远端代码 一、简介 在Git(5)中,我们已经对Git分支的概念和用法有了一定了解,对于在本地进行代码版本管理,其实当前所学的东西基本已经…...
【RocketMQ专题】快速实战及集群架构原理详解
目录 课程内容一、MQ简介基本介绍*作用(解决什么问题) 二、RocketMQ产品特点2.1 RocketMQ介绍2.2 RocketMQ特点2.3 RocketMQ的运行架构 三、RocketMQ快速实战3.1 快速搭建RocketMQ服务3.2 快速实现消息收发3.3 搭建Maven客户端项目3.4 搭建RocketMQ可视化…...
[设计模式] 浅谈SOLID设计原则
目录 单一职责原则开闭原则里氏替换原则接口隔离原则依赖倒转原则 SOLID是一个缩写词,代表以下五种设计原则 单一职责原则 Single Responsibility Principle, SRP开闭原则 Open-Closed Principle, OCP里氏替换原则 Liskov Substitution Principle, LSP接口隔离原则 …...
基于Java+SpringBoot+Vue的旧物置换网站设计和实现
基于JavaSpringBootVue的旧物置换网站设计和实现 源码传送入口前言主要技术系统设计功能截图数据库设计代码论文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 摘 要 随着时代在一步一步在进步,旧物也成人们的烦恼,…...
Java基本语法2
目录 Java基本语法 第一个Java程序 基本语法 Java标识符 Java修饰符 Java变量 Java数组 Java枚举 Java关键字 Java注释 Java 空行 继承 接口 Java基本语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介…...
【数据结构】树的存储结构;树的遍历;哈夫曼树;并查集
欢~迎~光~临~^_^ 目录 1、树的存储结构 1.1双亲表示法 1.2孩子表示法 1.3孩子兄弟表示法 2、树与二叉树的转换 3、树和森林的遍历 3.1树的遍历 3.1.1先根遍历 3.1.2后根遍历 3.2森林的遍历 3.2.1先序遍历森林 3.2.2中序遍历森林 4、树与二叉树的应用 4.1哈夫曼树…...
CSS选择器练习小游戏
请结合CSS选择器练习小游戏进行阅读(网页的动态效果是没有办法通过静态图片展示的) 网址:请点击 有些题有多种答案,本文就不一一列出了 第一题 答案:plate第二题 答案:bento第三题 答案:#fa…...
Python运算符、函数与模块和程序控制结构
给我家憨憨写的python教程 ——雁丘 Python运算符、函数与模块和程序控制结构 关于本专栏一 运算符1.1 位运算符1.1.1 按位取反1.1.2 按位与1.1.3 按位或1.1.4 按位异或1.1.5 左移位 1.2 关系运算符1.3 运算顺序1.4 运算方向 二 函数与模块2.1 内建函数2.2 库函数2.2.1 标准库…...
微服务保护-Sentinel
初识Sentinel 雪崩问题及解决方案 雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时&a…...
Doris 导出表结构或数据
MYSQLDUMP 导出表结构或数据 Doris 在0.15 之后的版本已经支持通过mysqldump 工具导出数据或者表结构 使用示例 导出 导出 test 数据库中的 table1 表:mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables table1导出 test 数…...
SELECT * from t_user where user_id = xxx,可以从那几个点去优化这句sql
优化SQL查询可以从以下几个方面入手: 1. 索引优化:通过为查询涉及的列添加合适的索引,可以提高查询的效率。在该SQL语句中, user_id 列被用作查询条件,可以为 user_id 列创建一个索引。 2. 避免使用 SELECT *…...
解决报错 java.lang.IllegalArgumentException: Cannot format given Object as a Date
报错原因:我们在SimpleDateFormat.format转化时间格式的时候,传入的值无法转换成date而报的错 我的代码大概就是下面这种 LocalDate now LocalDate.now();String format1 new SimpleDateFormat("yyyy-MM-dd").format(now); 发现SimpleDateF…...
【Git】03-GitHub
文章目录 1. GitHub核心功能2. GitHub搜索项目3. GitHub搭建个人博客4. 团队项目创建5. git工作流选择5.1 需要考虑的因素5.2 主干开发5.2 Git Flow5.3 GitHub Flow5.4 GitLab Flow(带生产分支)5.4 GitLab Flow(带环境分支)5.4 GitLab Flow(带发布分支) 6. 分支集成策略7. 启用…...
Java手写最短路径算法和案例拓展
Java手写最短路径算法和案例拓展 1. 算法手写的必要性 在实际开发中,经常需要处理图的最短路径问题。虽然Java提供了一些图算法库,但手写最短路径算法的必要性体现在以下几个方面: 理解算法原理:手写算法可以帮助我们深入理解最…...
深度学习实战51-基于Stable Diffusion模型的图像生成原理详解与项目实战
大家好,我是微学AI,今天给大家介绍一下深度学习实战51-基于Stable Diffusion模型的图像生成原理详解与项目实战。大家知道现在各个平台发的漂亮小姐姐,漂亮的图片是怎么生成的吗?这些生成的底层原理就是用到了Stable Diffusion模型。Stable Diffusion是一种基于深度学习的图…...
基于matlab实现的多普勒脉冲雷达回波仿真
完整程序: clear all;clc;close all; fc3e9; %载波频率 PRF2000; Br5e6; %带宽 fs10*Br; %采样频率 Tp5e-6; %脉宽 KrBr/Tp; %频率变化率 c3e8; %光速 lamda…...
Linux服务器中安装Anaconda+Tensorflow+Keras
Anaconda安装 从https://repo.anaconda.com/archive/查看你需要下载的Anaconda版本,例如2020.11的x86_64(uname -a 查看linux框架)版下载Anaconda到linux服务器, wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Li…...
遵义网站建设优化公司/互联网行业都有哪些工作
获得微秒级的时间 收藏 Win 下建议如下方式: http://www.vckbase.com/document/viewdoc/?id1301 VC中基于 Windows 的精确定时 中国科学院光电技术研究所 游志宇 在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间&#x…...
成交型网站制作/seo软件排行榜前十名
使用ping命令时经常会遇到这两种情况,就表示网络出了问题: 无法访问目标主机的原因 可以看到“无法访问目标主机”是来自一个IP的回复,实际上那个IP是一个路由器。因此“无法访问目标主机”实际上数据是发出去并且收到回复的,只…...
综合商城网站程序/图片外链在线生成网址
背景: 需要定时执行任务,不同的情况执行不同的插入语句,所以有 DO $do$ DECLARE tstr VARCHAR(14) : ${time_point}; BEGIN IF TRUE THEN INSERT INTO test SELECT total_check_report_static_all, TO_TIMESTAMP(tstr,YYYYMMddHH24miss), C…...
做pc端网站平台/百度seo优化是做什么的
成熟又有钱的是父亲,成熟又没钱的是舅舅,不成熟有没钱的是儿子,看来自己只能做个儿子了。...
无锡网站建设系统/网站设计公司网站制作
前言 会议定点:新主楼F座教室会议时间:2019/5/5会议目的:确定进度,分配下阶段任务一、任务进度 组员上周任务进度下阶段任务大娃初步完成新增的模型代码完善新增层的代码二娃阅读后端文档,辅助主PM维护github项目&…...
石家庄网站建设成功案例/软文推广有哪些平台
0. 其他处理 计时: tic net train(net, X, y); toc1. 一个简单的 demo(单层感知器) P [1, 1, 1, 1, 0, 0, 0, 0; 0, 0, 1, 1, 0, 1, 1, 0; 0, 1, 0, 1, 1, 0, 1, 0];% 每一列表示一个输入样本 T [-1, 1, 1, 1, -1, -1, 1, -1];% 表示输出值…...