- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式技术应用教程基于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位变量,
您可能关注的文档
最近下载
- 【产品手册】黑石Blackstone_业务宣传册Brochure_bxmix-brochure_市场.docx
- 诊断报告伪造.pptx
- {安全生产管理}港口安全知识培训PPT43页.pdf VIP
- 设备安装调试方案.docx VIP
- 宪法学(第二版)(马克思主义理论研究和建设工程重点教材)课件第8章“一国两制”与特别行政区制度.pptx
- 2024届衡阳市高三统一考试(一模)英语试卷(含答案).docx
- 2023中国婴童护肤白皮书.doc VIP
- 高中地理人教版(2019)选择性必修一 知识梳理.pdf
- 学习贯彻党的二十届三中全会精神测试题(含答案).docx VIP
- 中层干部测评表.doc VIP
文档评论(0)