开发者社区> 文艺小青年> 正文

ADS

简介:
+关注继续查看
8.2.1建立一个工程工程将所有的源码文件组织在一起,并能够决定最终生成文件存放的路径,输出的格式等。
在CodeWarrior中新建一个工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New…”菜单。这样就会打开一个如图8.1所示的对话框。
图8.1新建工程对话框在这个对话框中为用户提供了7种可选择的工程类型。
ARM Executabl Image:用于由ARM指令的代码生成一个ELF格式的可执行映像文件;
ARM Object Library:用于由ARM指令的代码生成一个armar格式的目标文件库;
Empty Project:用于创建一个不包含任何库或源文件的工程;
Makefile Importer Wizard:用于将Visual C的nmake或GNU make文件转入到CodeWarrior IDE 工程文件;
Thumb ARM Executable Image:用于由ARM指令和Thumb指令的混和代码生成一个可执行的ELF格式的映像文件;
Thumb Executable image:用于由Thumb指令创建一个可执行的ELF格式的映像文件;
Thumb Object Library:用于由Thumb指令的代码生成一个armar格式的目标文件库。
在这里选择ARM Executable Image,在“Project name:”中输入工程文件名,本例为“ledcircle”,点击“Location:”文本框的“Set…”按钮,浏览选择想要将该工程保存的路径,将这些设置好后,点击“确定”,即可建立一个新的名为ledcircle的工程。
这个时候会出现ledcircle.mcp的窗口,如图8.2所示,有三个标签页,分别为files,link order,target默认的是显示第一个标签页files。通过在该标签页点击鼠标右键,选中“Add Files…”可以把要用到的源程序添加到工程中。
图8.2新建工程打开窗口对于本例,由于所有的源文件都还没有建立,所以首先需要新建源文件。
在“File”菜单中选择“New”,在打开的如图8.1所示的对话框中,选择标签页File,在File name中输入要创建的文件名,输入“Init.s”,点击“确定”关闭窗口。
在打开的文件编辑框中输入下面的汇编代码:
;**************************************************************
;Chinese Academy of Sciences, Institute of Automation
;File Name:Init.s;Description:;Author:JuGuang.Li;Date:;**************************************************************
IMPORTMainAREAInit,CODE,READONLYENTRYLDR R0, =0x3FF0000LDR R1, =0xE7FFFF80 ;配置SYSCFG,片内4K Cache,4K SRAMSTRR1, [R0]LDR SP, =0x3FE1000;SP指向4K SRAM的尾地址,堆栈向下生成BLMainB.END在这段代码中,伪操作IMPORT告诉编译器符号Main不是在该文件中定义的,而是在其他源文件中定义的符号,但是本源文件中可能要用到该符号。接下来用伪指令AREA定义段名为Init的段为只读的代码段,伪指令ENTRY指出了程序的入口点。下面就是用汇编指令实现了配置SYSCFG特殊功能寄存器,将S3C4510B片内的8K一体化的SRAM配置为4K Cache,4K SRAM,并将用户堆栈设置在片内的SRAM中。
4K SRAM的地址为0x3FE,0000~(0x3FE,1000-1),由于S3C4510B的堆栈由高地址向低地址生成,将SP初始化为0x3FE,1000。
完成上述操作后,程序跳转到Main函数执行。
保存Init.s汇编程序。
用同样的方法,再建立一个名为main.c的C源代码文件。具体代码内容如下:
//*****************************************************************
//Chinese Academy of Sciences, Institute of Automation
//File Name:main.c//Description:
//Author:JuGuang.Li//Date://***************************************************************
#defineIOPMOD(*(volatile unsigned *)0x03FF5000) //IO port mode register#defineIOPDATA(*(volatile unsigned *)0x03FF5008) //IO port data registervoid Delay(unsigned int);
int Main()
{
unsigned longLED;IOPMOD=0xFFFFFFFF;//将IO口置为输出模式IOPDATA=0x01;
for(;;){
LED=IOPDATA;LED=(LED<<1);IOPDATA=LED;Delay(10);if(!(IOPDATA&0x0F))IOPDATA=0x01;}
return(0);}
void Delay(unsigned int x)
{
unsigned int i,j,k;
for(i=0;i<=x;i++)
for(j=0;j<0xff;j++)for(k=0;k<0xff;k++);}
该段代码首先将I/O模式寄存器设置为输出模式,为I/O数据寄存器赋初值为0x1,通过将I/O数据寄存器的数值进行周期性的左移,实现使接在P0~P3口的LED显示器轮流被点亮的功能。(注意这里的if语句,是为了保证当I/O数据寄存器中的数在移位过程中,第4位为数字“1”时,使数字1通过和0xFF相与,又重新回到I/O数据寄存器的第0位,从而保证了数字1一直在I/O数据寄存器的低四位之间移位。)
在这里还有一个细节,希望读者注意。在建立好一个工程时,默认的target是DebugRel,还有另外两个可用的target,分别为Realse和Debug,这三个target的含义分别为:
DebugRel:使用该目标,在生成目标的时候,会为每一个源文件生成调试信息;
Debug:使用该目标为每一个源文件生成最完全的调试信息;
Release:使用该目标不会生成任何调试信息。
在本例中,使用默认的DebugRel目标。
现在已经新建了两个源文件,要把这两个源文件添加到工程中去。
为工程添加源码常用的方法有两种,既可以使用入图8.2所示方法,也可以在“Project”菜单项中,选择“Add Files…”,这两种方法都会打开文件浏览框,用户可以把已经存在的文件添加到工程中来。当选中要添加的文件时,会出现一个对话框,如图8.3所示,询问用户把文件添加到何类目标中,在这里,我们选择DebugRel目标。把刚才创建的两个文件添加到工程中来。
图8.3选择添加文件到指定目标到目前为止,一个完整的工程已经建立。
下面该对工程进行编译和链接工作。
8.2.2编译和链接工程在进行编译和链接前,首先讲述一下如何进行生成目标的配置。
点击Edit菜单,选择“DebugRel Settings…”(注意,这个选项会因用户选择的不同目标而有所不同),出现如图8.2所示的对话框。
这个对话框中的设置很多,在这里指介绍一些最为常用的设置选项,读者若对其他未涉及到的选项感兴趣,可以查看相应的帮助文件。
1.target设置选项Target Name文本框显示了当前的目标设置。
Linker选项供用户选择要使用的链接器。在这里默认选择的是ARM Linker,使用该
链接器,将使用armlink链接编译器和汇编器生成的工程中的文件相应的目标文件。
图8.4DebugRel设置对话框这个设置中还有两个可选项,None不是不用任何链接器,如果使用它,则工程中的所有文件都不会被编译器或汇编器处理。ARM Librarian表示将编译或汇编得到的目标文件转换为ARM库文件。对于本例,使用默认的链接器ARM Linker。
Pre-linker:目前CodeWarrior IDE不支持该选项。
Post-Linker:选择在链接完成后,还要对输出文件进行的操作。因为在本例中,希望生成一个可以烧写到Flash中去的二进制代码,所以在这里选择ARM fromELF,表示在链接生成映像文件后,再调用FromELF命令将含有调试信息的ELF格式的映像文件转换成其他格式的文件。
2.Language Settings因为本例中包含有汇编源代码,所以要用到汇编器。首先看ARM汇编器。这个汇编器实际就说在8.1节中谈到的armasm,默认的ARM体系结构是ARM7TDMI,正好符合目标板S3C4510B,无需改动。字节顺序默认就是小端模式。其他设置,就用默认值即可。
还有一个需要注意的就是ARM C编译器,它实际就是调用的命令行工具armcc。使用默认的设置就可以了。
细心的读者可能会注意到,在设置框的右下脚,当对某项设置进行了修改,该行中的某个选项就会发生相应的改动,如图8.5所示。实际上,这行文字就显示的是在8.1中介绍的相应的编译或链接选项,由于有了CodeWarrior,开发人员可以不用再去查看繁多的命令行选项,只要在界面中选中或撤消某个选项,软件就会自动生成相应的代码,为不习惯在DOS下键入命令行的用户提供了极大的方便。
3.Linker设置鼠标选中ARM Linker,出现如图8.6所示对话框。这里详细介绍该对话框的主要的标签页选项,因为这些选项对最终生成的文件有着直接的影响。
在标签页Output中,Linktype中提供了三种链接方式。Partial方式表示链接器只进行部分链接,经过部分链接生成的目标文件,可以作为以后进一步链接时的输入文件。Simple方式是默认的链接方式,也是最为频繁使用的链接方式,它链接生成简单的ELF格式的目标文件,使用的是链接器选项中指定的地址映射方式。Scattered方式使得链接器要根据scatter格式文件中指定的地址映射,生成复杂的ELF格式的映像文件。这个选项一般情况
图8.5命令行工具选项设置图8.6链接器设置下,使用不太多。

因 ...

本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2009/01/02/1586447.html,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29215 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
16489 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20725 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14905 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22367 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23590 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
36480 0
3576
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载