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

制作网页网站的软件wordpress 古腾堡

制作网页网站的软件,wordpress 古腾堡,wordpress建站位置,wordpress mysql瓶颈Debug Module#xff08;DM#xff09;的核心功能 DM 就像一个翻译官#xff0c;负责把调试器的抽象指令#xff08;比如 “暂停处理器”#xff09;转换成硬件能听懂的具体操作。它必须实现以下基本功能#xff1a; 必要功能#xff08;必须实现#xff09;#xff…Debug ModuleDM的核心功能 DM 就像一个翻译官负责把调试器的抽象指令比如 “暂停处理器”转换成硬件能听懂的具体操作。它必须实现以下基本功能 必要功能必须实现 暂停 / 恢复任意处理器核心hart。告诉调试器哪些核心已经暂停。读写暂停状态下的核心寄存器比如通用寄存器 GPR。提供复位信号确保能从启动第一条指令开始调试。 可选功能根据设计选择 直接读写非通用寄存器如 CSR。用 “程序缓冲区” 让核心执行任意指令比如访问内存。同时控制多个核心暂停 / 恢复。直接访问系统总线无需通过核心。 1. DM 的接口DMI 总线 DM 通过DMI 总线与调试主机通信就像电脑通过 USB 连接外设一样 主设备是调试主机如运行 GDB 的电脑。从设备是 DM 和其他调试模块如多个 DM 或自定义设备。地址空间DM 的地址从最低位开始额外地址可分配给其他设备。例如 2. Reset control DM 负责管理系统的全局复位信号ndmreset  / non debug module reset 作用除 DM 和Debug Transport模块之外的所有组件会被复位或保持在复位状态。具体哪些部件被复位由芯片厂商决定但必须保证调试器能从程序第一条指令开始调试。规则 DM模块自己的状态和寄存器只有两种情况会被复位 a. 系统刚上电时 b. 当 dmcontrol 寄存器中的 dmactive 位为 0 时即调试功能未激活如果调试功能激活dmactive1系统复位时 HART 的暂停状态会被保留比如断点位置但触发相关的 CSR 寄存器可能会被清除由于时钟和电源域的设计问题系统复位时不能随意进行 DMI 访问此时唯一允许的操作是读写 dmcontrol 寄存器其他 DMI 操作会导致不可预测的结果 ndmreset 的操作规则 复位信号的持续时间没有强制要求但必须满足 a. 先写 1 使能复位 b. 再写 0 触发实际复位系统恢复时间不确定通过 allunavail/anyunavail 寄存器报告 单个 HART 的复位方法 通过选择目标 HART设置并清除 hartreset 位实现复位实际复位可能包括未被选中的 HART厂商实现差异 复位状态检测 调试器可通过以下方式确认复位情况 a. anyhavereset是否有至少一个选中 HART 处于复位状态 b. allhavereset是否所有选中 HART 都处于复位状态 复位标志的清除规则 复位后 HART 会设置粘性标志必须手动清除清除方法向 dmcontrol 的 ackhavereset 位写 1特殊情况当 dmactive0 时标志可能自动清除 复位后的 HART 行为 如果设置了 haltreq 或 resethaltreq 复位后立即进入调试模式 否则 正常执行程序 3. selecting Harts 一个调试模块DM最多可以连接 2^20 个硬件线程hart。调试器需要先选择一个特定的 hart之后对这个 hart 发出的暂停、恢复、复位和调试等命令就都只针对这个被选中的 hart 起作用。调试器如果要列出所有的 hart需要先确定 HARTSELLEN 的值。 把 hartsel 寄存器里的所有位都设为 1假定 hartsel 有最大的位宽接着读取 hartsel 的值这样就能知道哪些位实际上被设置了从而确定 HARTSELLEN即 hartsel 寄存器里有效位的数量。从索引为 0 的 hart 开始逐个选择 hart直到 dmstatus 寄存器里的 anynonexistent 位变为 1这表明后面没有可用的 hart 了或者达到了 HARTSELLEN 所限制的最大索引。 调试器可以通过接口读取 mhartid 寄存器或者读取系统的配置字符串来了解 hart 索引和 mhartid 之间的映射关系。 3.1 选择单个hart 所有的调试模块都必须支持选择单个 hart。调试器选择单个 hart 的方法很简单就是把要选的 hart 的索引值写到 hartsel 寄存器里。hart 的索引是从 0 开始的而且是连续编号的一直到最后一个索引。 举个例子要是你想选择第 3 个 hart索引为 2因为索引从 0 开始就把数值 2 写入 hartsel 寄存器。之后执行的暂停、恢复、复位和调试命令都只会对这个被选中的 hart 起作用。 3.2 选择多个hart 调试模块可以实现一个 Hart 数组掩码寄存器这样就能一次选择多个 hart 了。这个 Hart 数组掩码寄存器的第 n 位对应索引为 n 的 hart如果这一位是 1就表示选中了这个 hart。通常一个 DM 的 Hart 数组掩码寄存器的位宽刚好能覆盖它所支持的所有 hart但也允许把其中某些位固定设为 0。调试器可以通过 hawindowsel 和 hawindow 来设置 Hart 数组掩码寄存器里的位然后设置 hasel 来对所有被选中的 hart 执行操作。如果支持这个功能就可以同时对多个 hart 进行暂停、恢复和复位操作。而且设置或清除 hasel 不会影响 Hart 数组掩码寄存器的状态。只有通过 dmcontrol 发起的操作才能同时作用于多个 hart而抽象命令Abstract Commands只对通过 hartsel 选中的单个 hart 起作用。 4. Hart States 每个可被选中的 Hart硬件线程必定处于以下四种状态之一 不存在Nonexistent不可用Unavailable运行中Running暂停Halted 状态详解 a. 不存在Nonexistent 含义这个 Hart 在系统中根本不存在无论等多久都不会出现。例子 假设系统只有 1 个 Hart索引 0那么索引 1 及以上的 Hart 都是 “不存在” 的。调试器行为 调试器遇到第一个不存在的 Hart 后会认为后面所有索引的 Hart 都不存在。 b. 不可用Unavailable 含义Hart 可能暂时无法使用或者被系统永久禁用比如工厂关闭。可能原因 正在复位Reset暂时断电未插入系统如扩展卡未安装制造时被永久禁用导致 Hart 索引不连续 调试器行为 即使 Hart 永远不会可用调试器也必须将其视为 “不可用”以便正确枚举所有可能的 Hart。 c. 运行中Running 含义Hart 正在正常执行程序就像没有调试器连接一样。特点 可能处于低功耗模式或等待中断但调试器可以通过暂停请求haltreq让它进入暂停状态。例如手机 CPU 在省电模式下运行但仍能被调试器暂停。 d. 暂停Halted 含义Hart 被调试器暂停只能执行调试器的命令如单步执行、读写寄存器。特点 处于调试模式无法自主运行程序。例如调试器设置断点后Hart 会暂停在此处等待调试指令。 复位后的状态变化 复位期间Hart 可能处于 “不可用” 状态。复位结束后 Hart 可能短暂进入 “运行中” 状态比如执行初始化代码。最终根据调试器的配置haltreq和resethaltreq决定是继续运行还是暂停。 状态判断工具 调试器通过dmstatus寄存器的以下标志位判断状态 allnonexistent所有 Hart 都不存在罕见。anynonexistent存在至少一个不存在的 Hart。allunavail所有 Hart 都不可用。anyunavail存在至少一个不可用的 Hart。allrunning所有 Hart 都在运行。anyrunning存在至少一个运行中的 Hart。allhalted所有 Hart 都被暂停。anyhalted存在至少一个被暂停的 Hart。 总结 不存在系统中没有这个 Hart。不可用Hart 可能存在但暂时或永久无法使用。运行中Hart 正常执行程序可被调试器暂停。暂停Hart 被调试器控制只能执行调试命令。 通过这些状态调试器可以精准控制和监控每个 Hart 的行为。 5. Run Control 基本概念 调试模块DM会为每个 hart 记录 4 个概念上的状态位 暂停请求halt request就像老师让学生停下来别写作业了。恢复确认resume ack好比学生收到老师让继续写作业的通知后给老师一个确认的回复。复位时暂停请求halt - on - reset request可以想象成在重新开始考试前老师要求学生先别动笔。硬件线程复位hart reset类似于把电脑重启一下。 除了恢复确认位可能初始化为 0 或者 1其他 3 个位初始都为 0。 状态信号 DM 会从每个 hart 接收 “已暂停halted”“正在运行running” 和 “已复位havereset” 这些信号。调试器能通过一些寄存器看到恢复确认位的状态以及 “已暂停”“正在运行”“已复位” 信号的状态但其他位的状态不能直接看到。 暂停请求操作 当调试器把 haltreq 设为 1 时就好像老师喊了一声 “都别写了”每个被选中的 hart 的暂停请求位就会被设置。如果一个 hart 正在运行或者刚从复位状态恢复看到自己的暂停请求位被设置了它就会停下来就像学生听到老师的话停下手中的笔。同时它会取消 “正在运行” 信号发出 “已暂停” 信号。要是 hart 本来就已经暂停了就会忽略这个暂停请求位就像已经停下笔的学生不会再因为老师重复 “别写了” 而有额外反应。 恢复请求操作 当调试器把 resumereq 设为 1 时好比老师说 “可以继续写作业了”。这时每个被选中的 hart 的恢复确认位会被清除并且每个被选中且处于暂停状态的 hart 会收到恢复请求。hart 收到请求后就会继续工作就像学生继续写作业同时取消 “已暂停” 信号发出 “正在运行” 信号。最后恢复确认位会被设置表示已经确认恢复。正在运行的 hart 会忽略恢复请求就像一直在写作业的学生不会因为老师重复 “继续写” 而有额外反应。 响应时间要求 当请求暂停或者恢复时除非 hart 不可用否则它必须在 1 秒内做出响应。不过一般来说可能几个时钟周期就会有反应就像学生听到老师的话马上就会做出动作。 复位时暂停请求操作 DM 可以为每个 hart 实现可选的 “复位时暂停请求” 位。当 DM 把 hasresethaltreq 设为 1 时就表示它支持这个功能。调试器把 setresethaltreq 设为 1就像老师在重新开始考试前说 “大家先别动笔”每个被选中的 hart 的 “复位时暂停请求” 位就会被设置。当这个位被设置后下次 hart 复位结束它会马上进入调试模式不管复位是什么原因引起的。这个位会一直保持设置状态直到调试器把 clrresethaltreq 设为 1 来清除它或者 DM 进行复位就像老师说 “可以开始考试了”学生才会开始动笔。 总结 调试模块通过设置不同的控制位就像老师给学生发指令一样来控制 hart 的运行、暂停和复位等状态并且能根据 hart 反馈的信号了解它的状态。同时对 hart 的响应时间也有一定要求。 6. Abstract Command 抽象命令概述 调试模块DM支持一组抽象命令不过大部分命令是可选的。这就好比一个工具包里面有很多工具但不是每个工具都一定会被用到。 有时候就算被选中的硬件线程hart没有暂停调试器也能执行某些抽象命令。就好像你在一台电脑运行程序的时候也能对它进行一些简单的设置操作。 调试器要知道某个 hart 在特定状态下支持哪些抽象命令只能通过实际去尝试执行这些命令然后查看 abstractcs 寄存器里的 cmderr 值看看命令是否执行成功。就像你想知道一个新玩具能做哪些动作只能亲自去操作一下看看它能不能按你的要求做出反应。 而且有些命令在设置了某些选项时能支持设置其他选项时就不支持了。如果设置了不支持的选项DM 会把 cmderr 设置为 2表示 “不支持”。比如一个游戏有些难度级别是支持的有些难度级别是不支持的你选了不支持的难度游戏就会提示你不行。 执行抽象命令的过程 调试器执行抽象命令时就像给 DM 下指令要把命令写到 command 寄存器里。然后通过读取 abstractcs 寄存器里的 busy 位就能知道命令是否执行完了。命令执行完后cmderr 会告诉你命令是否成功。命令可能会失败原因可能是 hart 没暂停、没运行、不可用或者执行过程中遇到了错误。这就好比你让一个工人完成一项任务你可以通过看他是不是还在忙busy来知道任务有没有完成最后通过任务的结果cmderr来判断是否成功。 如果命令需要参数调试器得在写命令到 command 寄存器之前先把参数写到数据寄存器里。要是命令有返回结果DM 得在 busy 位清零之前把结果放到数据寄存器里。具体用哪些数据寄存器存参数在表格 3.1 里有说明而且最低有效字要放在编号最小的数据寄存器里。参数的宽度取决于执行的命令没明确指定时就是 DXLEN。这就好比你给工人布置任务时要先把任务所需的材料参数准备好放在指定的地方等任务完成后工人要把结果也放在指定的地方。 抽象命令接口的设计目的 抽象命令接口的设计是为了让调试器能尽快地发出命令之后再去检查命令是否无错完成。一般情况下调试器的速度比目标硬件慢很多而且命令通常能成功执行这样就能实现最大的吞吐量。要是有命令失败了这个接口能保证失败的命令之后不会再执行其他命令。调试器要找出是哪个命令失败了就得查看 DM 的状态比如 data0 寄存器的内容或者 hart 的状态比如被程序缓冲区程序修改的寄存器内容。这就好比你给一群工人依次布置任务先快速把任务都布置下去之后再检查任务完成情况。如果有一个任务失败了后面的任务就先不执行了然后通过查看相关的工作记录DM 或 hart 的状态来找出是哪个任务出了问题。 执行抽象命令的限制条件 在开始执行抽象命令之前调试器得确保 haltreq、resumereq 和 ackhavereset 这几个位都是 0。这就好比你要让工人开始一项新任务得先确保之前的暂停、恢复和复位相关的事情都处理好了。 当抽象命令在执行时abstractcs 里的 busy 位为高调试器不能改变 hartsel选择的 hart也不能把 haltreq、resumereq、ackhavereset、setresethaltreq 或 clrresethaltreq 这些位设置为 1。这就好比工人在干活的时候你不能随便换工人也不能突然让他暂停、恢复或者复位。 处理命令执行异常的情况 如果一个抽象命令没在预期时间内完成看起来像是卡住了调试器可以尝试下面的步骤来中止这个命令先复位 hart用 hartreset 或 ndmreset然后复位 DM用 dmactive。这就好比工人干活卡住了你先把他 “重启” 一下再把工作环境 “重启” 一下。 如果在所选的 hart 不可用的时候启动抽象命令或者在执行抽象命令时 hart 变得不可用了DM 可能会终止这个抽象命令把 busy 位清零把 cmderr 设置为 4表示 “暂停 / 恢复” 问题。也有可能命令看起来就像卡住了busy 位一直不清零。这就好比工人突然生病了hart 不可用正在做的任务可能就做不下去了要么直接停止要么就一直卡在那里。 6.1 Abstract command list 0x0000 - 0x0fff放的是 CSRs控制状态寄存器这里面可以通过 dpc 这个 “快捷方式” 访问 “PC”程序计数器类似记录你正在看哪一页书的标记。0x1000 - 0x101f放的是 GPRs通用寄存器像通用抽屉啥都能临时放一点。0x1020 - 0x103f放的是浮点寄存器专门放小数相关数据的抽屉。0xc000 - 0xffff留着以后给特殊扩展功能或内部用的现在先空着。 cmdtype等于 0 时代表这个命令是 “Access Register”访问寄存器就像给调试器一个 “访问寄存器” 的任务标签。aarsize决定访问寄存器时拿多少数据。2 是拿 32 位一小份3 是拿 64 位中等份4 是拿 128 位一大份。如果要拿的量比寄存器实际能给的多访问就会失败。aarpostincrement如果是 1比如你访问了 0 号寄存器访问完后下次自动变成访问 1 号寄存器像自动翻页。0 就是没这功能。postexec如果是 1在完成数据转移读或写寄存器后去执行 “程序缓冲区” 里的程序像做完一件事再顺手做另一件事。0 就是不做。transfer配合 write 用。1 表示要按 write 的指示做操作读或写寄存器。write当 transfer 是 1 时0 表示从寄存器读数据到 arg0从抽屉拿东西放篮子1 表示从 arg0 写数据到寄存器把篮子东西放抽屉。regno要访问的寄存器编号像抽屉号码。 “Access Register” 命令就像调试器当 “寄存器管理员”对 CPU 寄存器进行操作还能执行一个小任务程序缓冲区。举例 读寄存器比如你想看看 3 号寄存器regno 3里的内容。设置 write 0不写transfer 1要操作。调试器就像从 3 号抽屉里把东西拿出来放到 arg0 这个篮子里。写寄存器如果想把 arg0 篮子里的东西放到 5 号寄存器regno 5。设置 write 1写transfer 1要操作。调试器就把篮子东西放进 5 号抽屉。自动递增编号如果 aarpostincrement 1假设先访问 2 号寄存器访问完后下次 regno 自动变成 3 号像自动从第 2 页翻到第 3 页。执行程序缓冲区如果 postexec 1在完成读或写寄存器后调试器会去执行 “程序缓冲区” 里的程序像做完作业再去做手工。 调试模块必须实现这个命令。而且当硬件线程hart“暂停”像上课喊停学生不动时必须支持读写所有 GPRs通用寄存器那些通用抽屉。对于其他寄存器比如浮点寄存器支持情况不一定。可能有的寄存器只能读不能写或者在 hart 运行时像学生正常上课也能访问也可能不行。每个寄存器在 “读、写、hart 状态暂停或运行” 下的支持情况都可能不同。如果操作中任何一步失败比如要访问的寄存器根本不存在cmderr 会被设置像报错后面步骤也不做了。比如要开一个不存在的抽屉直接报错不再继续开其他抽屉。 通过这些操作调试器就能灵活地和 CPU 寄存器 “打交道”就像管理员管理抽屉一样按需读写还能在适当时候执行小任务。 6.2 快速访问 当 cmdtype 为 1 时表示这是一个 “Quick Access command快速访问命令 命令操作通俗解释 检查 hart 是否已暂停 假如把 hart 想象成一个正在工作的小机器人。如果这个小机器人已经停下来暂停了就像机器人正在休息这时这个命令会给 cmderr 设置为 “halt/resume”暂停 / 恢复相关的错误标记然后不再继续下面的操作。就好比你看到一个人已经坐下休息了还非要让他坐下那就会报错说 “别重复啦”。尝试让 hart 暂停 现在要让这个小机器人停下来。但如果小机器人因为其他原因比如遇到了一个 “小陷阱”—— 断点自己停下来了那这个命令也会给 cmderr 设置为 “halt/resume”不再继续下面的操作。这就像你让朋友帮忙去买东西结果朋友因为路上看到喜欢的店自己先停下了那你的任务就没法按计划进行得报错。执行程序缓冲区 让小机器人去执行一个 “小任务包”程序缓冲区。如果在执行这个 “小任务包” 时出了问题异常就像小机器人在执行任务时摔了一跤这时会给 cmderr 设置为 “exception”异常标记“小任务包” 的执行结束但这个快速访问命令还会继续往下走。就好比你让朋友去取快递朋友取快递时遇到点问题但你还是让朋友继续后面的行程。恢复 hart 运行 最后让小机器人重新开始工作恢复运行。 总结 这个 “Quick Access command” 是一个可选的命令不是必须有的功能而且在整个过程中它不会去动数据寄存器就像一个人只负责发号施令让机器人动但不碰机器人携带的包裹 —— 数据寄存器。通过这几个步骤调试器可以在一定条件下控制 hart 的暂停、执行特定任务包然后再恢复运行但每一步都有相应的规则和错误处理机制。 6.3 内存访问 cmdtype值为 2代表这是 “访问内存命令Access Memory Command” aamvirtual 0表示访问的是物理地址就像直接按实际房间号找房间操作直接在硬件线程hart对应的物理内存上进行。1表示访问的是虚拟地址且会像在机器模式M - mode下设置了 MPRV 那样进行地址转换类似通过门牌号对应的虚拟映射找房间。 aamsize决定访问内存区域的大小。 0访问内存位置的最低 8 位1 字节像从一个大箱子里拿 1 小格东西。1访问最低 16 位2 字节拿 2 小格。2访问最低 32 位4 字节拿 4 小格。3访问最低 64 位8 字节拿 8 小格。4访问最低 128 位16 字节拿 16 小格。 aampostincrement 1内存访问完成后arg1存地址的地方会按 aamsize 编码的字节数增加比如 aamsize 是 2访问 4 字节arg1 地址就 4像自动翻到下一页地址。0无此效果。 write 0从 arg1 指定的内存位置读数据到 arg0像从书架上拿书到自己手里。1把 arg0 的数据写到 arg1 指定的内存位置像把手里的书放回书架。 target - specific留给特定目标用的保留位暂时不用管像预留的特殊通道。 命令操作通俗解释结合例子 “访问内存命令Access Memory” 让调试器能像被选中的硬件线程hart一样访问内存包括 hart 本地的内存映射寄存器等好比调试器 “模仿” hart 去开它能开的抽屉。 读操作示例 假设 aamsize 2访问 32 位4 字节write 0读arg1 里存的地址是 0x1000。调试器就从内存地址 0x1000 处读 4 字节数据到 arg0像从 0x1000 这个抽屉里拿 4 件东西放到篮子 arg0 里。如果 aampostincrement 1读完后 arg1 会变成 0x1004地址自动加 4准备好下次读下一个抽屉。写操作示例 若 write 1写arg0 里有数据arg1 地址是 0x2000aamsize 3访问 64 位8 字节。调试器会把 arg0 的数据写到内存地址 0x2000 处像把篮子 arg0 里的东西放到 0x2000 这个抽屉里。失败处理 如果这些操作中任何一步失败比如 hart 在机器模式下执行相同访问也会失败的情况就设置 cmderr报错后面步骤不再执行像发现抽屉坏了马上停止操作并标记问题。 命令支持情况 调试模块可以选择实现这个命令并且可以支持在 hart 运行或暂停时访问内存位置。如果支持 hart 运行时的内存访问那也必须支持 hart 暂停时的内存访问好比如果允许在白天用某工具那晚上也得允许用。这个命令只有在读内存时会修改 arg0只有设置了 aampostincrement 才会修改 arg1其他数据寄存器不受影响像只动特定的篮子和抽屉编号其他篮子不动。
http://www.pierceye.com/news/867374/

相关文章:

  • 用vis做的简单网站网站建设需求方案pdf
  • 怎么免费做网站视频教学沈阳网站备案
  • 徐州有哪些网站制作公司太原住房和城乡建设部网站
  • 专门做摩托车的网站注册域名阿里云
  • 做个简单的网站建站公司费用
  • 网站建设举措网站免费建站方法
  • 遵义市双控体系建设网站wamp wordpress安装
  • 厦门的网站建设公司龙岗网站-建设深圳信科
  • 上海网站建设q.479185700強成都上界品牌设计事务所
  • 产品设计优秀网站做网站申请多少类商标
  • 中国行业网站贵州网站建设seo优化
  • 网站部兼容ie6没有防盗链的网站
  • google网站推广网站自助平台
  • 外贸自建站多久能出单wordpress的pdf阅读
  • 深圳东莞的网站建设公司网店代运营哪里好
  • 做费网站wordpress折叠代码
  • 分析海报的网站企业网站服务费怎么做记账凭证
  • 海南建设大厅网站888网创
  • aspnet网站开发实例项目河南网站建设推广
  • ppt免费模板大全网站微网站建设网站
  • 郑州网站建设七彩科技网络服务器配置设计
  • 专业企专业企业网站设计洛阳青峰网络
  • 网站开发需要多少钱如何销售管理系统需求分析
  • 西安网站建设查派9861云南网站建设
  • 做微商网站制作网站曝光率
  • 平价网站平价网站建设建设百度电话号码
  • 有哪些做拎包入住的网站中国建设银行网站会员用户名
  • 用模板搭建的网站备案吗wordpress热门文章调用
  • 有哪些电商网站中山视角做网站的公司
  • 做网站 点击跳转html菜鸟教程下载