《电子信息外文翻译成品(共20页).doc》由会员分享,可在线阅读,更多相关《电子信息外文翻译成品(共20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上毕业设计(论文)外文资料翻译系 : 电气工程学院 专 业: 姓 名: 学 号: (用外文写)外文出处: Getting Started with Vision2 附 件: 1.外文资料翻译译文;2.外文原文。 指导教师评语: 签名: 年 月 日附件1:外文资料翻译译文嵌入式系统程序的下载和调试当你已经在主机上有了一个可执行二进制映像文件的时候,你就需要有一种途径来把这个映像文件下载到嵌入式系统运行了,可执行二进制影响一般是要下载到目标板上的存储器里并在那里执行,并且如果你配备了适当的工具的话,还可以在程序里设置断点或以一种不干扰的方式来观察运行情况,本章介绍了可用于下
2、载,运行和调试嵌入式软件是各种技术。4.1 在ROM中的时候.下载嵌入式软件的最明显的方式,是把二进制映像载入一片存储片并把它插在目标板上,虽然一个整整的只读是不能再覆盖写入的,不过你会在第六章“存储器”里看到,嵌入式系统通常使用了一种特殊的只读存储器,这种存储器可以用特殊的编程器来编程(或重新写入程序).编程器是一种计算机系统,它上面有各种各样的形状和大小的芯片插座,可以用来为各种存储芯片编程。在一个理想的开发条件下,设备编程器应该和主机接在同一个网络上。这样,可执行二进制映像文件就很容易传给它来对ROM芯片编程。首先把映像文件传到编程器,然后把存储器芯片插入大小形状何时的插座里并冲编程器屏
3、幕上的菜单里悬着芯片的型号。实际的编程过程可能需要几秒到几分钟,这要看二进制映像文件的大小和你所用的芯片型号来定。变成结束以后,你就可以把ROM插进板上的插座了,当然,不能在嵌入式系统还在加电的时候做这件事。应该在插入芯片之前关掉电源,插入之后在打开。一旦加电,处理器就开始从ROM里取出代码并执行。不过,要注意到每一种处理器对第一条指令的位置都有自己的要求。例如,当Intel80188EB处理器复位以后,它就会取位于物理地址FFFF0h的指令来执行。这个地址叫做复位地址,位于那里的指令就叫复位代码。如果你的程序看起来像是没有正确运行,那可能是你复位代码出了问题。你必须保证ROM里你的二进制映像
4、格式要遵从目标处理器的复位要求。在开发过程中,我发现在复位代码执行之后打开板子上的一个LED非常有用,这样我一眼就知道我的芯ROM程序是不是满足了处理器的基本要求。注意:调试技巧#1:一个最简单的调试技巧就是利用LED来指示成功或者失败。基本思路是慢慢地从LED驱动代码过渡到更大的程序,把LED驱动代码挪到下一个运行标记的地方。这个方式最适合启动代码那样简单的,线性执行的程序。如果你没有本章后面提到的远程调试器或者任何其他调试工具的话,这也许是你唯一的调试办法了。Arcom电路板 特殊的在线可编程存储器,叫做快闪存储器(简称闪存),它可以在不从板上移走的情况下编程。实际上,板上的另外一块存储器
5、中已经包含了可以对这个快闪存储器编程的功能。你知道吗,Arcom电路板上实际带了两个只读存储器,一个是真正的ROM,其中包含了可以让用户对另外一片(即快闪存储器)在线编程的简单程序。主机只需通过一个串行通信口和一个终端程序就可以和这个监控程序沟通了。随板提供的“Target188EB Monitor Users Manual”包含了把一个Intel十六进制格式文件,比如blink.hex,载入到闪存里的指令。这种下载技术的最大缺点是没有一种简单的方法来调试运行在ROM外面的软件,处理器以一种很高的速度提取指令并执行,并没有提供任何使你观察程序内部状态的手段。这在你已经知道你的软件工作正常并且你
6、在计划分发这个系统的时候看起来是不错的,不过对于正在开发的软件是一点用多没有。当然,你还是可以检查LED的状态和其他外部可视硬件指示,但这永远不会比一个调试器提供更多的信息和反馈。4.2 远程调试器如果可能的话,一个远程调试器可以通过主机和目标机之间的串行网络连接来下载、执行和调试嵌入式软件。一个远程调试器的前端和你可能用过的其他调试器都一样,通常有一个基于文本或GUI(图形用户界面)的主窗口和几个小一点的窗口来显示正在运行的程序的源代码、寄存器内容和其他相关信息。所不同的是,在嵌入式系统的情况下,调试器和被调试的软件分别运行在两台不同的计算机上。一个远程调试器实际上包含两部分软件。前端运行在
7、主机上并提供前述的人机界面。但还有一个运行在目标处理器上的隐藏的后端软件来负责通过某种通信链路和前端通信。后端一般被称作调试监控器,它提供了对目标处理器的低层控制。监视控制器通常是你或生产厂以前讲过的方式放置在ROM里的,它在目标处理器复位的时候会自动启动。它监控和主机的通信链路并对远程调试器的请求做出回应。当然,这些请求和监控器的响应必须符合某种预先定义好的通信协议,而且这些协议通常是很底层的。远程调试器的请求的一些示例就如“读寄存器x”、“修改寄存器y”、读从address开始的内存的n字节”还有“修改位于address的数据”等等。远程调试器通过组合利用这些低层命令来完成诸如下载程序、单
8、步执行和设置断点等高级调试任务。GUN调试器(gdb)就是这样一个调试器,像其他GUN工具一样,它一开始是被设计用来完成本机调试,后来才具有了跨平台调试的能力。所以你可以创建一个运行在任何被支持的主机上的GDB前端,它就会理解任何被支持的目标上的操作码和寄存器名称。一个兼容的调试兼容器的源代码包含在GDB软件包里面,并需要被移植到目标平台上,不过,要知道这个移植可能需要一些技巧,特别是如果你的配置里只能通过LED来调试的话(参见调试技巧#1)。GDB前端和调试监控器之间的通信专门被设计来通过串行连接进行字节传输。表4-1显示了命令格式和一些主要的命令。这些命令示范了发生在典型的远程调试器前端和
9、调试器之间的交互类型。Table 4-1. GDB 调试监控器命令 命令请求格式响应格式读存储器gdata写存储器GdataOK读某地址数据maddress,lengthdata写某地址数据Maddress,length:data OK启动/重启执行cSsignal从某地址执行caddressSsignal单步执行sSsignal从某地址开始单步执行saddressSsignal重置/中止程序kno response远程调试器是嵌入式软件里最常用到的下载和测试工具。这主要是因为它们一般比较便宜。嵌入式软件开发人员已经有了所需的主机了,任何一个远程调试器的价格并不会在全套跨平台开发工具(编译器、
10、连接器、定址器等等)的价格上增加多少,还有调试器的供应商们通常会提供他们的调试监控器的源代码,以增加他们的用户群。Arcom电路板在交付的时候在快闪存储器里包含了一个免费的调试系统。和Arcom提供的主机软件一起使用,这个调试监控器就可以把程序直接下载到目标板的RAM里并运行,你可以用tload工具来完成这一任务。按照“SourceVIEW forTarget188EB Users Manual”的指示简单地把SourceVIEW串行通信适配器接到目标板和主机上,然后在主机PC上执行下述命令:tload -g blink.exeSourceView Target Loader v1.4Copy
11、right (c) Arcom Control Systems Ltd 1994Opening blink.exe. download size 750H bytes (2K)Checking COM1 (press ESC key to exit).Remote ident: TDR188EB version 1.02Download successfulSending GO command to target system-g选项告诉调试监控器程序下载一结束就马上开始运行,这样一来,运行就是和ROM里的程序完全对应的RAM里的程序了。在这种情况下,我们也许会以可重定址程序来开始,那么tlo
12、ad工具也会自动地在RAM里第一个可利用的地址处为我们的程序重新定址。对于远程调试的目的,Arcom的调试监控器可以用Borland的Turbo Debugger做前端。然后Turbo Debugger就可以单步执行你的C/C+和汇编程序,在程序里设置断点,并可以在程序运行时监控变量、寄存器和堆栈(注1),下面是你可能用来启动一个对闪烁LED程序的调试会话的命令:tdr blink.exetver -3.1Target Debugger Version Changer v1.2Copyright (c) Arcom Control Systems Ltd 1994Checking COM1 (
13、press ESC key to exit).Remote ident: TDR188EB version 1.02TDR88 set for TD version 3.1td -rp1 -rs3 blink.exeTurbo Debugger Version 3.1 Copyright (c) 1988,92 Borland InternationalWaiting for handshake from remote driver (Ctrl-Break to quit)Tdr命令实际是调用另外两个命令的一个批处理文件。第一个命令告诉板上的调试监控器你用的是哪个版本的Turbo Debugg
14、er,第二个才实际调用Turbo Debugger,每一次用Arcom板启动一个调试会话的时候都会发出这两条命令、tdr.bat批处理文件只是用来把它们组合成一个单一的命令。这里我们再一次使用了程序的可重定址版本,因为我们要把程序下载到RAM里并在那里执行它。调试器启动选项-rpl和-rp3设置了到调试监控器的通信链路的参数。-rpl代表“remote-port(远程端口)=1”(COM1),-rp3代表“remote-speed(远程速率)=3”(38400波特率),这些是同Arcom调试监控器通信所要求的参数。在建立了和调试监控器的联系后,Turbo Debugger就可以开始运行了。如果
15、没成功的话,可能是串行连接出了问题。把你的安装过程和Source View用户手册中的描述对照一下。一旦进入Turbo Debugger,你就会看到一个对话框显示“Program out of date on remote,sent over link?(远程的程序已过期,是否通过链路发送?)”,选择“yes”后,blink.exe的内容就会被下载到目录RAM中,然后调试器会在main处设置第一个断点并指示调试监控器运行程序到此处。所以你现在看到的就是main的C源代码,一个光标指示着嵌入式处理器的指令指针正指向这个例程的入口点。使用标准的Turbo Debugger命令,你可以单步执行程序、
16、设置断点、监控变量和寄存器的值、做调试器允许的任何事。或者可以按下F9立即运行程序的剩下部分、这样做了以后,你就能看到板上的绿色LED开始闪烁了。确认程序和调试器都正常工作之后,按下Arcom板上的复位开关来复位复位嵌入式处理器,然后LED会停止闪烁,Turbo Debugger又可以响应你指令了。4.3 仿真器远程调试器用来监视和控制嵌入式软件的状态是很有用,不过只有用在线仿真器(In-Circuit Emulator,ICE)才能检查运行程序的处理器状态。实际上,ICE取代了(或者仿真了)目标板上的处理器。它自己就是一个嵌入式系统,有它自己的目标处理器、RAM、ROM和自己的嵌入式软件,结
17、果在线仿真器一样非常贵,往往要比目标硬件还贵。但是这是一种强有力的工具,在某些严格的环境下可以帮你很大忙。同调试监控器一样,仿真器也有一个远程调试器作为用户界面。某些情况下,甚至能使用相同的前端调试器。但是仿真器有自己的目标处理器,所以就有可能实时的监视和控制处理器的状态。这就允许仿真器在调试监控器提供的功能外支持一些高级的调试特性,如:硬件断点额实时跟踪。使用调试监控器,你可以在你的程序里设置断点。不过这些软断点只能到指令提取级别,也就是相当于“在提取该指令前停止运行”。相比之下,仿真器同时支持硬件断点。硬件断点允许响应多种事件来停止运行。这些事件不仅包括指令提取,还有内存和I/O读写以及中
18、断。例如,你可以对事件“当变量foo等于15同时AX寄存器等于0”设置一个硬件断点。在线仿真器的另一种有用的特性是实时跟踪,典型地仿真包含了大块的专用RAM,专门用来存储执行过的每一个指令周期的信息。这个功能使你可以得知事件发生的精确次序,这就嫩帮助你回答诸如计时器中断是发生在变量bar变成94之前还是之后这类的问题。另外,通常可以限制存储的信息或者在查看之前预处理数据以精简要检查的数据的数量。4.4 ROM仿真器另外一种仿真器也值得在这里提一下。ROM仿真器被用来仿真一个只读存储芯片。和ICE一样,它是一个独立的嵌入式系统并和主机与目标板相连。不过,这次是通过ROM芯片插座来和目标板连接的。
19、对于嵌入式处理器,它就像一个只读存储芯片,而对于远程调试器,它又像一个调试器。ROM仿真器相比调试监控器有如下几个优点。首先,任何人都不需要为你的专有目标硬件移植调试监控器代码。其次,ROM仿真器通常自带了连接主机的串行或网络连接,所以不必用主机自己的通常很有限的资源。最后,ROM仿真器完全替代了原有的ROM,所以不会占用目标板的存储空间来容纳调试监控器代码。4.5模拟器和其他工具当然,还可以使用另外很多种调试工具,比如模拟器(simulator)、逻辑分析仪和示波器。模拟器是一个完全基于主机的程序,它模拟了目标处理器的功能和指令集,它的用户界面通常和远程调试器的一样和比较类似。实际上,可以为
20、后端模拟器使用一个调试器来做前端,就像图4-2显示的那样。尽管模拟器有很多不足,它在项目的早期特别是没有任何实际的硬件可以用来试验程序的时候就相当有用。注意:调试技巧#2:如果曾经遇到目标处理器从不同于你认为应该的数据手册里读取数据,尝试在模拟器上运行相同的软件。如果你的程序正常工作,那么你知道这是某种形式的硬件问题。但是,如果模拟器展示相同的问题像实际芯片一样,你就知道你错误的曲解了处理器的所有文件。到目前为止,一个模拟器最大的缺点是它仅能模拟处理器,而且嵌入式系统经常包含一个或多个其他重要设备。与这些设备相互作用有时会模仿与仿真脚本或其他变通办法,但这种解决方法相比模拟本身的价值创造了更多
21、的麻烦。所以,你可能不会做太多的模拟器,一旦你有实际嵌入式硬件提供给您。他们对处理器和其它芯片之间的相互作用非常有用。因为他们只能查看信号处理器以外的错误,但是,他们无法控制你的像一个调试器或仿真器软件可以执行流程。这使得这些工具本身明显用处不大。但是,再加上像一个远程调试调试器或仿真器工具软件,它们可以是非常宝贵。逻辑分析仪是专门用来调试数字电路硬件的一种实验室设备。它会有几十个甚至上百个输入,它们分别只用来做一件事:它所连接的电信号的逻辑电平是1还是0。你选择的任何输入子集都可以以时间坐标显示出来,如图4-3所示。大多数逻辑分析仪也允许你以特定的模式捕捉数据或“触发器”。例如,你可以发出如
22、下请求:“显示输入信号1到10的值,但是直到输入2和5同时变为0时才开始记录”。注意:调试技巧#3:有时可能需要同时观察运行着嵌入式软件的目标板上电信号的一个子集。例如:你可能想观察处理器和它所连一个外设的总线交互信号。一个技巧是在你感兴趣的交互的前面加上一个输出语句。这个输出语句会在处理器的一个或多个引脚上产生特定的逻辑电平。例如,你可以使一个空闲的I/O引脚从0到1,然后逻辑分析仪就可以设置成响应这个使劲的触发器并开始捕获后续的所有情况。示波器是用于硬件调试的另一种试验室设备,不过它可以在任何硬件上检查任何电信号,不管是模拟的还是数字的。在手头没有逻辑分析仪的情况下,示波器可以迅速观察特定
23、引脚上的电压,也可以做一些更复杂的事情。不过,它的输入很少(通常有四个)而且通常没有高级的触发逻辑。结果,只有在没有软件调试工具的情况下它才会对你有用。附件2:外文原文(复印件)RTX-51 Real-TimeOperating SystemRTX51 is a multitasking real-time operating system for the 8051 family. RTX51simplifies system and software design of complex and time-critical projects.RTX51 is a powerful tool t
24、o manage several jobs (tasks) on a single CPU. Thereare two distinct versions of RTX51:RTX51 Full which performs both round-robin and preemptive task switchingwith 4 task priorities and can be operated with interrupt functions in parallel.RTX51 supports signal passing; message passing with a mailbox
25、 system andsemaphores. The os_wait function of RTX51 can wait for the following events:interrupt; timeout; signal from task or interrupt; message from task or interrupt;semaphore.RTX51 Tiny which is a subset of RTX51 Full. RTX51 Tiny easily runs onsingle-chip systems without off-chip memory. However
26、, program using RTX51Tiny can access off-chip memory. RTX51 Tiny allows round-robin taskswitching, supports signal passing and can be operated with interrupt functionsin parallel. The os_wait function of RTX51 Tiny can wait for the followingevents: timeout; interval; signal from task or interrupt.Th
27、e rest of this section uses RTX-51 to refer to RTX-51 Full and RTX-51 Tiny.Differences between the two are stated where applicable.IntroductionMany microcontroller applications require simultaneous execution of multiplejobs or tasks. For such applications, a real-time operating system (RTOS) allowsf
28、lexible scheduling of system resources (CPU, memory, etc.) to several tasks.RTX-51 implements a powerful RTOS that is easy to use. RTX-51 works withall 8051 derivatives.You write and compile RTX-51 programs using standard C constructs andcompiling them with C51. Only a few deviations from standard C
29、 are requiredin order to specify the task ID and priority. RTX-51 programs also require thatyou include the RTX51.H or RTX51TNY.H header file. When you select in theVision2 dialog Options for Target - Target the operating system, the linker addsthe appropriate RTX-51 library file.Single Task Program
30、A standard C program starts execution with the main function. In an embeddedapplication, main is usually coded as an endless loop and can be thought of as asingle task that is executed continuously. For example:Round-Robin Task SwitchingRTX51 Tiny allows a quasi-parallel, simultaneous execution of s
31、everal tasks.Each task is executed for a predefined timeout period. A timeout suspends theexecution of a task and causes another task to be started. The following exampleuses this round-robin task switching technique.Simple C Program using RTX51RTX51 starts the program with task 0 (assigned to job0)
32、. The functionos_create_task marks task 1 (assigned to job1) as ready for execution. Thesetwo functions are simple count loops. After the timeout period has beencompleted, RTX51 interrupts job0 and begins execution of job1. This functioneven reaches the timeout and the system continues with job0.The
33、 os_wait FunctionThe os_wait function provides a more efficient way to allocate the availableprocessor time to several tasks. os_wait interrupts the execution of the currenttask and waits for the specified event. During the time in which a task waits foran event, other tasks can be executed.Wait for
34、 TimeoutRTX51 uses an 8051 timer in order to generate cyclic interrupts (timer ticks).The simplest event argument for os_wait is a timeout, where the currentlyexecuting task is interrupted for the specified number of timer ticks. Thefollowing uses timeouts for the time delay.Program with os_wait Fun
35、ctionThis program is similar to the previous example with the exception that job0 isinterrupted with os_wait after counter0 has been incremented. RTX51 waitsthree timer ticks until job0 is ready for execution again. During this time, job1 isexecuted. This function also calls os_wait with a timeout o
36、f 5 ticks. The result:counter0 is incremented every three ticks and counter1 is incremented every fivetimer ticks.Wait for SignalAnother event for os_wait is a signal. Signals are used for task coordination: ifa task waits with os_wait until another task issues a signal. If a signal waspreviously se
37、nt, the task is immediately continued.Program with Wait for Signal.In this example, task 1 waits for a signal from task 0 and therefore processes theoverflow from counter0.Preemptive Task SwitchingThe full version of RTX51 provides preemptive task switching. This feature isnot included in RTX51 Tiny
38、. It is explained here to provide a completeoverview of multitasking concepts.In the previous example, task 1 is not immediately started after a signal hasarrived, but only after a timeout occurs for task 0. If task 1 is defined with ahigher priority than task 0, by means of preemptive task switchin
39、g, task 1 isstarted immediately after the signal has arrived. The priority is specified in thetask definition (priority 0 is the default value).RTX51 Technical DataDescriptionRTX-51 FullRTX-51 TinyNumber of tasks256; max. 19 tasks active16RAM requirements40 . 46 bytes DATA20 . 200 bytes IDATA (user
40、stack)min. 650 bytes XDATA7 bytes DATA3 * IDATACode requirements6KB . 8KB900 bytesHardware requirementstimer 0 or timer 1timer 0System clock1000 . 40000 cycles1000 . 65535 cyclesInterrupt latency 50 cycles 20 cyclesContext switch time70 . 100 cycles (fast task)180 . 700 cycles (standard task)depends
41、 on stack load100 . 700 cyclesdepends on stack loadMailbox system8 mailboxes with 8 integer entrieseachnot availableMemory pool systemup to 16 memory poolsnot availableSemaphores8 * 1 bitnot availableOverview of RTX51 RoutinesThe following table lists some of the RTX-51 functions along with a briefd
42、escription and execution timing (for RTX-51 Full).functionDescriptionCPU Cyclessr_recv_messageReceive a message (call from interrupt).71 (with message)isr_send_messageSend a message (call from interrupt).53isr_send_signalSend a signal to a task (call from interrupt).46os_attach_interruptAssign task
43、to interrupt source.119os_clear_signalDelete a previously sent signal.57os_create_taskMove a task to execution queue.302os_create_poolDefine a memory pool.644 (size 20 * 10 bytes)os_delete_taskRemove a task from execution queue.172os_detach_interruptRemove interrupt assignment.96os_disable_isrDisabl
44、e 8051 hardware interrupts.81os_enable_isr Enable 8051 hardware interrupts.80os_free_block Return a block to a memory pool.160os_get_blockGet a block from a memory pool.148os_send_messageSend a message (call from task).443 with task switchos_send_signalSend a signal to a task (call from tasks).408 w
45、ith task switch316 with fast task switch71 without task switchos_send_tokenSet a semaphore (call from task).343 with fast task switch94 without task switchos_set_sliceSet the RTX-51 system clock time slice.67os_waitWait for an event.68 for pending signal160 for pending messageFunction Description Th
46、ese functions are available only in RTX-51 Full.Additional debug and support functions in RTX-51 Full include the following:FunctionDescriptionoi_reset_int_maskDisables interrupt sources external to RTX-51.oi_set_int_maskEnables interrupt sources external to RTX-51.os_check_mailboxReturns informatio
47、n about the state of a specific mailbox.os_check_mailboxesReturns information about the state of all mailboxes in the system.os_check_poolReturns information about the blocks in a memory pool.os_check_semaphoreReturns information about the state of a specific semaphore.os_check_semaphoresReturns information about the state of all s