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使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

Linux编译器--gcc/g++使用方式

《Linux编译器--gcc/g++使用方式》文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念... 目录一、预编译指令1.1预处理功能1.2指令1.3问题扩展二、编译(生成汇编)三、汇编(生成二进制机器语

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