开发效率与工具

在制造机械产品时,如果有良好的工具,则能够制造出效率高且精确的机械产品。在制造机械电子产品时也是一样,如果有良好的工具,则能够在短时间内获得优良的机械电子产品。因此,虽然在配有适当软件的计算机与机械相结合的情况下不会有什么问题,但是在不具备这些条件的情况下,就必须准备必要的工具了.虽然在开发机械电子产品时,对于不同的产品可以准备特有的工具,但是在市场上也在出售通用的开发工具。这里我们对通用的开发工具的性能作一些介绍,并且对于高效率的软件生产问题进行一些探讨。

开发工其开发工具是包含CPU的硬件与软件的集合,常常称之为主计算机(主机)。其基本组成部分包括编辑程序、汇编程序、编泽程序、连接程序、在线仿真、嵌套仿真程序、符号调试程序、PROM写入程序等,应该开发的成品称为目标。主机与目标属于同一计算机时,不需要仿真程序.如昊确定了应该开发的软件的方式和软件的描述语言,则使用编辑程序可以形成程序的文本。这个文本可以根据汇编程序,编译程序和连接程序变换成可以实际执行的机械语言.通过在目标系统上实际执行这个程序,对程序进行调试。经过反复调试,就可以得到完善的程序.把调试完成的程序中可以ROM化的部分,利用PROM写入程序,固化到PROM中.以上是开发步骤,下面对这些步骤进行详细讨论。

软件的描述语言下列标准语言可以选为软件的描述语言.它们是汇编语言、PASCAL语言、C语言和FORTRAN语言。在具有不同特征的语言中,最终的选择取决于使用人的兴趣,但是下列各点在进行选择时必须加以注意。

(1)容易阅读

写出来的程序要容易阅读,不论是别人阅读,还是自己阅读,都要容易,这点很重要。当然,也有习惯问题,但是总起来说,若能以简洁的形式描述程序,那么就是好的语言。用高级语言书写时,在CRT的一幅画面内容纳20行的程序,如果改用汇编语言书写,一般来说则需要数百行才能实现。

(2)可移植性

当需要把程序完全移植到别的目标系统时,其移植工作要简单,汇编语言依赖于目标CPU的指令系统。因此,在用汇编语言写成程序的情况下,即使把在某一系统中应用的程序再应用到具有别的CPU的目标系统,也必须从头开始对程序进行改写,从这一点来说,在用高级语言描述程序的情况下,由于编译程序具有从高级语言转变到机械语言的能力,所以不必对程序作大的变动。最后,在编写程序时,如果应用高级语言,则无需考虑计算机的结构,这也是它的一个突出优点,

(3)不易造成执行误差

在编写出来的程序中,必然包含着误差。从因采用未知变量初始值引起的误差,到程序执行过程中引起的误差,其种类千差万别。对干汇编语言,应该研究CPU是否能够执行各种记忆,即应当研究,是否存在与各种记忆相应的指令。因此,在编写执行速度较快的程序和编写精确的程序时,其近似代用程序在执行过程中就很容易产生误差。编出的程序通用性越强,执行中产生误差的机会也越多。例如,当往存贮器中写进命令时,由于粗心而弄错了存贮器地址,写进了错误的地址,从而导致了异常现象。诸如此类的错误是会经常发生的。与此对应,如果使用PASCAL语言,由于该语言具有严谨的语法规则,在改写程序时,即使对存贮器考虑的很少,也不易导致误差。最后,对于指令和指令的并行情况,在进行代换时,不会产生相互干扰。因此,用机器语言执行时,不易产生误差。

尽管用高级语言写出的程序在执行速度上有损失,但是如果考虑到上述(1)—(3)条因素,仍然是有利的。虽然是这么说,但是在使用不能对IO设备进行访问的语言时,仍必须将有关部分写成汇编语言,因此不得不采用构成连接的方法。即使是在这种情况下,只能用汇编语言编写的部分,也还是应该用简洁的方式进行

