Download presentation
Presentation is loading. Please wait.
1
嵌入式系统实验 ● 交叉开发实验 ● 仿真开发实验
2
交叉开发环境是指实现、编译、链接、调试应用程序代码的环境与运行应用程序代码的环境不同,分散在不同设备上。
提供实现、编译、链接、调试应用程序代码的环境的设备称为宿主机; 运行应用程序代码的设备称为目标机。
3
本实验中宿主机和目标机的硬件连接
4
编程语言 ● C语言 ● 汇编语言 编写程序使用的语言是SIC33 C语言和汇编语言。
符合标准C语言的所有规范,相应的源程序必须按照ANSI C编写。 在C源程序中可嵌入汇编语句。 ● 汇编语言 汇编语言语法见教材
5
硬件连接 本实验采用Monitor方式调试,PC机的COM1口连Monitor调试器。
6
实验板外形 长度L=18.6cm ,宽度W=16cm
7
实验板的重要部分说明 J2 :5V电源接口 POW_PSW :电源开关,控制整个实验板的电源 S1 ,S2:8位双列开关
U1 :CUP芯片(S1C33209) U2 :FLASH芯片(E28F320J3A) U4,U5 :SRAM芯片W24L011AJ JP1 :MON 接口 BYTE_MODE :FLASH的模式设置 弹上:x8模式;按下:x16模式 RP_SEL :FLASH复位节电控制 弹上:节电模式;按下:工作模式 实验板的重要部分说明
8
Monitor接口调试步骤 1.在断电情况下,将微机COM1口与Monitor接口中间件串行接口相连,再将Monitor接口中间件上Monitor接口与实验板Monitor接口(JP1)相连,同时将实验板上BYTE_MODE以及RP_SEL两开关均按下; 2.Monitor 接口中间件上的debug 按扭开关为“ON”; 3.将实验板上S1手拨开关中第7位拨到ON,使CPU工作使能; 4.给实验板供电,打开宿主机上的调试工具wb33就可下载程序,进行调试。
9
宿主机配置 宿主机为一台装有windows操作系统和wb33工具包的PC机,内含S1C33 C编译器gc33和调试器db33 。
10
调试程序包括以下几步: 1.编辑源程序,可用 wb33提供的编辑工具, 也可用其他的编辑工具; 2.当源程序编写完后,就可对源程序编译、连接等处理,在此过程还要编写相应的make 文件,参数文件等; 3.当编译成功后,将生成后缀名为srf的可调试的程序,此程序就可下载到目标板上进行调试。
11
下面通过一个例子来介绍整个程序的调试过程。
本程序只是一个简单的ram测试程序,它的功能就是循环打亮指示灯。 在实验板上,有4个指示灯,分别对应S2(8路开关)的前4个开关。可以通过提高RXD, TXD 电压来打通三极管的基极,从而使连接在发射极的指示灯点亮。 程序只需要向控制这些信号的端口写为高电平,就可点亮指示灯。 本程序的任务是循环点亮第1、2个指示灯,因此需要保持试验板上的对应两个开关打开。
12
源程序有两部分:boot.s, main.c。 boot.s 主要作系统一些初始化,如设置堆栈和全局指针。 main.c主要向端口写高电平。 要点亮指示灯的两个信号:P00 ,P01。 相关的寄存器如下: ● 功能选择寄存器 (0x402d0 内容形式D[0..7]): D[0]=0 选择的是P00 D[1]=0 选择的是P01
13
● I/O控制寄存器 (0x402d2 内容形式D[0..7]): D[0]=0 P00为输入 D[0]=1 P00为输出 D[1]=0 P01为输入 D[1]=1 P01为输出 ● I/O数据寄存器 (0x402d1内容形式D[0..7]): D[0]=0 P00为低电平 D[0]=1 P00为高电平 D[1]=0 P01为低电平 D[1]=1 P01为高电平
14
boot.s 程序如下: #define SP_INI 0x0800 ; sp is in end of 2KB internal RAM #define GP_INI 0x0000 ; global pointer %r8 is 0x0 .code .global BOOT ; BOOT VECTOR BOOT: xld.w %r8,SP_INI ld.w %sp,%r8 ; set SP ld.w %r8,GP_INI ; set global pointer xcall main ; goto main xjp BOOT ; infinity loop
15
main.c程序如下: main() {int i; *(volatile char *)(0x402D0)=0xf0; *(volatile char *)(0x402D2)=0xFF; *(volatile char *)(0x402D1)=0x00; for(;;) {for (i=0;i<500000;i++) *(volatile char *)(0x402D1)=0x01; for (i=0;i<500000;i++) *(volatile char *)(0x402D1)=0x02; }
16
写好了boot.s和main.c源代码之后,就可以使用wb33工具了:双击wb33图标启动wb33工具,打开work bench,并在左边的目录中找到源代码所在的文件夹,打开它,选中“所有类型文件”的小圆点,就可以看到main.c和boot.s文件。
17
点击正下方的make edit按键,出现如左图的界面,通过它来产生make文件。Make文件的后缀名为mak,文件名可以用户自己设置,系统的默认文件名是test,若要改变,可在左上方的Make file name的输入框中,将test改为别的名字。在这个例子中,我们保留了系统默认的test文件名。单击左上方的New Make file按键就可以生成test.mak。生成test.mak的同时,还会生成test.cm和test.cmx文件。分别选中左下方Add files框中的文件,通过点击下面的Add to Make file将它们逐一加入右边的内容框中。完成之后就如右图。
18
检查lib路径和执行路径是否正确,如与实际情况不符需要改正。
这时可以关闭make file edit界面,回到刚才的work bench。可以看到work bench左下的框中多出了三个文件:test.mak、test.cm和test.cmx文件。其中的test.cm很重要,并且在本试验中需要修改。通过选中左下框中的test.cm文件,并单击下面的edit按键,可以打开test.cm文件进行查看和编辑。系统生成的test.cm文件如下: ;Map set ;-code 0x ; set relative code section start address ;-data 0x ; set relative data section start address ;-bss 0x ; set relative bss section start address …… ;Library path -l E:\C33\lib 检查lib路径和执行路径是否正确,如与实际情况不符需要改正。
19
在本例中将程序代码绝对定位到芯片的内部ram 里,起始地址为:0x0000000。所以将本文件的第二行改为
-code 0x 在此文件里也可将程序定位在外部的存储器里。比如后面的两个试验任务就需要把程序代码绝对定位到芯片外部的flash里,起始地址为:0x 。即将本文件的第二行改为 -code 0x 修改完毕后,保存test.cm文件。
20
在左边的文件框中选中test. mak文件,单击右边的make按键,就可以产生目标文件test. srf,并产生一系列的相关文件:boot
在左边的文件框中选中test.mak文件,单击右边的make按键,就可以产生目标文件test.srf,并产生一系列的相关文件:boot.ms, main.ms, boot.o,main.o, test.map,boot.ms。 main.ms 是boot.s和 main.c 的汇编语言,boot.o 和main.o 是可重定位程序, test.srf 是绝对定位程序,test.map 表示程序的内存映射情况。错误信息保存在wb33.err文件中,
21
单击右下角的par gen按键,弹出parameter file generater窗口,设置好参数就可以单击上方的creat par file按键生成参数配置文件33104_1.par。
在本例中不需对parameter file generater的默认参数作出改变。但在后面两个实验任务中,需要激活相应存储区,即在地址800000对应的enable选项前打勾 。
22
关闭parameter file generater窗口,回到work bench界面。单击上面的open option windowns,弹出gcc-lk options窗口和other options窗口。在other options窗口中选择调试方式为monitor,并保持这两个窗口打开。
23
当上面的工作基本作完后,就可以用MON调试了。打开目标板的电源,在wb33 主窗口中选择33104_1
当上面的工作基本作完后,就可以用MON调试了。打开目标板的电源,在wb33 主窗口中选择33104_1.par,然后点击DB33按钮。立即在主机窗口中弹出db33的窗口,在此db33窗口中的命令窗口中显示正常连接的信息。 因为在前面将程序的初始位置定位在0x 处,所以要想执行这段程序,还必须将PC指针指向0x 。 可以用命令rs来改变PC指针,rs命令是用来修改一些寄存器内容的,也包括PC寄存器。在command框中输入rs命令后回车,就会显示当前pc指针的内容,输入要修改的值,本例是0,回车,再输入q,则可退出rs命令。
24
调试过程包括可以单步执行,连续执行,也可设置断点,查看符号变量,查看相应的内存空间等。
如果让程序连续执行,就可以看到目标系统上的两个指示灯交替闪烁。(这里注意实验板上的SW_LED的1,2开关应拨向ON。)
25
实验一 向内存区写一个菲波拉系列 实验要求 向内存区0x800100位置开始,写一个菲波拉系列。此系列的关系式如下:
实验一 向内存区写一个菲波拉系列 实验要求 向内存区0x800100位置开始,写一个菲波拉系列。此系列的关系式如下: A0=1; A1=1 AN=A(N-1)+A(N-2) (N=2,3, … … ) 在内存区存储的形式为: 0x 0x 0x 0x …………………….. 任务中N=16
26
实验目的 通过此任务,使实验者达到如下目的:
了解整个小型应用程序的开发过程,熟悉EPSON提供的开发工具WB33, DB33。了解编辑、编译、连接、下载调试的整个过程。 针对此任务,使实验者熟悉DB33中有关对内存操作的命令如:dw,dh,db。
27
实验二 编写一个键盘中断应用程序 实验要求 编写一个键盘中断应用程序,当按下某个键时,使一些指示灯循环点亮。此键盘对应的信号是NMI, NMI对应的中断向量号是7;要点亮指示灯的两个信号。 实验目的 通过此实验任务,使实验者达到如下目的: 了解整个中断机制。从中断服务程序的编写,中断服务程序的挂接及如何响应中断深入了解中断思想。 了解如何利用处理器的端口资源,如何对处理器提供的相关端口进行控制达到用户的要求。使实验者对处理器内部结构有一些认识。
28
在演示过程中,可把一些db33提供的指令编成后缀为cmd文件,作批处理执行。在下载的过程中可在DB33选项中选中db33. cmd file
在演示过程中,可把一些db33提供的指令编成后缀为cmd文件,作批处理执行。在下载的过程中可在DB33选项中选中db33*.cmd file.如下页图的选项框中蓝色部分。一旦下载就可一次执行cmd文件中所有的命令。 task2.cmd文件如下: eb 4812d 59 q ew 48134 800000 lf int_test.srf rsth
30
谢谢观赏 2003年12月20日
Similar presentations