c语言写pcxrle算法,基于ARM的C语言程序设计.docx

实验三基于ARM的C语言程序设计

一、实验目的

了解ARMC语言的基本框架,学会使用 ARM的C语言编程

二、实验设备

EL-ARM-830教学实验箱,Pentiumll以上的PC机,仿真器电缆。

PC操作系统 WIN98 或 WIN2000 或 WINXP,ARMSDT2.5 或 ADS1.2 集成开发 环境,仿真器驱动程序

三、ARMC语言简介与使用规则

ARM使用C语言编程是大势所趋

在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量巨 大,并且不宜移植。由于 ARM的程序执行速度较高,存储器的存储速度和存储 量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短, 代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容 易等等。因此,C语言的在ARM编程中具有重要地位。

ARMC语言程序的基本规则

在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时 间的代码一般使用汇编语言来编写,比如 ARM的启动代码,ARM的操作系统的 移植代码等,除此之外,绝大多数代码可以使用C语言来完成。

C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个 C语言 的集成开发环境,只不过这个开发环境和 ARM的硬件紧密相关。

在使用C语言时,要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使 用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通 过ATPCS的规定与C程序相互调用与访问。

ATPCS,就是ARM、Thumb的过程调用标准

(ARM/ThumbProcedureCallStandarc),它规定了一些子程序间调用的基本规

则。如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。

在C程序和ARM的汇编程序之间相互调用必须遵守 ATPCS。而使用ADS的C 语言编译器编译的C语言子程序满足用户指定的 ATPCS的规则。但是,对于汇 编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,

汇编语言的子程序应满足下面 3个条件:

?S子程序编写时,必须遵守相应的 ATPCS规则;

12

?堆栈的使用要遵守相应的ATPCS规则;

?S汇编编译器中使用-atpcs选项。

基本的ATPCS规定,请详见相关技术文档。

汇编程序调用C程序

汇编程序的设置要遵循 ATPCS规则,保证程序调用时参数正确传递。 在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。 在调用C程序时,要正确设置入口参数,然后使用BL调用。

C程序调用汇编程序

汇编程序的设置要遵循 ATPCS规则,保证程序调用时参数正确传递。

在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程 序。在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。 在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动 程序,跳到C语言下的主程序,然后,执行 C程序,在C环境下读写硬件的寄存 器,一般是通过宏调用,在每个项目文件的Startup44bO/INC目录下都有一个

44b.h的头文件,那里面定义了所有关于 44B0的硬件寄存器的宏,对宏的读写, 就能操作44B0的硬件。

具体的编程规则同标准C语言。

3?简单的小例子

下面是一个简单的小例子

IMPORTMai n

AREAI nit,CODE,READONLY;

ENTRY

LDRR0,=0x01d00000

LDRR1,=0x245

STRR1,[R0]

BLMai n

END ;把0x245放到地址0X01D00000;跳转到Main()函数处的C/C++程序;标 识汇编程序结束

以上是一个简单的程序,先寄存器初始化,然后跳转到Main()函数标识的C/C++

代码处,执行主要任务,此处的 Main是声明的C语言中的Main()函数。对宏的 预定义,在44b.h中已定义,如:

#defi nerPCONA(*(volatileu nsig ned*)0x1d20000)

#defi nerPDATA(*(volatileu nsig ned*)0x1d20004)

13

#defi nerPCONB

#defi nerPDATB(*(volatileu nsig ned*)0x1d20008)(*(volatileu nsig ned*)0x1d2000c)#def in erPCONC(*(volatileu nsig ned*)0x1d20010)#defi nerPDATC(*(volatileu nsig ned*)0x1 d20014)#defi nerPUPC(*(volatileu nsig ned*)0x1d20018)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值