- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 嵌入式软件设计
* * * * * * * * * * * * * * * * 3 Sept. 2008 Confidential 四、基于ARM的嵌入式系统编程 第四章:基于ARM的嵌入式系统编程 学时:4.0学时 教学方法:讲授ppt+上机练习+点评+案例分析 目标: 本章旨在向学员介绍ARM7TDMI指令集,通过本章的学习,学员应该掌握如下知识: 通用PC与嵌入式编程不同 程序设计基本概念 高效的C编程 C和汇编的连接 4.1 通用PC编程与嵌入式编程的区别 目前C/C++语言是当今嵌入式系统开发最为常见的语言。 早期的嵌入式系统程序大都是用汇编语言开发的,但由于嵌入式系统本身所处理问题的不断增长的规模和复杂性,使得完全用汇编语言开发整个大型嵌入式系统已经成为不可能。 对于嵌入式系统来说,能工作的代码并不等于是“好”的代码。“好”代码的指标很多,包括易读、易维护、易移植和可靠等。 在嵌入式系统程序设计方面,就其使用语言技巧完成应用程序功能意义上来说与通用计算程序设计没有多大区别。但在程序运行环境上却与通用计算有着很大区别的,换句话说,一个在通用计算系统里出色的程序员不一定就是一个“好”的嵌入式系统程序员。 4.1.1 运行环境 资源约束。如为处理器数量和计算速度、数据内存以及程 序内存大小、堆和栈的大小及使用方法、可使用的中断的数量和方式、输入/输出接口的数量和方式、电子硬盘的大小和文件存储方式等。 性能约束。如实时性、执行时间等。 安全性约束。如程序可靠性、保险性等。 底层硬件约束。如对底层硬件的了解、汇编语言的支持等。 4.1.2 硬件的访问 C语言是一种结构化的程序设计语言,它的优点运行速度快、编译效率高、移植性好和可读性强。C语言具有简单的语法结构和强大的处理功能,并可方便地实现对系统硬件的直接操作。C语言支持模块化程序设计结构,支持自顶向下的结构化程序设计方法。 嵌入式C语言程序设计首先是C语言程序设计,必须符合C语言基本语法。嵌入式C语言程序设计又是面向嵌入式的应用,目标是开发安全可靠且按特定目标优化的嵌入式应用程序。 C语言的硬件直接访问主要通过宏定义或内嵌汇编来完成的。 4.3 高效的C编程 1. 原则只对经常被调用且对性能影响较大的函数进行优化。 2. 推荐使用多数ARM编译器和调试器都带的性能分析工具。 3. 用源代码注释来评注那些不易理解的优化代码,以提高代码的可维护性。 [注意]:armcc编译器默认是全部优化功能有效,GNU编译器在默认状态下所有优化无效。 4.3.1 局部变量类型 C代码: int checksum_v1 (int *data) { char i; int sum = 0; for (i = 0; i64; i++) { sum +=data[i]; } return sum; } ARM汇编: checksum_v1 MOV r2,r0 ;r2=data MOV r0,#0 ;sum=0 MOV r1,#0 ;i=0 checksum_v1_loop LDR r3,[r2,r1,LSL #2] ;r3=data[i] ADD r1,r1,#1 ; r1=i+1 AND r1,r1,#0xff ;i=(char) r1 CMP r1,#0x40 ;cmp i,64 ADD r0,r3,r0 ;sum += r3 BCC checksum_v1_loop ;if(i64) loop MOV pc,r14 ;return sum ARM汇编: checksum_v2 MOV r0,r0 ;r0=data MOV r0,#0 ;sum=0 MOV r1,#0 ;i=0 checksum_v2_loop LDR r3,[r2,r1,LSL #2] ;r3=data[i] ADD r1,r1,#1 ; r1=i+1 CMP r1,#0x40 ;cmp i,64 ADD r0,r3,r0 ;sum += r3 BCC checksum_v2_loop ;if(i64) loop MOV pc,r14 ;return sum unsigned int i; 4.3.1 局部变量类型(续) C代码: short checksum_v3 (short *data)
文档评论(0)