编写。对于只希望缩短执行时间的场合,可以首先利用高级语言编写出完整的程序,然后再将需要改写成汇编语言的那部分程序

(利用频繁的部分),依次改写成汇编语言。采用这种方法是比较合适的。

编辑程序与连接程序4.3节的程序是用PASCAL语言写成的。在构成这种程序文本时,需要以编辑程序作为工具。利用编辑程序,可以容易地对文本中的行和文字进行消除、插入和更改。在4.3节的示例中,其程序通常由一个模块构成。对于分割成两个以上模块的情况,和I0部分用汇编语言编程的情况,由于应该变换成机械语言,所以都会变成多个模块的情况。这些程序模块的结合,正是靠连接程序实现的。此外,编译程序只限于通过调出程序库中的子程序取代标准函数和实数运算,至于程序库中相应子程序的复制,以及将此子程序连接到总程序中的任务,则要由连接程序完成。再者,关于可以进行ROM化的程序,一般将变量和堆栈放到RAM区域中,而将常数和指令放到ROM区域中,这也要由连接程序进行分配。

仿真和调试能够使用编辑程序、汇编程序、编译程序和连接程序对机器语言程序进行调试的工具,是在线仿真(ICE)和符号调试程序

捕获.JPG

在线仿真是当主机与目标不同时,将在主机上开发的程序在目标上加以执行的一种工具。目标的CPU本来应当包含在目标中,通过将来自主机方面的连接件插人接口进行使用(图4.28).在仿真系统中,目标中的CPU与主机可以司时访问共用存贮器。此外,主机具有对目标中的CPU进行中断的功能,等等。目标CPU的作用大致可以分为两种:(i)执行目标上的程序,(ii)进行主机与目标间的信息交换。就作用(i)而言,单从执行程序来说,当然是没有问题的,但是怎样才能使这个程序输入到目标存贮器上却是一个问题。作用(ii)解决了这个问题,其原理将在下面说明。为了进行目标与主机之间的信息传递,目标上用的所谓监控程序,需要由主机装进共用存贮器中。这里,如果目标的CPU执行监控程序,则它与主机的信息传递便可以进行,主机就能够在目标的存贮器和CPU的寄存器上进行读写。其次,通过监控程序,把需要进行调试的程序存放到目标中,如果在目标CPU的程序计数器中设定了目的程序的开始地址,就能够执行程序了.执行中,如果程序中断,通过在目标CPU中产生中断转移,执行监控程序就可以了。执行中程序断点的设置,例如可以指定为存贮器中某地址的访问时间等。这时,比如可以利用简单的逻辑电路,对地址总线进行监视,只要被设置的地址出现时产生中断就行了.因为当对执行中的程序设置断点后,就会返回到监控程序,所以此时可以从主机方面对存贮器和寄存器进行读写。利用这一特点,可设定执行程序中的断点,并且将这一时刻的目标状态连接到监控程序,从而提供了对程序进行调试的方法。例如在程序地址2000上进行中断,可以提供对地址4000中的变量数值进行检查的方法。但是,这个例子中的2000,4000这些值的确定工作,在用汇编语言编写程序时,就是在预先赋予了绝对地址的情况下,也是相当麻烦的?况且在用高级语言编写程序时,将源文木的哪一行赋予哪个地址,计算起来也是相当麻烦的。因此,在源文本的第11行上进行中断,并且在需要表示这时的变量“的情况下,使用line-11,a这种符号,以取代2000,4000等这样一些数,就比较方便了,于是,计算机将line-11,a变换成了对应的地址2000,4000.这样一来,源文本中的符号就可以用来代替数,并且可以对存贮器和寄存器进行读写及进行断点设置.这种对程序进行调试的方法称为符号调试如上所述,如果具有上面所说的调试工具,就可以调试出效果比较好的软件。此外,如果这种方法运用得越熟练,人们就越会发现这种方法具有的更大的优越性,在编写目标程序之前,首先应该做到,一面寻找可供利用的工具,一面编制程序,这点是至关重要的。


随便看看