📄 00000002.htm
字号:
<?xml version="1.0" encoding="gb2312"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/><title>关于指令预取,有谁比较了解吗???? turbolinux </title></head><body><center><h1>BBS 水木清华站∶精华区</h1></center><a name="top"></a>发信人: flew (游泳的鱼), 信区: Embedded <br />标 题: 关于指令预取,有谁比较了解吗???? <br />发信站: BBS 水木清华站 (Fri Jan 18 13:36:09 2002) <br /> <br /> <br /> 指令预取技术在很多处理器里都有体现,它极大程度提高了处理器的效率。 <br /> 但是,也带来了一些问题。 <br /> <br /> 在进行软件软件测试的时候,一个很基本的需要了解的测试结果就是程序分支 <br /> 覆盖率。如果对处理器的所有状态(地址,数据,控制总线)进行跟踪,会发现 <br /> 一些没有实际执行的代码也被检测到,这就是因为指令预取的缘故。 <br /> <br /> 目前常用的方法是在所有的分支点进行插桩处理,处理器通知外界是否 <br /> 真正执行了某个分支的代码。但这不可避免的修改了目标代码,使得目标代码 <br /> 无法完全在真实环境下执行,影响目标程序的效率和实时性。 <br /> <br /> 如何解决这个问题呐?有兴趣的朋友不妨讨论一下这个有意思的话题。 <br /> 解释一下我的疑惑。//bow <br /> <br /> 哪位有什么指点或也对这个问题感兴趣,可以和我联系<a href="mailto:SmartZJ@263.net">SmartZJ@263.net</a> <br />-- <br /> <br />※ 修改:·flew 於 Jan 18 13:41:01 修改本文·[FROM: 202.112.137.7] <br />※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.112.137.7] <br />发信人: flew (游泳的鱼), 信区: Embedded <br />标 题: Re: 关于指令预取,有谁比较了解吗???? <br />发信站: BBS 水木清华站 (Fri Jan 18 13:39:56 2002) <br /> <br /> <br /> 斑竹如果觉得我这个问题提的不算离开本版的主旨,请给m或g一下 <br /> 兴许有一天有熟悉这类问题的朋友可以解释一下,谢谢!//bow <br /> <br />-- <br /> <br />※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.112.137.7] <br />发信人: neuronlee (机械化神经元), 信区: Embedded <br />标 题: Re: 关于指令预取,有谁比较了解吗???? <br />发信站: BBS 水木清华站 (Fri Jan 18 13:50:52 2002) <br /> <br />如果能监视CPU中的PC寄存器就不会有问题了罢? 因为pc总是保存下 <br />一条要实际执行的指令. 或者利用陷阱中断, 每执行一条指令就跳 <br />到陷阱中断中, 而中断服务程序保存现场到一个日志中. 调式后通过 <br />分析记录来获得覆盖率. 这样你就不用修改目标代码了. <br />其实在软件中加入测试代码是很正常的, 当然是在系统资源允许的情况 <br />下. <br />【 在 flew (游泳的鱼) 的大作中提到: 】 <br />∶<i> 指令预取技术在很多处理器里都有体现,它极大程度提高了处理器的效率。 </i><br />∶<i> 但是,也带来了一些问题。 </i><br />∶<i> 在进行软件软件测试的时候,一个很基本的需要了解的测试结果就是程序分支 </i><br />∶<i> 覆盖率。如果对处理器的所有状态(地址,数据,控制总线)进行跟踪,会发现 </i><br />∶<i> 一些没有实际执行的代码也被检测到,这就是因为指令预取的缘故。 </i><br />∶<i> 目前常用的方法是在所有的分支点进行插桩处理,处理器通知外界是否 </i><br />∶<i> 真正执行了某个分支的代码。但这不可避免的修改了目标代码,使得目标代码 </i><br />∶<i> 无法完全在真实环境下执行,影响目标程序的效率和实时性。 </i><br />∶<i> 如何解决这个问题呐?有兴趣的朋友不妨讨论一下这个有意思的话题。 </i><br />∶<i> 解释一下我的疑惑。//bow </i><br />∶<i> 哪位有什么指点或也对这个问题感兴趣,可以和我联系<a href="mailto:SmartZJ@263.net">SmartZJ@263.net</a> </i><br />∶<i> ................... </i><br /> <br />-- <br />According to the system log, windows had already started, but <br />it seems to be murdered mysteriously! :-DDDDDDDD <br /> <br /> <br />※ 来源:·BBS 水木清华站 smth.org·[FROM: 66.75.17.82] <br />发信人: flew (游泳的鱼), 信区: Embedded <br />标 题: Re: 关于指令预取,有谁比较了解吗???? <br />发信站: BBS 水木清华站 (Fri Jan 18 14:19:02 2002) <br /> <br /> <br />【 在 neuronlee (机械化神经元) 的大作中提到: 】 <br />∶<i> 如果能监视CPU中的PC寄存器就不会有问题了罢? 因为pc总是保存下 </i><br /> 但是PC好象无法从处理器外直接访问啊,如果可以,这个办法最简洁了 <br /> <br />∶<i> 一条要实际执行的指令. 或者利用陷阱中断, 每执行一条指令就跳 </i><br />∶<i> 到陷阱中断中, 而中断服务程序保存现场到一个日志中. 调式后通过 </i><br />∶<i> 分析记录来获得覆盖率. 这样你就不用修改目标代码了. </i><br /> 这样会干涉目标程序的运行,影响实时性,从而也有可能影响分支覆盖率 <br /> 的真实性。比如,平时调程序的时候,单步可以正确执行,可是全速运行就 <br /> 出问题,是不是也就是一个类似的情况。 <br /> <br />∶<i> 其实在软件中加入测试代码是很正常的, 当然是在系统资源允许的情况 </i><br />∶<i> 下. </i><br /> 我是在设想,如何对目标程序和目标系统不进行任何干涉,只是采样其外部 <br /> 信号状态来解决这个问题。大侠认为有可能吗?比如把所有的状态都采集 <br /> 下来,然后进行事后分析?有类似的前人经验吗? <br /> <br /> 谢谢! <br /> <br />-- <br /> <br />※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.112.137.7] <br />发信人: psun (sam), 信区: Embedded <br />标 题: Re: 关于指令预取,有谁比较了解吗???? <br />发信站: BBS 水木清华站 (Fri Jan 18 15:36:39 2002) <br /> <br />我对这个东西就一知半解,智能把从wangyyff和ornot两位大侠那里 <br />听来的一些只言片语从我理解的角度来说一说了。而且也只是基于ARM处理器的。 <br />【 在 flew (游泳的鱼) 的大作中提到: 】 <br />∶<i> 但是PC好象无法从处理器外直接访问啊,如果可以,这个办法最简洁了 </i><br />ARM的JTAG调试可以把指令插入到指令流水线里面,这样要访问PC也就不是什么困难了。 <br />这种情况下,所有CPU的内部状态都是可以检测的。 <br />∶<i> 这样会干涉目标程序的运行,影响实时性,从而也有可能影响分支覆盖率 </i><br />∶<i> 的真实性。比如,平时调程序的时候,单步可以正确执行,可是全速运行就 </i><br />∶<i> 出问题,是不是也就是一个类似的情况。 </i><br />在需要的时候,调试器给出一个中断,停止CPU的运行,然后可以监测CPU内部的状态, <br />然后可以给出一个运行指令,让CPU进行全速运行。这样的话,就不会有这种问题出现 <br />了。 <br />∶<i> 我是在设想,如何对目标程序和目标系统不进行任何干涉,只是采样其外部 </i><br />∶<i> 信号状态来解决这个问题。大侠认为有可能吗?比如把所有的状态都采集 </i><br />∶<i> 下来,然后进行事后分析?有类似的前人经验吗? </i><br />这个想法很好,事实上JTAG调试也是基于这种想法的,只是它所采集的信号不是从 <br />CPU外部,而是在CPU core与外围的接口处。 <br />∶<i> 谢谢! </i><br /> <br /> <br />-- <br /> <br />※ 来源:·BBS 水木清华站 smth.org·[FROM: 203.93.105.208] <br />发信人: flew (游泳的鱼), 信区: Embedded <br />标 题: Re: 关于指令预取,有谁比较了解吗???? <br />发信站: BBS 水木清华站 (Fri Jan 18 17:21:53 2002) <br /> <br /> <br /> 感谢psun大侠的提示,看你的ID就很熟,,原来已经列为好友,肯定是 <br /> 之前也向你请教过,可惜在水木请教、讨论的问题太多,记不得什么问题了, <br /> 真是不好意思!:) <br /> <br />【 在 psun (sam) 的大作中提到: 】 <br />∶<i> 我对这个东西就一知半解,智能把从wangyyff和ornot两位大侠那里 </i><br /> 这两位还在水木吗?我一定要跟他们请教一下。 <br /> <br />∶<i> 听来的一些只言片语从我理解的角度来说一说了。而且也只是基于ARM处理器的。 </i><br />∶<i> ARM的JTAG调试可以把指令插入到指令流水线里面,这样要访问PC也就不是什么困难了
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -