(1)实验目的
了解ARM C 语言的基本框架,学会使用ARM 的C 语言编程。
(2)实验内容
用C 语言编写一个简单的应用程序。
(3)实验设备
①EL-ARM-830 教学实验箱,Pentium Ⅱ以上的PC 机,仿真器电缆。
②PC 操作系统Win98 或Win2000 或WinXP,ADS1.2 集成开发环境,仿真器驱动程序。
(4)ARM C 语言简介与使用规则
1)使用C 语言编程的优势
在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量巨大,并且不宜移植。 由于ARM 的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C 语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易,等等。 因此,C 语言的在ARM 编程中具有重要地位。
2)ARM C 语言程序的基本规则
在ARM 程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间,代码一般使用汇编语言来编写,比如ARM 的启动代码、ARM 的操作系统的移植代码等,除此之外,绝大多数代码可以使用C 语言来完成。
C 语言使用的是标准的C 语言,ARM 的开发环境实际上就是嵌入了一个C 语言的集成开发环境,只不过这个开发环境与ARM 的硬件紧密相关。
在使用C 语言时,要用到汇编语言的混合编程。 当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通过ATPCS 的规定与C语言程序相互调用与访问。
ATPCS,就是ARM、Thumb 的过程调用标准(ARM/Thumb Procedure Call Standard),它规定了一些子程序间调用的基本规则。 如寄存器的使用规则、堆栈的使用规则和参数的传递规则等。
在C 语言程序和ARM 的汇编程序之间相互调用必须遵守ATPCS,而使用ADS 的C 语言编译器编译的C 语言子程序满足用户指定的ATPCS 的规则。 但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS 的规则。 具体来说,汇编语言的子程序应满足下面三个条件:
①在子程序编写时,必须遵守相应的ATPCS 规则。
②堆栈的使用要遵守相应的ATPCS 规则。
③在汇编编译器中使用-atpcs 选项。
3)汇编程序调用C 语言程序
汇编程序的设置要遵循ATPCS 规则,保证程序调用时参数正确传递。 在汇编程序中使用IMPORT 伪指令声明将要调用的C 语言程序函数。
在调用C 语言程序时,要正确设置入口参数,然后使用BL 调用。
4)C 语言程序调用汇编程序
汇编程序的设置要遵循ATPCS 规则,保证程序调用时参数正确传递。 在汇编程序中使用EXPORT 伪指令声明本子程序,使其他程序可以调用此子程序。 在C 语言中使用extern 关键字声明外部函数(声明要调用的汇编子程序)。 在C 语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C 语言下的主程序,然后执行C 语言程序,读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup44b0/INC 目录下都有一个44b.h 的头文件,那里面定义了所有关于S3C44BOX 的硬件寄存器的宏,对宏的读写,就能操作S3C44BOX 的硬件。
具体的编程规则同标准C 语言。(www.xing528.com)
5)简单的示例
下面是一个简单的示例:
以上是一个简单的程序,先寄存器初始化,然后跳转到Main()函数标识的C/C + +代码处,执行主要任务,此处的Main 是声明的C 语言中的Main()函数。
对宏的预定义,在44b.h 中已定义,如:
在程序中实现,
完成对GPIO 的B 接口的操作。
(5)实验步骤
①本实验仅使用实验教学系统的CPU 板和串口。 在进行本实验时,LCD 电源开关、音频的左右声道开关、AD 通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
②在PC 机并口和实验箱的CPU 板上的JTAG 接口之间,连接仿真器调试电缆,以及串口间连接公/母接头串口线。
③检查线缆连接是否可靠,确认可靠后,接入电源线缆,系统上电。
④打开ADS1.2 开发环境,打开S3C44BOX 实验程序\实验三\C.mcp 项目文件。
⑤编译通过后,运行ADS1.2 的调试环境AXD,装载S3C44BOX 实验程序\实验三\C\C_data中的映象文件C.axf。
⑥打开串口调试工具,配置为波特率为115 200 Bd,校验位无,数据位为“8”,停止位为“1”。 不要选十六进制显示。 之后,在ADS1.2 调试环境下全速运行映象文件,应出现如图9.19所示界面,本程序连续发送55。
下面分析主程序的源码。
在C 语言程序前的部分为系统的初始化:
图9.19 串口调试助手
将data = 0x55;语句中的0x55,换成其他8 位数,重新编译,下载,看看串口工具上输出的是什么内容。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。