嵌入式系统实训基础报告走马灯_第1页
嵌入式系统实训基础报告走马灯_第2页
嵌入式系统实训基础报告走马灯_第3页
嵌入式系统实训基础报告走马灯_第4页
嵌入式系统实训基础报告走马灯_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统技术实训报告学期:日期:实训场合:二级学院信息工程学院班级姓名学号实验题目实训五、C语言控制LED灯(走马灯)1、实验目日勺z熟悉ADS开发环境调试环境。z掌握简朴日勺ARM汇编指令日勺使用措施。z掌握S3C2440A日勺I/O控制寄存器勺配备。z掌握ARM汇编指令和C语言互相调用日勺措施2、实验设备z PC机、ARM仿真器、2440实验箱、串口线。3、实验内容z熟悉ARM开发环境日勺建立。z使用ARM汇编和C语言设立GPIO 口日勺相应寄存器。z编写跑马灯程序。4、实验原理C程序与汇编程序互相调用规则为了使单独编译勺C语言程序和汇编程序之间可以互相调用,必须为子程序间日勺调用规定一

2、定日勺规则h ATPCS,即ARM, Thumb过程调用原则(ARM/Thumb Procedure Call Standard), 是ARM程序和Thumb程序中子程序调用日勺基本规则,它规定了某些子程序间调用 日勺基本规则,如子程序调用过程中日勺寄存器日勺使用规则,堆栈日勺使用规则,参数勺传递规 则等。下面结合实际简介几种ATPCS规则,如果读者想理解更多勺规则,可以查看有关日勺书 籍。1.基 本ATPCS基本ATPCS规定了在子程序调用时日勺某些基本规则,涉及下面3方面日勺内容:各寄存器勺使用规则及其相应勺名称。数据栈勺使用规贝h (3)参数传递日勺规则。相对于其他类型日勺ATPCS,满

3、足基本ATPCS日勺程序勺执行速度更快,所占用日勺内存更少。 但是它不能提供如下勺支持:ARM程序和Thumb程序互相调用,数据以及代码日勺位置无关 日勺支持,子程序日勺可重入性,数据栈检查勺支持。而派生日勺其她几种特定ATPCS就是在基本ATPCS日勺基本上再添加其她日勺规则而形 成日勺。其目日勺就是提供上述勺功能。寄存器日勺使用规则寄存器勺使用必须满足下面勺规则:子程序间通过寄存器R0R3来传递参数这时,寄存器R0R3可以记作A0A3。被 调用勺子程序在返回前无需恢复寄存器曰0R3日勺内容。在子程序中,使用寄存器R4Rll来保存局部变量。这时,寄存器R4R11可以 记作V1V8。如果在子程

4、序中使用到了寄存器V1-V8中勺某些寄存器,子程序进入时必须 保存这些寄存器勺值,在返回前必须恢复这些寄存器勺值;对于子程序中没有用到勺寄存 器则不必进行这些操作。在Thumb程序中,一般只能使用寄存器R4R7来保存局部变量。寄存器R12用作子程序间scratch寄存器,记作IP。在子程序间勺连接代码段中 常有这种使用规则。寄存器R13用作数据栈指针,记作SP。在子程序中寄存器R13不能用作其她用途。 寄存器SP在进入子程序时勺值和退出子程序时勺值必须相等。寄存器R14称为连接寄存器,记作LR。它用于保存子程序勺返回地址。如果在 子程序中保存了返回地址,寄存器R14则可以用作其她用途。寄存器R

5、15是程序计数器,记作PC。它不能用作其她用途。参数传递规则根据参数个数与否固定可以将子程序分为参数个数固定日勺(nonvariadic)子程序和参数个数可变勺(variadic)子程序。这两种子程序勺参数传递规则是不同 勺。(1)参数个数可变勺子程序参数传递规则对于参数个数可变勺子程序,当参数不超过4个时,可以使用寄存器即R3来传递参 数;当参数超过4个时,还可以使用数据栈来传递参数。在参数传递时,将所有参数看作是寄存在持续勺内存字单元中勺字数据。然后,依次 将各字数据传送到寄存器R0、R1、R2、R3中,如果参数多于4个,将剩余勺字数据传送到 数据栈中,入栈勺顺序与参数顺序相反,即最后一种

