基于s3c2410嵌入式实验报告c语言,嵌入式技术应用教程基于S3C2410第三章.doc

嵌入式技术应用教程基于S3C2410第三章

第三章 汇编语言与C语言

3.1 C语言与汇编语言的比较

本课程全程使用C语言来开发S3C2410A。目前很少有用汇编语言来开发ARM系统了。相比较而言汇编语言的优势是执行效率高,但其劣势是代码效率较低,而C语言正好相反,其代码效率较高,执行效率较低。

什么是执行效率?什么是代码效率?在嵌入式设计领域,一般执行效率就是程序的执行时间可以精确控制,从而可以使程序高效率的运行。采用汇编语言编写ARM程序,每一条指令的执行时间都是固定不变的(外部时钟确定),所以写出的程序每一步的执行时间都是可以精确控制的。这是采用汇编语言的优势所在。但是,相信有过用汇编语言进行程序设计经验的读者在读别人用汇编语言写的程序时都会觉得十分吃力,尤其在碰到一些编程习惯不好的coding,整个程序注释寥寥或者干脆没有,那么对于一般的设计人员来讲,这样的程序就是天书一卷了。这也就是所谓的程序可读性不高,不便于维护和移植重用。这也可以说是代码效率底下。C语言编写的程序相对来说可读性高,便于移植重用,结构灵活。一个注释完全,结构完整的C程序很容易就读懂了,而且我们还可以把一些常用的代码封装成函数,这样就可以根据需要来直接调用这些函数。C语言有了这些性质,相对于汇编语言其代码效率就较高了。

C语言有其优点,必然在嵌入式领域内还有其不足的地方。采用C语言编写的ARM驱动代码需要经过编译器编译而生成相对应的汇编代码,最后生成可下载执行的二进制文件。在这个过程中,所生成的汇编代码完全由编译器所决定,这样一来对于一条C语句来讲预先不知道所生成的汇编代码有几多,所以也就无从精确判断程序执行的时间,这种特质也就是所谓的执行效率相对较低。

在嵌入式控制领域,有一些设计对于程序的执行时间需要精确的把握,大多数设计对于程序的时间要求没有那么精确。故此,一般情况下C语言完全能够胜任开发任务。如果在设计中碰到了需要严格把握程序执行时间的地方,可以根据需要采取C语言和汇编语言混合编程的方法来处理。

3.2 应用C语言开发ARM入门

学过51单片机开发的读者都知道,控制单片机其实就是对其内部的一些寄存器进行配置和操作。ARM开发与单片机开发十分相似,只不过ARM的结构相对于单片机更为复杂,内部寄存器更多而已。

访问S3C2410A的功能寄存器

采用汇编程序可以对ARM的寄存器进行操作,而采用C语言开发驱动则需要定义寄存器的头文件。对于达盛的试验系统来讲,S3C2410A的寄存器定义头文件为2410ADDR.H。在这个文件中,所有的2410芯片开发所用到的寄存器全部都进行了定义。在用C语言开发程序时,必须先包含这个头文件,然后在主程序中可以直接对定义好的寄存器进行操作。

// I/O PORT

#define rGPACON (*(volatile unsigned *)0 //Port A control

#define rGPADAT (*(volatile unsigned *)0 //Port A data

#define rGPBCON (*(volatile unsigned *)0 //Port B control

#define rGPBDAT (*(volatile unsigned *)0 //Port B data

#define rGPBUP (*(volatile unsigned *)0 //Pull-up control B

上面几行程序就是从2410ADDR.H摘录出来的I/O口寄存器的部分定义。比如第一行定义意思是说端口A的控制寄存器命名为rGPACON,其在S3C2410A芯片中的访问地址是0在编写程序时,可以直接给rGPACON赋值,实际上也就是给地址0值。例如:

rGPGCON = rGPGCON & 0xfff0ffff | 0

上面这个操作其实是对寄存器rGPGCON进行了相应的配置。再比如第二行程序定义了端口A的数据寄存器并且命名为rGPADAT,其在S3C2410A芯片中的访问地址是0我们也可以在程序中对rGPADAT进行赋值,例如:

rGPGDAT = rGPGDAT & 0xeff | 0x300;

跳转操作

在ARM汇编指令中有相应的跳转指令可以使用,那么对应于C语言,跳转语句可以翻译成if else模式或者switch case模式。

循环操作

在C语言中循环操作最为简单,可以采用for语句或者while语句都可以实现循环操作。

C语言变量的位数

ARM为32位CPU,在ARM开发中有时会需要定义8位、16位或者32位变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值