实验三 基于ARM的C语言程序设计
一、实验目的
了解ARM C语言的基本框架,学会使用ARM的C语言编程。
二、实验设备
标准硬件。
三、实验内容
用C语言编写一个“用通用串口UART发送一组数据”的应用程序。
四、实验原理
(1)汇编程序调用C程序
汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。
在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。
在调用C程序时,要正确设置入口参数,然后使用BL调用。
(2)C程序调用汇编程序
在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。
在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。
在C语言环境下开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序跳转到C语言下的主程序,然后,执行C程序。在C环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup2410\\INC目录下都有2410addr.h头文件,里面定义了所有关于2410的硬件寄存器的宏,通过对宏的读写,就能操作2410的硬件。
具体的编程规则同标准C语言。
下面是一个简单的小例子,在汇编中嵌套一个C程序
IMPORT Main;//用IMPORT声明要引入一个C函数Main
AREA Init ,CODE, READONLY;
ENTRY
LDR R0, =0x01d00000
LDR R1, =0x245
STR R1 , [R0] ;把0x245放到地址0X01D00000
BL Main ;跳转到Main()函数
END ;标识汇编程序结束
以上是一个简单的程序,先寄存器初始化,然后跳转到Main()函数标识的C/C++代码处,执行主要任务,此处的 Main是声明的C语言中的Main()函数。
五、实验步骤
1.打开ADS1.2开发环境,打开\\基础实验\\实验六\\C.mcp项目文件,然后进行compile和make生成*.axf文件。
2.编译通过后,进入ADS1.2调试界面,加载\\基础实验\\实验六\\C_Data\\Debug中的映象文件程序映像C.axf。
3.在ADS调试环境下全速运行映象文件,之后,关闭超级终端,打开软件包内的串口调试助手工具,配置为波特率为115200,校验位无,数据位为8,停止位为1。不要选十六进制显示,出现界面。
本程序连续发送55。
下边分析一下主程序的源码。
在C程序前的部分为系统的初始化,这在后边BOOTLOADER的章节里要详细介绍。
#include \"..\\inc\\config.h\" //嵌入包括硬件的头文件
unsigned char data; //定义全局变量
void Main(void)
{
Target_Init(); //目标板初始化,定义串口的硬件初始化在
//target.c中定义
Delay(10); //延时
data = 0x55; //给全局变量赋值
while(1)
{
Uart_Printf(\"%x \串口0输出
Delay(10);
}
}
把data = 0x55;语句中的0x55,换成其他数据,重新编译,下载。
六、心得、体会
C语言的ARM相对来说比较简单,在汇编语言中调用了C语言相关的知识。所以本次实验比较成功,顺利地实现了要求。实验中分析了一下所用到的程序代码,发现主要的语言结构还是C的模式,添加了部分的汇编知识。
没想到C语言除了在控制台之下的编程外,这部分也可以运用得到,之前有点小瞧C了。更深的知识我们没有继续探讨学习,只完成了实验要求。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务