6、字数据先入栈。按照上面勺规则,一 种浮点数参数可以通过寄存器传递,也可以通过数据栈传递,也也许一半通过寄存器传递, 另一半通过数据栈传递。参数个数固定勺子程序参数传递规则对于参数个数固定勺子程序,参数传递与 参数个数可变勺子程序参数传递规则不同。如果系统涉及浮点运算勺硬件部件,浮点参数将按照下面勺规则传递:各个浮点参数按顺序解决。为每个浮点参数分派FP寄存器。分派勺措施是,满足该浮点参数需要勺且编号最小勺一组持续勺FP寄存器。第一 个整数参数,通过寄存器R0R3来传递。其她参数通过数据栈传递。子程序成果返回规则子程序中成果返回勺规则如下:成果为一种32位勺整数时,可以通过寄存器R0返回。成果为

7、一种64位整数时,可以通过寄存器R0和Rl返回,依次类推。成果为一种浮点数时,可以通过浮点运算部件勺寄存器f0. d0或者s0来返回。成果为复合型勺浮点数(如复数)时,可以通过寄存器f0fN或者d0dN来返回。对于位数更多日勺成果,需要通过内存来传递。C语言函数和ARM汇编语言函数间互相调用高档语言函数与汇编语言函数勺混合调 用也要遵循ATPCS规则保证程序调用时参数勺对勺传递。在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子 程序,而在C语言程序中使用extern核心字声明外部函数(声明要调用勺汇编子程序),即可 调用此汇编子程序。下面给出两个例子来简介函数互相调用。例

8、C函数中调用汇编示例中汇编子程序s trcopy使用两个参数,一种表达目勺字符串地址,一种表达源字 符串勺地址,参数分别寄存曰0,R1寄存器中。#include extern void strcopy(char*d,const char*s)/声明外部函数。即要调用勺汇编子程序int mian (void)const char*srcstr=First string-source; /定义字符串常量char dstsrt= Second string-destination; /定义字符串变量printf(Before copying: /n);printf (%sn%s/n, srcstr,

9、dststr); 显示源字符串和目勺字符串勺内容strcopy(dststr, srcstr); 调用汇编子程序,R0=dststr,R1=srcstr printf(Aftercopying: n)printf (%s n %sn, srcstr, dststr); 显示strcopy复制字符串成果return(0);被调用汇编子程序:AREASCopy,CODE,READONLYEXPORT strcopy ;声明strcopy,以便外部程序引用strcopy;R0为目日勺字符串日勺地址 ;R1为源字符串勺地址LDRBR2, R1, #1;读取字节数据,源地址加1STRBR2, R0, #

10、1;保存读取勺1字节数据,目勺地址加1CMP r2, #0;判断字符串与否复制完BNE strcopy没有复制完毕,继续循环;返回MOVpc, 1rEND例汇编程序调用C程序汇编程序日勺设立要遵循ATPCS规则,保证程序调用时参数日勺对勺传递。在汇编程序中 使用IMPORT伪指令声明将要调用日勺C程序函数。在调用C程序时要对日勺设立入口参数, 然后使用BL调用。示例程序中使用了5个参数,分别使用寄存器曰0存储第1个参数, R1存储第2个数,R2存储第3个参数,R3存储第4个参数,第5个参数运用堆栈传送。 由于运用了堆栈传递参数,在程序调用成果后要调节堆栈指针。汇编调用C程序日勺汇编程序/*函数sum()返回5个整数日勺和*/int sum (int a,lit b, int c, int d, int e)return(a+b+c+d+e) ; /返回

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论