c18标准 改进 c语言,MPLAB-C18 C编译器的优化技巧

2023-10-09 12:50

本文主要是介绍c18标准 改进 c语言,MPLAB-C18 C编译器的优化技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

维普资讯 http://doc.xuehai.net

产业技术与信息

H B C C - 编译嚣的优化技巧 PA 1 L 8

■ M c o h p上海代表处 ir c i廖珍爱

M ir c i出的 P C1 c o hp推 I 8系列单片机由于采用改进型

2使用全局变量传递函数参数

当有足够的数据存储空间且该函数不可重载时,可使用全局变量传递函数参数,优化你的代码。因为全局变量编译时将分配固定地址,访问时将使用直接寻址方

的哈佛结构及优化的硬件结构,内含三个间接寻址寄存

器 F RO S和 F R, A和 RO空间都比较大, S、F R1 S2 R M M因此 P C1 I 8非常适合于采用 C语言进行软件设计。C语言 具有可读性强,便于移植等优点。虽然 MP AB— 8C语 L C1 言编译器的编译效率比较高,但与汇编语言相比,C的效率终究差一些,因此在某些应用场合,如何优化 C的效率, 减小代码,提高执行速度,是许多工程师们的追求目标。

式。例如调用 S b u 1子程序,可采用下面使用全局变量传

递函数参数的方法。

n i dc a s bl v r,u u sg e h u n r a ls bl v r; a2

_ _

vi sb (o ) od u l i; v d

下面介绍 MP AB— L C1 C编译器的一些优化技巧,与大家 vi anvi) 8 od i(o{ m d共享。 al; s bl v r=1 u

_

1使用静态型局部变量

a2; s bl v r=2 u

_

sb O ul;

局部变量的缺省存储类型为自动型,存取时使用软} 件堆栈,即使用直接寻址方式。如果声明为静态型,则替代如下传递函数参数的方法。 静态型局部变量编译时将分配固定地址,访问时将使用 vi ̄ lu s e h a1 sge h a2 o s ( i d cavr, i d a vr) d n g n r n u n cr直接寻址。显然,直接寻址比间接寻址存取速度快,占 vo anvi) idm i(od用的代码空间少。下面举例比较静态型与自动型局部变{

量生成汇编代码的差别。 源程序代码

v i sb (od{ od u l i) v sb (, u l1 ) 2}

当然也可以把

v r、v r明为静态型存储类型,达 a 1 a2声//静态型

/自动型//占用 5字/个

s t ni e a cl; t i us nd hroa1 ac g c l

n i d h o l u s e ca l a; n g r c2 l a+5 o l=; c1

到相同优化代码的目的。即: od s b (ttc u sg e v i u 1sai n in d

c a v r,tt n in dc a a2。 h r al s i u s e h r r) ac g v

l a+6 o 1=; c2

}

/仅占用3/个字

3使用合适的数据类型

MP AB C一 8支持的数据类型及占用的字节数如下: L 1

类型

n i dc a u sg e h n r sg e h i dc a n r u sg e t ni di n n

生成的汇编代码

M OVF POS N C,, TI 1F ACCES S M 0VLW X0 0 5 M 0VLB O XO

ADDW F L 1F, , BAN KED

最小值

0 一2 18 0

最大值字节数

2 5 5 17 2 6 53 5 56 1 1 2

sg e t i di n n

n i dsoto g u sg e h r ln n sg e hotln i ds r g n o n i dl g u sg e n n o sg e o g i dln n

2 6 37 8

0 -3 80 8 8 68 0

377 2 6

17 7 5 6 7 21 88 6 7 3 8 0 4 9 6 25 2 49 7 9

2

4 4 8

M OVF P TDEC,, OS 1F ACCES S M 0VLW X0 0 6 M 0VLB O XO M OVW F LOCA L1BAN KED ,

1 7 8 6 8 21 7 8 6 7 24 4 34 44 34 8

注意:①静态型局部变量将占用更多的数据存储器

为静态型。

不同数据类型占用的数据存储器字节数不同,因此

空间;②如果该函数是可重载的,则局部变量不能声明尽可能使用较短的数据类型。另外如果是无符号数,应

声明为无符号型。例如下例变量 i加一立即数,其中 i 、J

8丰.●奉▲田哪 6尊L入菇幢而冒 _ J

1-2144-png_6_0_0_0_0_892_1261_892.5_1261.5-1517-0-0-1517.jpg

这篇关于c18标准 改进 c语言,MPLAB-C18 C编译器的优化技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/172959

相关文章

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

游戏闪退弹窗提示找不到storm.dll文件怎么办? Stormdll文件损坏修复技巧

《游戏闪退弹窗提示找不到storm.dll文件怎么办?Stormdll文件损坏修复技巧》DLL文件丢失或损坏会导致软件无法正常运行,例如我们在电脑上运行软件或游戏时会得到以下提示:storm.dll... 很多玩家在打开游戏时,突然弹出“找不到storm.dll文件”的提示框,随后游戏直接闪退,这通常是由于

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态