嵌入式程序优化方法
嵌入式系统的性能优化技巧

嵌入式系统的性能优化技巧嵌入式系统是一种特殊的计算系统,具有资源受限、功耗低、体积小等特点。
优化嵌入式系统的性能是提高其运行效率、减少资源占用以及增加系统稳定性的重要任务。
本文将介绍一些常用的嵌入式系统性能优化技巧,以帮助开发者更好地优化嵌入式系统的性能。
1. 代码优化代码优化是提高嵌入式系统性能的关键步骤。
以下是一些常用的代码优化技巧:- 减少函数调用次数:频繁的函数调用会引入额外的开销,尽量避免不必要的函数调用。
- 算法优化:选择合适的算法和数据结构可以显著提高代码性能。
- 循环优化:减少循环计算和循环次数,避免不必要的循环嵌套。
- 内存访问优化:合理使用缓存,尽量减少对内存的访问次数。
2. 资源管理嵌入式系统资源有限,对资源的合理管理将直接影响系统性能。
以下是一些资源管理的技巧:- 内存管理:合理分配内存,避免内存泄漏和资源冲突。
- 任务调度:使用合适的调度算法,根据任务的优先级和资源需求进行任务调度,避免资源争用。
- 中断处理:优化中断处理程序,快速响应中断并及时释放资源。
3. 代码编译优化编译器优化对于嵌入式系统性能的提升非常重要。
以下是一些常用的编译器优化技巧:- 优化编译选项:使用合适的编译选项,比如开启优化选项、调整编译等级等。
- 内联函数:将频繁调用的小函数转化为内联函数,减少函数调用开销。
- 空间优化:使用编译器提供的空间优化选项,去除未使用的代码和数据,减少内存占用。
4. 系统架构设计良好的系统架构设计也是提高嵌入式系统性能的关键。
以下是一些系统架构设计的技巧:- 模块化设计:将系统划分为多个模块,每个模块负责不同的功能,提高系统的可维护性和可扩展性。
- 并发处理:针对多任务系统,使用合适的并发处理方法,提高系统的并发性能。
- 预处理技术:预处理技术可以将耗时的任务提前处理,减少系统响应时间。
- 数据存储优化:合理选择数据的存储方式,减少对外部存储器的访问次数。
5. 硬件优化除了软件层面的优化,硬件优化也是提高嵌入式系统性能的重要手段。
嵌入式系统的实时性与稳定性优化

嵌入式系统的实时性与稳定性优化嵌入式系统是一种特殊的计算机系统,被嵌入到其他设备或系统中,广泛应用于汽车、智能家居、医疗仪器等领域。
在这些应用中,实时性和稳定性是嵌入式系统的重要指标,对于系统的可靠性和性能起着至关重要的作用。
因此,为了提高嵌入式系统的实时性与稳定性,需要进行相应的优化。
一、实时性优化实时性是指系统对外部事件的响应速度,即系统在规定的时间内完成某个任务的能力。
在嵌入式系统中,实时性优化需要从以下几个方面入手。
1. 硬件选型优化在设计嵌入式系统时,合理选择硬件是实时性优化的基础。
首先,要选择高性能的处理器和内存,以确保系统能够快速响应外部事件。
其次,要根据实时性的要求,选择合适的外设接口和通信模块,以提高系统的数据传输速度和稳定性。
2. 软件设计优化软件设计是提高嵌入式系统实时性的关键因素。
在软件设计过程中,可以采取以下几个优化策略。
首先,要合理设置任务的优先级,确保高优先级任务能够及时得到执行。
其次,要合理分配任务的时间片,避免任务之间的互相影响。
最后,要采用合适的调度算法,如实时操作系统中的优先级调度算法或轮转调度算法,以提高任务的响应速度。
3. 中断处理优化中断处理是嵌入式系统实时性优化的重要环节。
中断是指硬件或软件发生的突发事件,需要立即中止当前执行的任务,转而执行与中断相关的任务。
在中断处理过程中,需要考虑以下几个优化策略。
首先,要合理设置中断的优先级,确保高优先级中断能够优先得到处理。
其次,要尽量减少中断处理的时间,以避免对正常任务的影响。
最后,要采用合适的中断处理机制,如中断嵌套或中断滤波等,以提高中断处理的效率和可靠性。
二、稳定性优化稳定性是指系统在运行过程中保持稳定的性能和功能。
对于嵌入式系统来说,稳定性优化需要从以下几个方面入手。
1. 电源管理优化电源管理是保证嵌入式系统稳定性的关键因素。
在电源管理过程中,可以采取以下几个优化策略。
首先,要合理设计系统的供电电路,以提供稳定的电压和电流。
嵌入式 ARM的C C++代码优化方法

