https://mp.weixin.qq.com/s/UYVSO3XFJmhe5bUD_XbMLg

 
先介绍如何使用AddressAdjuster,然后分析UI参数的生成及使用。
 
 
1. AddressAdjuster的使用
 
a. 创建AddressAdjuster实例
 
注意usage()方法有一个implicit Parameters参数,在方法范围内引入了一个隐式参数对象,在new AddressAdjuster的时候会使用。
 
b. 关联node的上下游节点
 
 
c. 关联chip_id的上游节点
 
 
d. 引用module构建硬件模块
 
 
2. UI生成
 
UI是指Node的DUEB参数中的UI。
 
引用adjuster.module后会执行module定义的代码,其中:
 
会调用node.in方法:
 
bundulesIn和edgesIn都是lazy变量:
 
并且bundlesIn依赖于edgesIn,这里主要关注edgesIn:
 
edgesIn依赖于iPorts和uiParams:
 
这里的iPorts为输入口,即与parent的连接口,iPorts.size = 1。
 
uiParams用到了uoParams:
 
这里oPorts为输出口,即与local和remote相连的连接口。n分别为local和remote节点。
 
所以uiParams中的:
a. iPorts.size = 1;
b. uoParams为local和remote节点向上传播的TLManagerPortParameters参数,uoParams.size = 2;
 
mapParamsU的实现为:
把uoParams传递给uFn()方法,返回一个UI;然后把这个UI复制成n(=1)份。
 
uFn()的实现为:
 
返回的一个UI为:
 
3. UI使用
 
a. edgesIn
 
edgesIn通过调用edgeI方法生成:
其中i为生成的UI。
 
edgeI方法的实现为:
 
其中,pu为UI,即TLManagerPortParameters:
 
b. bundlesIn
 
bundlesIn通过edgesIn和bundleI方法生成:
 
bundleI方法的实现如下:
 
ei.bundle的实现如下:
 
TLEdgeParameters是TLEdgeIn的父类:
所以TLEdgeParameters中的manager参数,即是传入的UI参数。
 
TLBundleParameters()伴生方法的实现如下:
 
可以看到其中并没有使用UI,亦即manager参数中的实际地址集合。
 
c. parentEdge的使用
 
所以不需要关注parent,只需要关注parentEdge的使用,以坚持是否用到其中的地址集合即可:
 
parentEdge的使用如下:
TLArbiter.robin中也没有实际使用到manager的地址集合。
 
所以managerFn的实现中,废了大力气生成的地址集合,目前来看并没有实际用处。
 

Rocket - diplomacy - AddressAdjuster分析的更多相关文章

  1. Rocket - diplomacy - AddressAdjuster

    https://mp.weixin.qq.com/s/X0s5CWN84GEiwpNR7tiRgA 基于AddressAdjuster介绍LazyModule的实现.   参考链接:https://g ...

  2. Rocket - diplomacy - DUEB参数模型分析

    https://mp.weixin.qq.com/s/533bJxcPRgO4W2gf_OEhEw   分析DUEB参数模型中各种参数类型的可能性.     1. 节点类型   根据参数的传播方向,可 ...

  3. Rocket - diplomacy - LazyModule的组织方式

    https://mp.weixin.qq.com/s/vaDUekxkFkOJLmzg5jCngw 简单介绍LazyModule/LazyModuleImp的组织方式. 1. LazyModule L ...

  4. Rocket - diplomacy - misaligned

    https://mp.weixin.qq.com/s/poCJBcx45clXHm6Uuv8M6w 介绍AddressSet.misaligned的实现.之前介绍的比较概括,也有偏差.这里根据实际执行 ...

  5. Rocket - diplomacy - LazyModule的实例化(补)

    https://mp.weixin.qq.com/s/rgCRorjPYyyD6i7moIzbZg   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  6. Rocket - diplomacy - LazyModule的实例化

    https://mp.weixin.qq.com/s/9PsBt4_4qHx4i6C5XtuiUw   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  7. Rocket - diplomacy - LazyModule

    https://mp.weixin.qq.com/s/FBU8fE4u9-UK6mRGQOlvbQ   介绍LazyModule的实现.     ​​   1. children   LazyModu ...

  8. Rocket - diplomacy - ValName

    https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ   简单调试ValName实现:   1. 使用     ​​   Desugar之后如下: ​​ ...

  9. Rocket - diplomacy - NodeHandle相关类

    https://mp.weixin.qq.com/s/GWL41P1G1BXm2sTeLmckdA   介绍NodeHandle相关的类.     ​​   1. NoHandle   顶层类(tra ...

随机推荐

  1. E. XOR Guessing 交互题 Educational Codeforces Round 71 (Rated for Div. 2)

    E. XOR Guessing 交互题. 因为这个数最多只有14位 0~13,所以我们可以先处理后面7位,然后再处理后面7位. 因为异或的性质,如果一个数和0异或,那么就等于本身. 所以我们第一次异或 ...

  2. A. A Twisty Movement dp

    https://codeforces.com/problemset/problem/933/A 这个是一个dp,但是我并没有看出来,然后也不太会写, 这种题一般应该要想到先预处理前缀和后缀,然后再进行 ...

  3. gulp插件学习01

    1.安装和使用 安装node环境:官网:https://nodejs.org: 命令行输入 npm i gulp -g ,gulp-v查看安装是否成功: 创建项目目录: 进入目录,并在目录中按住shi ...

  4. leetCode刷题 | 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  5. GUI_DOWNLOAD 下载乱码

    状况: 开发者打开正常,跨公司或跨企业打开异常. 跨App上传格式异常. 解决上述问题步骤: 1.用浏览器或可改变文件编码格式切换的软件打开文件(其他app上传正常文档格式,或跨公司打开正常文件)查看 ...

  6. mongodb windows 集群搭建

    准备三台机器,系统:windows 8 192.168.1.1 192.168.1.2 192.168.1.3 每台机器上安装mongodb 服务,步骤: 下载以下文件并依次执行安装 clearcom ...

  7. java-mysql类型对照

    java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang. ...

  8. python --整理数据结构(列表)

    该整理来源于:https://www.runoob.com/python3/python3-data-structure.html 列表 python中列表是可变的,这是它区别于字符串和元组的最重要的 ...

  9. git命令之切换分支

    Git一般有很多分支,我们clone到本地的一般都是master分支,如何进行分支的切换呢?那么下面带大家简单的看看如何通过命令来切换: 1.查看远程仓库及本地的所有分支 命令:git branch ...

  10. Django之ORM执行原生sql语句

    django中的ORM提供的操作功能有限,在模型提供的查询API不能满足实际工作需要时,可以在ORM中直接执行原生sql语句. Django 提供两种方法使用原生SQL进行查询:一种是使用raw()方 ...