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

相关文章

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k