ARM的C代码优化方法本文来自:我爱研发网() - R&D大本营详细出处:/Blog/Archive_Thread.asp?SID=18589=======================================================C数据类型1. C语言的程序优化与编译器和硬件系统都有关系,设置某些编译器选项是最直接最简单的优化方式。
在默认的情况下,armcc是全部优化功能有效的,而GNU编译器的默认状态下优化都是关闭的。
ARM C编译器中定义的char类型是8位无符号的,有别于一般流行的编译器默认的char是8位有符号的。
所以循环中用char变量和条件i ≥0时,就会出现死循环。
为此,可以用fsigned -char(for gcc)或者-zc(for armcc)把char改成signed。
其他的变量类型如下:char 无符号8位字节数据short 有符号16位半字节数据int 有符号32位字数据long 有符号32位字数据long long 有符号64位双字数据2. 关于局部变量大多数ARM数据处理操作都是32位的,局部变量应尽可能使用32位的数据类型(int或long)就算处理8位或者16位的数值,也应避免用char和short以求边界对齐,除非是利用char 或者short的数据一出归零特性(如255+1=0,多用于模运算)。
否则,编译器将要处理大于short和char取值范围的情况而添加代码。
另外对于表达式的处理也要格外小心,如下例子:short checksum_v3(short * data){unsigned int i;short sum = 0;for(i = 0; i < 64 ; i++){sum = (short)( sum + data );//这里表达式式整形的,所以返处理非32位数据时,//要小心处理数据类型的转换。
//原来short+short=int 但int +int=int。
浅谈嵌入式系统开发中的程序优化

开发 工具 对程序进 行改进 . 使修改后 的程序 运行 速度更高或代码尺寸 方法 B 更小 . 以满足嵌入式应用 的性 能需求 。随着计算 机和微 电子技术 的不 i ti n : 0 ;+ ) 0 i+f 断发展 . 存储空间 已不再 是制约嵌入 式系统 的主要 因素 , 运行 速度优 i( 0 ( 10 , ; =1 1 O )2 O + ) 化变得格外重要 汇编语 言有 执行效率 高的优点 . 其可移植性 和可读性 差 . 但 以及 方法 A循环了 10 0 次才解决 问题 .也就是说最少用 了 10 0 个赋 它本身就是一种编程效率低下 的低级语言 . 这些都使 它的开发和维护 值 、 0 1 个判 断 、0 个加法(和 j 而方法 B采用数学方法 , 0 20 I ) ; 仅仅 用了 很不方便 . 从而导致整个系统 的可靠性也较差 而使用 C语言进行嵌 1 个加法 、 个乘法 、 次除法。自然方法 B的执行速度远快于方法 A 1 1 。 入式系统 的开发 . 有着 汇编语 言编程不可 比拟 的优势 c语言的可移 所 以, 在编程序 的时候 . 更多的是动脑筋找规律 , 大限度 地发挥 数学 最 植性好 .由于不 同系列的嵌入式系统 c语言编译工具都是以 18 年 的威力来提高程序运行的效率 93 的 A S— N IC作为基础进 行开发 的 . 因此 . 一种 c 言环境 下所编 写的 语 222查 表 法 .. 程序 . 只需将 部分与硬件相 关的地方进 行适度修 改 . 就可方便地 移植 在程序 中一般不进行非常复杂的运算 .如浮点数 的乘 除及 开方 . 到另外一种系列上 . 基于 C语言环境下的嵌入式系统能基本达到平台 以及一些复杂 的数学模型的插补运算 . 对这些 即消耗时 间又消耗 资源 的无关性 : 使用 C 言开发便于项 目维护 管理 . 语 基本上 可 以杜绝 因开 的运算 , 应尽量使用查表的方式 , 并且将数据表置于程序存储 区。 如果 发人员变化而给项 目进度或后期维护或升级所带来的影响 . 而保证 直接生成所需 的表 比较 困难 . 从 也尽 量在启动时先计算 . 然后在数据存 整个 系统的高品质 、 可靠性 以及可升级性 储器 中生成所需 的表 . 程序运行 时直接查表就 可以 . 少了程序执行 减 2程 序 设 计 中 C语 言 的 优 化 . 过程 中重复计算的工作量 21程序结构 的优化 . 223使 用 宏 定 义 .. c 言本身具 备规范化的流程控制 结构 . 语 在采用 C语言设计嵌入 在 c语言中 . 宏是产生 内嵌代码的唯一方法 对 于嵌入式系统而 式 系统程序 时 .首先要 注意尽 可能采用合理结 构化的程序设计方法 . 言 , 了能达到性能要求 . 为 宏是一种很好 的代替函数的方法 。 宏代码本 这样 可使整个 系统程序结 构清 晰 , 于调试 和维 护。一个较大 的应用 身不是函数 . 便 但使用起来像 函数 。函数调用要使用系统的栈来保存数 P 程序. 通常将整个程 序按功能分 成若干个模块 , 同模块 完成不 同的 据 .同时 C U在函数调用时需要保存和恢复当前的现场进行进栈和 不 功 能。软件 功能模 块 . 其模块 的划 分应满 足低偶合 、 高内聚的要求 。 出栈操作 . 所以函数 调用也需要 C U时间 而宏定义仅仅 作为预 览写 P 2 . 模块 中变量 的定义与声明 .1 1 好的代码嵌入到 当前 的程序 中. 产生函数调用 . 占用 的仅 仅是一 不 所 定义变 量和声 明变量 的区别在 于定义会产生 内存 分配的操作 . 是 些空 间 , 省去 了参 数压栈 、 生成汇 编语言 的 c 调用 、 回参数 、 行 l l 返 执 汇编 阶段 的概念 : 而声 明则 只是告诉包含该声 明的模块 在连接阶段从 rt1 等过程 . 而提高 了程序 的执行速度 eu I T 从 其它模块 寻找外部 函数 和变量 。 22 内嵌 汇 编 .. 4 个 . 文件和一个 . 文件结 合成一个 模块 . C h 头文件 f ) 对于 . 中是 h 程序 中对时间要求苛刻 的部分可以用内嵌汇编来 重写 . 汇编语言 该模块接 口的声 明 . 某模块提供给其它模块调用 的外部 函数及 数据需 是效 率最 高的计算机语言 在. h中文件 中冠 以 e e 关键字 声明 .模块 内的 函数 和全局变 量需 xm t 在程 序中 . 存在一个 8 — O 0 2 原则 . 2 %的程序 消耗 了 8 %的运 即 0 0 在. 文件开 头声明 永远不要在. 文件 中定义变量 . c h 否则在每个引用. 行 时间, 因而要改进效率 , 最主要是考虑改进那 2 %的代码 0 h 文件 的.文件 中都定义 了 同一个名字 的变量 , 此变量在不 同的模 c 且 嵌 入式 c程序 中主要 使用 在线汇 编 .即在 c程 序 中直接插入 块 中对应不 同的地址 单元 . 严重浪 费系统的 内存 空间 . 并降低 了程序 am } 汇编语句 。例如 ,将数组一赋值 给数组二 , 求每 一 s { 内嵌 , 要 个字 的可移植性和可维护性 节都相符 21 .. 2关键字 c nt 0 s的使用 c a f g[0 4, tn21 2] hr tn l12 ]s ig [ 4; si r 0
嵌入式系统设计中的时序逻辑优化技术

嵌入式系统设计中的时序逻辑优化技术嵌入式系统是指将软件和硬件融合在一起,以满足特定应用需求的系统。
其具有体积小、功耗低、性能稳定等特点,被广泛应用于智能家居、工业自动化、医疗设备等领域。
时序逻辑优化技术是嵌入式系统设计中的重要部分,它能够对时序路径进行优化,提高系统的工作速度和稳定性。
一、时序逻辑优化技术的需求一个典型的嵌入式系统中通常会涉及到时序逻辑的设计,如时钟、状态转移、通信等等。
在时序逻辑的设计和优化过程中,需要考虑以下几个方面的需求。
1. 时序要求时序要求是指时序电路中所涉及的信号的时间关系要求。
为使电路能够正常工作,每个端点的数据必须在一个确定的时间内准确到达。
如果这个时间太短,那么电路会出现时序失效,从而影响系统性能,甚至会导致电路故障。
因此,在时序电路的设计中,需要仔细考虑时序要求。
2. 频率要求频率要求是指电路的时钟频率要求,这与时序要求密切相关。
在时序电路的设计和优化中,需要对电路的时钟频率进行定量分析,以确定电路的工作频率和稳定性。
3. 电路复杂度随着电路的不断增加,电路的复杂度也在不断增加。
在复杂电路中,时序逻辑的设计和优化变得更加困难,因此需要使用更加先进的时序逻辑优化技术。
二、时序逻辑优化技术的作用时序逻辑优化技术,可以对时序路径进行优化,从而提高系统的性能和稳定性。
具体来说,时序逻辑优化技术可以发挥以下作用:1. 降低系统延迟在时序电路中,如果电路延迟较大,则数据的传输速度会受到影响。
通过时序逻辑优化技术,可以对电路中的延迟路径进行优化,从而降低系统的延迟,提高系统的传输速率。
2. 提高系统的工作速度在嵌入式系统中,速度是非常重要的,决定了系统的工作效率和响应能力。
通过时序逻辑优化技术,可以降低系统的延迟,从而提高系统的工作速度。
3. 降低功耗时序电路的功耗主要与时钟频率和电路延迟有关。
通过时序逻辑优化技术,可以优化电路的时钟频率,并通过简化时序逻辑路径来降低电路延迟,从而达到降低功耗的目的。
嵌入式系统的性能优化

嵌入式系统的性能优化嵌入式系统是一种特定目的的计算机系统,应用于各种领域,如智能家居、汽车、医疗设备等。
性能优化是嵌入式系统设计中至关重要的一环,它能够有效提升系统的响应速度、功耗效率和稳定性。
本文将探讨嵌入式系统性能优化的相关技术与方法。
一、优化嵌入式软件设计在嵌入式系统中,软件设计的优化是首要考虑的方面。
下面介绍几种常见的软件优化方法。
1. 选择合适的算法和数据结构:合适的算法和数据结构可以在保证功能的前提下减少时间和空间复杂度,提高系统的性能。
2. 优化代码:通过消除不必要的计算、精简代码逻辑、减少分支和循环次数等方法来提高程序的执行效率。
3. 并行计算:利用嵌入式系统的多核处理器或异构计算单元,将任务并行化处理,以提高系统的并发能力和计算效率。
二、硬件架构优化硬件架构优化是指在嵌入式系统设计的早期阶段,通过硬件设计和选择优化硬件的性能。
1. 处理器选择:选用适合需求的处理器,比如低功耗的ARM Cortex-M系列处理器、高性能的ARM Cortex-A系列处理器等。
2. 性能和功耗平衡:通过调整处理器的频率、电压等参数来平衡系统性能和功耗,以满足具体应用的需求。
3. 加速器和协处理器的使用:根据系统的需求,使用加速器(如GPU、FPGA等)或协处理器(如DSP、加速的浮点计算单元等)来加速特定的计算任务,提高系统的性能。
三、内存管理和优化内存管理和优化对嵌入式系统的性能有着重要的影响,下面提出几种常用的内存管理和优化方法。
1. 内存分配:合理分配内存资源,避免内存碎片的产生,提高系统内存的利用率。
2. 缓存优化:通过合理使用缓存技术,减少内存访问的时间和能耗,提高系统的响应速度。
3. 数据对齐:将数据按照特定字节对齐,可以提高存取数据的效率,减少访存时间。
4. 压缩技术:对于嵌入式系统中的大量数据,可使用压缩算法来减小数据存储占用的空间,提高内存容量的利用率。
四、功耗优化嵌入式系统的功耗优化是为了延长系统电池寿命或者减少系统散热。
浅析嵌入式程序的优化

嵌 入 式 程 序优 化 主要 有 以 下 3 原 则 : 个
① 等效原则: 实现的功能需一致 。 ② 有效原则: 使得运行速度快或 占用存储空间小, 或兼得 。 ③ 经济原P : 出较小 的成本 。 I 要付
2嵌入 式 程序 优化 的主要 实 施方 法
随着数字信 息技 术和 网络技术高速发展嵌入式 系统 已经广泛渗透到科学研究领域 、 各类产业和商业文化 艺术以及人们 的 只常 生 活中 , 嵌入式计算 机是完 成某些特 定功能 的计算 机系统 , 并且 软硬件可裁 剪 。具有 形态和性 能更加小 型化, 功能, 功耗等特 多 低 点, 已成为 当今计算机技术发展的一个重要标志! 程序优 化是指对解决 同一 问题 的几个不 同的程序 , 比较 、 改 、 进行 修 调整或重新编写程序 , 把一般程序 变换为语句最少 、 占用 内 存量少 、 处理速度最快 、 部设 备分 时使用效 率最 高的最优程序 。 外
疑 自己 的某 些 假 定 , 复 问 题 的 本 来 面 目 。 恢 22编 译 优 化 . 目前 很 多 编 译 器 都 可 实 现 代 码 优 化 功 能 , 提 供 的代 码 也很 紧 凑 。使 用 编 译 器 , 得 到 性 能 不 错 的代 码 。然 而 , 器 不 能像 人 且 能 机
W AN G Le . i LIX i n
( nUnv r t f rhtc r a dTeh oo y Xi n7 0 5 , hn ) Xi i sy o A c i t e n c n lg , 1 0 5 C ia a ei eu a
Abs r c :Ac o d ng t he c r c eitc fe be de yse ,t pe n r uc d w a fC a ua ode o i iai n i m be de ta t c r i O t ha a trsiso m d d s tm he pa ri tod e yso lng ge c ptm z to n e d d
提高嵌入式软件开发效率的方法

提高嵌入式软件开发效率的方法
提高嵌入式软件开发效率的方法有很多,以下是一些常用的方法:
1. 明确开发目标:在开始开发前,明确软件的目标和要求,确保所有的开发人员对项目有统一的认识。
2. 模块化设计:将软件划分为若干个模块,每个模块完成特定的功能,这有助于提高代码的可读性和可维护性。
3. 采用适当的编程语言:选择适合嵌入式系统的编程语言,如C或C++,可以有效地提高开发效率。
4. 利用开发工具:使用适合的集成开发环境(IDE)和调试工具,能够大大提高开发效率。
5. 优化代码:通过优化代码,可以提高软件的运行效率。
例如,减少不必要的内存占用,优化算法和数据结构等。
6. 进行软件测试:通过测试来发现和修复潜在的问题,可以提高软件的稳定性和可靠性。
7. 使用实时操作系统(RTOS):使用RTOS可以更好地管理系统的资源和任务调度,提高系统的实时性和稳定性。
8. 培训和人才引进:对开发人员进行定期的培训和技能提升,引进具备专业技能的人才,可以进一步提高软件开发效率。
9. 采用敏捷开发方法:敏捷开发方法可以帮助团队更好地应对需求变更,提高开发效率和质量。
10. 持续改进:通过对开发过程和产品进行持续改进,可以不断提高开发效率和质量。
总之,提高嵌入式软件开发效率需要多方面的策略和方法,以上仅是常用的一些方法。
在实际开发中,可以根据项目的具体情况选择合适的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序的优化方法
1
背景
嵌入式系统是以应用为中心,以计算机技术为基础,并 且软硬件可裁剪,适用于应用系统,对功能、可靠性、成本 、体积、功耗有严格要求的专用计算机系统。随着数字信息 技术和网络技术高速发展,嵌入式系统已经广泛渗透到科学研 究、工程设计、军事技术、各类产业和商业文化艺术以及人
寄存器变量属于动态存储方式,因此凡需要采用静态存储方式的变量 都不能定义为寄存器变量。寄存器变量的说明符是register。
用register storage specifier声明函数形参将会建议编译器把实参存
入寄存器中而不是堆栈中。例如:void function(register int i, register long j)。
以充分利用硬件资源来生成高质量的代码。在嵌入式软件开发过程中应选
择一种优化能力强的编译器,充分利用其代码优化功能,生成高效的代码 ,提高程序的运行效率。
6
代码优化
代码优化,就是采用汇编语言或更精简的程序代码来代 替原有的代码,使编译后的程序运行效率更高。编译器可以自 动完成程序段和代码块范围内的优化,但很难获取程序语义信 息、算法流程和程序运行状态信息,因而需要编程人员进行手
定义了全局变量,MCU(Microcontroller Unit)就少了一个可以利用的
数据存储器空间,太多的全局变量,会导致编译器无足够的内存分配 ;而局部变量则大多定位于MCU内部的寄存器中。在绝大多数的
MCU中,使用寄存器的操作速度比数据存储器快,指令也更灵活,有
利于生成质量更高的代码,而且局部变量所占用的寄存器和数据存储 器在不同的模块中可以重复利用。
,使得编译器不能对循环进行优化
处理,降低了效率。
16
代码优化
函数调用
高效的调用函数,尽量限制使用函数的参数个数,不要超过4个。ARM
调用时,4个以下的形参通过寄存器传递,第5个以上的形参通过存储器栈
传递。如果有更多的参数调用,则可将相关的参数组织在一个结构体内, 用传递结构体指针来代替参数。
17
字符型(char)>整型(im)>长整型(long int)>浮点型(float)。
对除法来说,使用无符号数比有符号数会有更高的效率。在实际调用中 ,尽量减少数据类型的强制转换;少用浮点运算,如果运算的结果能够 控制在误差之内,则可用长整型代替浮点型。
9
代码优化
全局变量与局部变量
少用全局变量,多用局部变量。全局变量是放在数据存储器中的,
代码优化
内联函数和内嵌汇编
对性能影响大的重要函数可以使用关键字 inline内联,那么在调用它的地
方将会用函数体来替代函数调用语句,第一,省去了调用指令需要的执行
时间;第二,省去了传递变元和传递过程需要的时间。但是使用这种方法 在优化程序速度的同时,增加了代码尺寸,因此需要更多的 ROM。使用
这种优化在inline 函数频繁调用并且只包含几行代码的时候是最有效的。
switch 语句中,发生相对频率相对低的 case 标号放在另外的 switch 语句中。
如例 3 中,把发生率高的case 标号放
在外层的 switch 语句中,把发生频率 低的放在缺省的(default)内层 switch 语
句中。
13
代码优化
提高循环语句的效率
循环体是程序设计和优化的重点,对于一些不需要循环变量参加运算的
20
谢 谢 各 位
21
优化后if(a>(b*c))和a=a>>2
②减少乘方运算。例如:
优化前a=pow(a,3.0) 优化后a=a*a*a
8
代码优化
③使用白加、自减指令。例如:
优化前a=a+1、a=a-1 优化后a++、a--或inc、dec ④尽量使用小的数据类型。在所定义的变量满足使用要求的条件下,优 先使用顺序为:
们的日常生活等方方面面中。嵌入式系统由于受功耗、成本
和体积等因素的制约,嵌入式微处理器的处理能力与桌面系 统处理器相比也存在较大差距,故嵌入式系统对程序运行的 空间和时间要求极为苛刻。
2
嵌入式程序优化定义
嵌入式应用程序优化,指在不改变程序功能的情况下,通过修改原来程 序的算法、结构,并利用软件开发工具对程序进行改进,使修改后的程序运
10
代码优化
使用寄存器变量
当一个变量被频繁读/写时,需要反复访问内存,花费大量的存取
时间。为了提高访问效率,可以使用CPU寄存器变量,不需要访问内
存,直接进行读/写。循环次数较多的循环控制变量及循环体内反复 使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的
最佳选择。只有局部自动变量和形参才可以定义为寄存器变量。因为
行速度更高或代码尺寸更小。
按照优化的侧重点不同,程序优化可分为运行速度优化和代码尺寸优化 。运行速度优化是指在充分掌握软硬件特性的基础上,通过应用程序结构调 整等手段来缩短完成指定任务所需的运行时间;代码尺寸优化则是指应用程 序在能够正确实现所需功能的前提下,尽可能减小程序的代码量。实际应用 中,这两者往往是相互矛盾的,为了提高程序运行速度,就要以增加代码量 为代价;而为了减小程序代码尺寸,可能又要以降低程序运行速度为代价。 因此,在对程序进行优化之前,应根据实际需要来制定具体的优化策略。
4
算法和数据结构优化
算法和数据结构是程序设计的核心所在,算法的好坏在很大程度上决 定了程序的优劣。为了实现某种功能,通常可以采用多种算法,不同算法 的复杂度和效率差别很大。选择一种高效的算法或对算法进行优化,可以 使应用程序获得更高的优化性能。例如:在数据搜索时,二分查找法要比 顺序查找法快。递归程序需要大量的过程调用,并在堆栈中保存所有返回 过程的局部变量,时间效率和空间效率都非常低;若根据实际情况对递归 程序采用迭代、堆栈等方法进行非递归转换,则可大幅度提高程序的性能 。 数据结构在程序的设计中也占有重要的地位。例如:如果在一些无序
模块,可以把它放到循环的外面。对于次数固定的循环体, for 循环比
while循环效率更高,减计数循环比增计数循环速度快。 实际运行时,每次循环需要在循环体外加两条指令:一条减法指令(减少 循环计数值)和一条条件分支指令。这些指令称为“循环开销”。在ARM 处理器上,减法指令需要1个周期,条件分支指令需要3个周期,这样每个 循环另加了4个周期的开销。可以采用循环展开的方法来提高循环运行的 速度,即:重复循环主题多次,并按同样的比例减少循环次数来减小循环 的开销,以增加代码尺寸。来换取程序的运行速度。
工优化。以下是一些常用的优化技术和技巧。
7
代码优化
代码替换
使用周期短的指令代替周期长的指令,以降低运算的强度。
①减少除法运算。用关系运算符两边乘除数避免除法操作,还有一些除法
和取模的运算可以用位操作来代替。因为位操作指令只需一个指令周期 ,而“/”运算则需要调用子程序,代码长,执行慢。例如:
优化前if((a/b)>c)和a=a/4
种:一种是采用内存映射化
提高switch语句的效率
当 switch 语句中的 case 标号很多时
,为了减少比较的次数,可以把发生频
率相对高的条件放到第一位或者把整个 switch 语句转化嵌套 switch 语句。把
发生频率高的 case 标号放在最外层的
的数据中多次进行插入、删除数据项操作,那么采用链表结构就会比较快
。算法和数据结构优化是首选的优化技术。
5
编译优化
现在,很多的编译器都具有一定的代码优化功能。在编译时,借用并 行程序设计技术,进行相关性分析;获得源程序的语义信息,采用软件流 水线、数据规划、循环重构等技术,自动进行一些与处理器体系无关的优 化,生成高质量的代码。许多编译器有不同级别的优化选项,可以选用一 种合适的优化方式。通常情况下,如果选用了最高级别的优化方式,那么 编译器将片面追求代码的优化,有时会导致错误。 另外,还有一些专用的编译器针对某些体系结构进行了优化设计,可
3
嵌入式程序优化原则
等效原则。所谓等效原则就是优化前后,程序实现的功能要一致。 有效原则。所谓有效原则。优化后要比优化前运行速度快或占用的
储存空间要小,或两者兼而有之。
经济原则。所谓经济原则就是程序有较小的代价,取得较理想的效
果。
嵌入式程序优化主要方面
嵌入式程序的优化分为3个方面:算法和数据结构优化、编译优化以 及代码优化。
11
代码优化
减少或避免执行耗时的操作
应用程序的大量运行时问通常花费在关键程序模块,关键模块往往
包含循环或嵌套循环。减少循环中耗时的操作,可以提高程序的执行
速度。常见的耗时操作有:输入/输出操作、文件访问、图形界面操作 和系统调用等。其中,如果无法避免文件的读/写,那么对文件的访
问将是影响程序运行速度的一大因素。提高文件访问速度的方法有两
19
结论
嵌入式程序的性能优化与软件的开发周期、开发成本、软 件的可读性之闻通常存在矛盾。要权衡利弊,作出折中的选择
。将算法和数据结构优化作为首选优化技术;然后根据功能、
性能差异和投资预算等因素选择高效的编译器、系统运行库和 图形库;使用性能监测工具侦测占主要运行时间的程序热点, 采用代码优化手段对其进行优化;最后使用高效的编译器进行 编译优化,从而得到高质量的代码。
程序中对时间要求苛刻的部分可以内嵌汇编来编写,适当的使用内嵌汇编 指令可以有效的提高整个系统运行的效率。
18
代码优化
利用硬件特性
为了提高程序的运行效率,要充分利用硬件特性来减小其运行开销,例
如减少中断次数、利用DMA(Direct Memory Access)传输方式等。