实验1基于ARM核的嵌入式开发环境的使用.docx
《实验1基于ARM核的嵌入式开发环境的使用.docx》由会员分享,可在线阅读,更多相关《实验1基于ARM核的嵌入式开发环境的使用.docx(16页珍藏版)》请在冰豆网上搜索。
实验1基于ARM核的嵌入式开发环境的使用
实验1基于ARM核的嵌入式开发环境的使用
一、实验目的
熟悉ADS1.2开发环境,学会ARM仿真器的使用。
使用ADS编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
二、实验内容
本次实验使用ADS集成开发环境。
新建一个简单的工程文件,并编译这个工程文件。
学习ARM仿真器的使用和开发环境的设置。
下载已经编译好的文件到嵌入式控制器中运行。
学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。
三、预备知识
C语言的基础知识、程序调试的基础知识和方法。
四、实验设备及工具(包括软件调试工具)
硬件:
ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T的JTAG仿真器、串口线。
软件:
PC机操作系统Win2000或WinXP、ARMADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。
五、实验步骤
1、建立工程
(1)运行ADS1.2集成开发环境(CodeWarriorforARMDeveloperSuite)。
选择File|New…菜单,在对话框中选择Project,如图1B-1所示,新建一个工程文件。
图中示例的工程名为Exp6.mcp。
点set…按钮可为该工程选择路径如图2-1所示,选中CreatFolder选项后将以图1-1中的ProjectName或图1-2中的文件名为名创建目录,这样可以将所有与该工程相关的文件放到该工程目录下,便于管理工程。
在图1-1中工程模板列表中的2410ARMExecutableImage是专为本嵌入式开发板设置的工程模板,后文有具体说明。
在此也可选择ARMExecutableImage通用模板。
图1-1新建工程
图1-2保存工程
(2)在新建的工程中,如图1-3所示,选择Debug版本,使用Edit|DebugSettings菜单对Debug版本进行参数设置。
图1-3选择版本
(3)在DebugSettings对话框中选择TargetSettings项,如图1-4所示。
在Post-linker一栏中选择ARMfromELF。
图1-4TargetSettings
(4)在DebugSettings对话框中选择ARMLinker项,如图1-5。
在Output选项卡的Simpleimage框中设置连接的Read-Only(只读)和Read-Write(读写)地址。
地址0x30008000是开发板上SDRAM的真实地址,是由系统的硬件决定的;0x30200000指的是系统可读写的内存地址。
也就是说,在0x30008000~0x30200000之间是只读区域,存放程序的代码段,在0x30200000开始是程序的数据段。
图1-5设置连接地址范围
图1-5所示的设置只是一种简单设置,如果程序需要用到标准C库函数的话需要按图1-6进行连接地址的设置。
标准C中如果使用malloc及其相关的函数,需要使用系统的堆(Heap)空间,可以通过scatter文件来描述系统HEAP段的位置。
针对2410-S开发板,把程序的入口定位在0x30008000,并定义scatter文件为scat_ram.scf。
在图2-6中选择LinkType为Scattered,输入scatter文件名scat_ram.scf;然后切换到Options选项卡在ImageEntryPoint框中输入0x30008000。
也可以在图2-6的CommandLine框中直接输入-entry0x30008000-scatterscat_ram.scf进行上述设置。
图1-6通过scatter文件设置连接地址
提示:
1)程序移植到ADS后,程序最开始首先执行用汇编写的初始化代码——包括中断向量和堆栈的初始化。
在该段代码中使用
IMPORT__main;注意main前面是两个下划线
B__main
进行系统内部的标准C函数初始化,然后调用用户在C中定义的main()函数(注意:
两个main都是小写),并且在嵌入式应用中用户C的main函数中不能有参数(intmain(void))。
2)不能有系统定义的软中断,在汇编中可以使用
IMPORT__use_no_semihosting_swi
来检测,在C中使用
#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihosting
3)scatter文件内容如下,创建了一个RAM_LOAD的程序和数据的装载区域,起始地址0x30008000。
RAM_LOAD0x30008000
{RAM_EXEC+0
{
startup.o(init,+First)
*(+RO)
}
L0PAGETABLE0x30200000UNINIT;about2MByteoffsetSDRAM
{
pagetable.o(+ZI)
}
STACKS+0x100000UNINIT;64KByteunderL0pagetable
{
stack.o(+ZI)
}
RAM+0
{
*(+RW,+ZI)
}
HEAP+0UNINIT
{
heap.o(+ZI)
}
EXCEPTION_EXEC0OVERLAY;exceptionregion
{
exception.o(+RO)
}
}
4)定义retarget.c函数,重新定位标准C库中stdio的一些相关函数。
主要有:
struct__FILE{inthandle;/*Addwhateveryouneedhere*/};
FILE__stdout;//文件的定义
intfputc(intch,FILE*f)//fputc函数
intferror(FILE*f)//ferror函数
void_sys_exit(intreturn_code)//系统退出函数
int__raise(intsignal,intargument)
__value_in_regsstruct__initial_stackheap__user_initial_stackheap(unsignedR0,unsignedSP,unsignedR2,unsignedSL)//用户的堆空间和栈空间函数
具体定义,可以参考init/retarget.c
(5)在第(4)步中如果不选择简单的连接地址设置,则需按图1-7所示设置C编译器。
在DebugSettings对话框中选择ARMCCompiler项,在ATPCS选项卡中选择ARM/Thumpinterwork,或者在命令行中添加-apcs/interwork。
图1-7设置ARMCCompiler
(6)在第四步中如果选择简单的地址连接设置,在DebugSettings对话框中选择ARMLinker项,如图1-8。
在Layout选项卡的Placeatbeginningofimage框中设置程序的入口模块。
指定在生成的代码中,程序是从startup.s开始运行的。
Object设为startup.o,section设为init。
图1-8设置入口模块
(7)在DebugSettings对话框中选择ARMfromELF项,如图1-9。
在Outputfilename框中设置输出文件名为system.bin,这就是要下载到开发板的嵌入式应用程序文件。
图1-9设置输出文件名
(8)回到如图1-10所示的工程窗口中,选择Release版本,使用Edit|ReleaseSettings菜单对Release版本进行参数设置。
(9)参照第(3)、(4)、(5)、(6)、(7)步在ReleaseSettings对话框中设置Release版本的Post-linker、连接地址范围、入口模块和输出文件。
(10)回到如图1-3所示的工程窗口中,选择Targets选项卡,如图1-10所示。
选中DebugRel版本,按Del键将其删除。
DebugRel子树是一个折衷版本,通常用不到,所以在这里删除。
图1-10删除DebugRel版本
(11)设置完成后,可以将该新建的空工程文件作为模板保存以便以后使用。
将工程文件名改为2410ARMExecutable.mcp。
然后在ADS1.2软件安装目录下的Stationery目录下新建名为2410ARMExecutableImage的模板目录,再将刚设置完的2410ARMExecutable.mcp工程模板文件存放到该目录下即可。
这样以后新建工程的时候如图2-1所示就能看到以2410ARMExecutableImage为名字的模板了。
提示:
1)建议用户直接将光盘Template/ADS下的2410ARMExecutableImage子目录直接拷贝到ADS1.2安装目录下的Stationery目录中,这样也能在图1B-1所示的新建工程对话框中看到这个模板,其中具有已经设置好的针对本开发板的参数。
注意ARMLinkerLinktype设置为Scattered,请参阅第(4)步内容。
2)如果用户原来已安装了ARMSDT软件的话,再安装ADS1.2后可能导致ARMSDT不能正常使用,需要用户更改系统环境变量:
ARMINC设置为%ARMSDTPATH%\INCLUDE,ARMLIB设置为%ARMSDTPATH%\LIB,其中%ARMSDTPATH%指ARMSDT的安装目录。
(12)新建工程后,可以执行菜单Project|AddFiles把和工程相关的所有文件即除inti的所有文件加入到工程中。
ADS1.2不能自动按文件类别对这些文件进行分类,需要的话用户可以执行菜单Project|CreateGroup创建文件组,然后分别将不同类的文件加入到不同的组,以方便管理。
如图2-11所示。
更为简单的办法是,在新建工程时ADS创建了和工程同名的目录,在该目录下按类别创建子目录并存放工程文件。
选中所有目录拖动到任务栏上的ADS任务条上,不要松开鼠标当ADS窗口恢复后再拖动到工程文件窗口,松开鼠标。
这样ADS将以子目录名建立同名文件组并以此对文件分类。
图1-11加入工程文件
(13)编译并双击图1-11中的Main.c打开该文件,可以查看Main()函数的内容,这时也可运行程序。
图1-11的例程是ARM的串口实验。
读者可以查看其他源文件的内容以对系统运行有所了解。
可以发现ADS的文本编辑器已经有了很大的改善,文本按语法分颜色显示,读者可以根据喜好在Edit菜单下的Preferences窗口中进行设置。
并可以很好的支持中文注释。
超级终端设置及映象文件下载方法
一、超级终端设置
1、运行Windows系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端。
如果要求输入区号、电话号码等信息请随意输入,出现如图1-12所示对话框时,为所建超级终端取名为arm,可以为其选一个图标。
单击“确定”按钮。
图1-12创建超级终端
2、在接下来的对话框中选择ARM开发平台实际连接的PC机串口(如COM1),按确定后出现如图1-13所示的属性对话框,设置通信的格式和协议。
这里波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。
按确定完成设置。
图1-13设置串行口
3、完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。
用串口线将PC机串口和平台UART0正确连接后,就可以在超级终端上看到程序输出的信息了,比如本实验的“Helloworld!
”。
二、映象文件下载
将开发板重新启动同时按下键盘中任意键,这时在超级终端将会看到下面图1-14的提示,在vivi>后键入loadflashucosx然后回车。
图1-14超级终端Ⅰ
这时将会进入图1-15的界面,然后打开超级终端上方的“传送”菜单并选择发送文件,如图1-16所示,点击浏览按键,查找并进入到编译生成的映象文件夹下,打开system.bin.然后在发送文件对话框中的协议栏选择Xmodem,最后选择发送。
发送结束后,映象文件即下载到flash中,然后,如图1-17键入bootucos命令再回车即可运行ucos程序。
图1-15超级终端Ⅱ
图1-16发送文件
图1-17启动ucos系统
提示:
system.bin文件是系统通过BIOS引导以后,装入内存中运行的默认文件。
所以上文中对工程的设置都使用该文件名作为编译最终文件。
ADS环境中,该文件产生在工程路径下的ProjectName_Data\Debug和Release目录下。
建议将Release下的system.bin文件下载到Flash。
三、数据文件下载
ucos系统中用到的文件(图片、文本文件等)都是通过启动一个ucos系统的应用程序来下载文件到指定目录的,具体方法如下,以列表框的控件的使用实验为例:
1、先打开超级终端,超级终端的设置如前所述。
2、运行列表框的控件的使用实验,运行方法a:
将列表框的控件的使用实验的映象文件下载到flash中。
方法b:
用仿真器调试的方式运行列表框的控件的使用实验。
3、当列表框的控件的使用实验运行起来以后,在超级终端键入回车键,此时如图1-18
图1-18
4、新建ucos目录,命令是mkdirucos回车,然后在sys>提示符下键入ls,若新建目录成功可看见此文件名,然后进入ucos目录下,在sys>提示符下键入cducos回车,进入ucos后如图1-19
图1-19
5、将字库u12x12和u16x16下载到ucos目录下,下载命令dlu12x12.fnt-d回车,然后选择超级终端中的传送菜单下的发送文件,如图1-20,
图1-20
在图2-20中点击浏览,选择要下载的字库,协议选择Xmodem然后点击发送。
重复同样的操作再将字库u16x16下载到ucos目录下。
注意命令形式dlu16x16.fnt-d回车。
6、在ucos目录下键入命令mkdirfj新建fj目录,然后在此目录下下载图片、文本文件test和sys.dat文件。
下载方法和下载字库相同,下载图片的命令形式如:
dl*.bmp-d
下载文本文件的命令形式如:
dltest.txt-t,下载sys文件的命令形式如:
dlsys.dat-d
注意:
其他还有删除命令rm或rmdir,改名命令mv旧文件名新文件名。
下载文本文件用参数-t,下载其他数据文件用参数-d。