嵌入式实训2.docx
- 文档编号:9141815
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:13
- 大小:267.11KB
嵌入式实训2.docx
《嵌入式实训2.docx》由会员分享,可在线阅读,更多相关《嵌入式实训2.docx(13页珍藏版)》请在冰豆网上搜索。
嵌入式实训2
嵌入式实训2——维信科技
一、主要目的(维信科技,山西最专业的IT实训)
熟悉ADS1.2开发环境,学会ARM仿真器的使用。
使用ADS编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
二、实训内容
本次实验配置ADS集成开发环境,新建一个简单的工程文件,并编译这个工程文件(维信科技,山西最专业的IT实训)。
学习ARM仿真器的使用和开发环境的设置。
下载已经编译好的文件到嵌入式控制器中运行。
学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。
三、预备知识(维信科技,山西最专业的IT实训)
C语言的基础知识、程序调试的基础知识和方法。
四、设备及工具(包括软件调试工具)
硬件:
ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC机Pentium100以上、串口线(维信科技,山西最专业的IT实训)。
软件:
PC机操作系统win98、Win2000或WinXP、ARMSDT2.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。
五、实训步骤
1配置ADS集成开发环境
(1)运行ADS1.2集成开发环境(CodeWarriorforARMDeveloperSuite)。
选择File|New…菜单,在对话框中选择Project,如图1-17所示,新建一个工程文件。
图中示例的工程名为Exp6.mcp。
点set…按钮可为该工程选择路径如图1-18所示,选中CreatFolder选项后将以图1-17中的ProjectName或图1-18中的文件名为名创建目录,这样可以将所有与该工程相关的文件放到该工程目录下,便于管理工程。
在图1-17中工程模板列表中我们选择ARMExecutableImage通用模板。
我们随后将一步一步的把它配置成针对我们的ARM3000开发板的模板44B0ARMExecutableImaage,并把它拷贝到ADS1.2安装目录下的Stationery目录中(所有的工程模板都在此目录下)(维信科技,山西最专业的IT实训)。
以后我们新建工程时,在工程模板列表中直接选中44B0ARMExecutableImaage模板选项,就不必每次重新配置模板了。
图1-17新建工程
图1-18保存工程
(2)在新建的工程中,如图1-19所示,选择Debug版本,使用Edit|DebugSettings菜单对Debug版本进行参数设置。
图1-19选择版本
(3)在DebugSettings对话框中选择TargetSettings项,如图1-20所示。
在Post-linker一栏中选择ARMfromELF,点击右下角的Apply使其有效(维信科技,山西最专业的IT实训)。
图1-20TargetSettings
(4)在DebugSettings对话框中选择ARMLinker项,如图1-21。
在Output下的Linktype中有三种类型的连接方式,我们常用的是Simple和Scattered两种。
Simple是一种简单设置,如果程序需要用到标准C库函数的话需要按Scattered进行连接地址的设置(维信科技,山西最专业的IT实训)。
若你用不到标准C库函数的话,请选择Simple选项,并按照下边的第(5)、(8)、(9)进行设置。
若你用到标准C库函数的话,请选择Scattered选项,并按照下边的第(6)、(7)、(9)进行设置。
(5)在ARMLinker项的Output选项卡中,我们选择Simple选项,如图1-21所示。
在Simpleimage框中设置连接的Read-Only(只读)和Read-Write(读写)地址。
地址0x0c080000是开发板上SDRAM的真实地址,是由系统的硬件决定的;0x0c200000指的是系统可读写的内存地址(维信科技,山西最专业的IT实训)。
也就是说,在0x0c0800000xC1fffff之间是只读区域,存放程序的代码段,在0xC200000开始是程序的数据段。
图1-21设置连接地址范围
(6)在ARMLinker项的Output选项卡中,我们选择Scattered选项,如图1-22所示.标准C中如果使用malloc及其相关的函数,需要使用系统的堆(Heap)空间,可以通过scatter文件来描述系统HEAP段的位置(维信科技,山西最专业的IT实训)。
针对44B0开发板,把程序的入口定位在0xc080000,并定义scatter文件为scat_ram.scf。
在图1-22中选择LinkType为Scattered,输入scatter文件名scat_ram.scf;然后切换到Options选项卡在ImageEntryPoint框中输入0xc080000。
也可以在图1-22的CommandLine框中直接输入-entry0xc080000-scatterscat_ram.scf进行上述设置(维信科技,山西最专业的IT实训)。
图1-22通过scatter文件设置连接地址
提示:
程序移植到ADS后,程序最开始首先执行用汇编写的初始化代码——包括中断向量和内存空间的初始化。
在该段代码中使用
IMPORT__main;(注意main前面是两个下划线)
B__main
进行系统内部的标准C函数初始化,然后调用用户在C中定义的main()函数(注意:
两个main都是小写),并且在嵌入式应用中用户C的main函数中不能有参数(intmain(void))。
不能有系统定义的软中断,在汇编中可以使用
IMPORT__use_no_semihosting_swi
来检测,在C中使用
#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihosting
scatter文件内容如下,创建了一个RAM_LOAD的程序和数据的装载区域,起始地址
0xc080000。
RAM_LOAD0xc080000
{RAM_EXEC0xc080000
{
44binit.o(init,+First)
*(+RO)
}
RAM0x0c200000
{
*(+RW,+ZI)
}
HEAP+0UNINIT
{
heap.o(+ZI)
}
STACKS0xc7ff000UNINIT
{
stack.o(+ZI)
}
ISR_STARTADDRESS0xc7fff00;SDRAMbottom
{
isr_address.o(+ZI)
}
}
在图1-23中说明了这个装载区域的划分(维信科技,山西最专业的IT实训)。
图1-23程序和数据装载区域的划分
定义retarget.c函数,重新定位标准C库中stdio的一些相关函数。
主要有:
struct__FILE{inthandle;/*Addwhateveryouneedhere*/};
FILE__stdout;//文件的定义
intfputc(intch,FILE*f)//fputc函数
intferror(FILE*f)//ferror函数
void_sys_exit(intreturn_code)//系统退出函数
void_ttywrch(intch)
__value_in_regsstruct__initial_stackheap__user_initial_stackheap(unsignedR0,unsignedSP,unsignedR2,unsignedSL)//用户的堆空间和栈空间函数
具体定义,可以参考init/retarget.c
(7)接第(6)步,在第(4)步中如果不选择简单的连接地址设置,则需按图1-24所示设置C编译器。
在DebugSettings对话框中选择ARMCCompiler项,在ATPCS选项卡中选择ARM/Thumpinterwork,或者在命令行中添加-apcs/interwork。
图2-24设置ARMCCompiler
(8)接第(5)步,若在第四步中如果选择简单的地址连接设置,在DebugSettings对话框中选择ARMLinker项,如图1-25。
点击下边的Factorysetting按钮,出现Layout选项卡(在对release版本进行设置时,不用点击Factorysetting按钮)。
在Layout选项卡的Placeatbeginningofimage框中设置程序的入口模块。
指定在生成的代码中(维信科技,山西最专业的IT实训),程序是从44binit.s开始运行的。
Object设为44binit.o,section设为init。
图1-25设置入口模块
(9)在DebugSettings对话框中选择ARMfromELF项,如图1-26。
在Outputfilename框中设置输出文件名为system.bin,这就是要下载到开发板的嵌入式应用程序文件。
图1-26设置输出文件名
(10)回到如图1-19所示的工程窗口中,选择Release版本,使用Edit|ReleaseSettings菜单对Release版本进行参数设置。
(11)参照第(3)、(4)、(5)、(6)、(7)、(8)、(9)步在ReleaseSettings对话框中设置Release版本的Post-linker、连接地址范围、入口模块和输出文件。
(12)回到如图1-19所示的工程窗口中,选择Targets选项卡,如图1-27所示。
选中DebugRel版本,按Del键将其删除。
图1-27删除DebugRel版本
(13)设置完成后,可以将该新建的空工程文件作为模板保存以便以后使用。
将工程文件名改为44B0ARMExecutable.mcp。
然后在ADS1.2软件安装目录下的Stationery目录下新建名为44B0ARMExecutableImage的模板目录,再将刚设置完的44B0ARMExecutable.mcp工程模板文件存放到该目录下即可。
这样以后新建工程的时候如图1-17所示就能看到以44B0ARMExecutableImage为名字的模板了。
图1-28显示44B0ARM模板
提示:
1)建议用户直接将光盘ADS实验下的Template\ADS\Stationery目录中的44B0ARMExecutableImage子目录直接拷贝到ADS1.2安装目录下的Stationery目录中,这样也能在图1-17所示的新建工程对话框中看到这个模板,其中有已经设置好的针对本开发板的参数。
这个模板设置为Scattered版本。
2)如果用户原来已安装了ARMSDT软件的话,再安装ADS1.2后可能导致ARMSDT不能正常使用,需要用户更改系统环境变量:
ARMINC设置为%ARMSDTPATH%\INCLUDE,ARMLIB设置为%ARMSDTPATH%\LIB,其中%ARMSDTPATH%指ARMSDT的安装目录。
2.建立工程文件
配置好ARMADS针对UP-ARM3000的开发环境后,可以执行菜单Project|AddFiles把和工程相关的所有文件加入到工程中。
ADS1.2不能自动按文件类别对这些文件进行分类,需要的话用户可以执行菜单Project|CreateGroup创建文件组,然后分别将不同类的文件加入到不同的组,以方便管理。
如图1-29所示。
更为简单的办法是,在新建工程时ADS创建了和工程同名的目录,在该目录下按类别创建子目录并存放工程文件。
选中所有目录拖动到任务栏上的ADS任务条上,不要松开鼠标当ADS窗口恢复后再拖动到工程文件窗口,松开鼠标。
这样ADS将以子目录名建立同名文件组并以此对文件分类。
这里我们把ADS版中开发环境实验中的init和STARTUP两个目录拷贝到新建的工程目录下,然后选中这两个目录,拖动到任务栏上的ADS任务条上,不要松开鼠标当ADS窗口恢复后再拖动到工程文件窗口,松开鼠标。
这样ADS将以init和STARTUP目录名建立同名文件组并以此对文件分类。
图1-29加入工程文件
双击图1-29中的Main.c打开该文件,可以看到Main()函数的内容:
intmain(void)
{
ARMTargetInit();//开发版初始化
LCD_Init();
LCD_ChangeMode(DspTxtMode);//转换LCD显示模式为文本显示模式
LCD_Cls();//文本模式下清屏命令
LCD_printf("Helloworld!
\n");//向液晶屏输出
Uart_Printf("\nHelloworld!
\n");//向串口输出
while
(1);
}
提示:
读者可以查看其他源文件的内容以对系统运行有所了解。
可以发现ADS的文本编辑器已
经有了很大的改善,文本按语法分颜色显示,读者可以根据喜好在Edit菜单下的Preferences窗口中进行设置。
并可以很好的支持中文注释。
3进行程序的在线仿真、调试
(1)回到图1-29所示的工程窗口选中Debug版本,执行菜单Project|Make对工程进行编译连接(维信科技,山西最专业的IT实训)。
在出现的错误/警告窗口中选择某错误/警告信息,ADS会自动打开相应源文件并用箭头指向出错的文本行。
如果某个源文件被修改,重新编译时ADS会自动同步各文件的日期信息。
(2)在ADS中执行菜单Project|Debug启动ADS1.2的调试工具AXD。
(3)在AXD中执行菜单Options|ConfigureTarget对AXD进行设置。
如图1-30所示。
选择ADP即远程调试,点Configure按钮进一步设置具体参数,如图1-31所示。
图1-30设置AXD参数
(4)在图1-31中点Select按钮选择远程连接为ARMethernetdriver,点Configure按钮输入仿真器的IP地址(维信科技,山西最专业的IT实训)。
如果用户使用的是并行口仿真器,请输入127.0.0.1即可。
图1-31设置远程连接
(5)等待程序装载完毕以后,通过Execute|Go菜单以及Execute|Stop(或者工具栏中的相应按钮)运行或暂停程序(维信科技,山西最专业的IT实训)。
程序暂停后在窗口中将显示出程序暂停的位置。
(6)通过Execute|Step菜单(或者工具栏中的相应按钮)可以单步运行程序。
也可以使用StepIn、StepOut菜单命令进入或者跳出函数的调用。
RunToCursor命令运行到光标位置。
(7)程序停止后可以通过ProcessorViews|Sources菜单查看源文件,并可在适当位置按F9设置端点。
(8)使用在ProcessorView菜单下的Registers、Variables和Memory命令可以查看工作寄存器或者内存变量。
读者可以逐一地尝试,为以后调试程序打下基础。
提示:
在进行调试时在ADS中必须选择当前工程的Debug版本,如果选择Release版本则无法正常调试程序(维信科技,山西最专业的IT实训)。
但在调试通过后就必须选择Release版本进行编译连接并将产生的system.bin文件复制到开发板的Flash中。
将开发板上的Flash激活作为U盘使用的操作将在下节中描述。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式