Microchip推出的PIC18系列单片机由于采用改进型的哈佛结构及优化的硬件结构,内含三个间接寻址寄存器FSR0、FSR1和FSR2, RAM 和ROM 空间都比较大, 因此PIC18非常适合于采用C语言进行软件设计。C语言具有可读性强, 便于移植等优点。 《MPLAB-C18 C编译器的优化技巧》 在Microchip的PIC18系列单片机中,由于其独特的改进型哈佛结构和优化的硬件设计,包含FSR0、FSR1和FSR2这三个间接寻址寄存器,以及较大的RAM和ROM空间,使得它成为C语言编程的理想平台。C语言以其高度的可读性、可移植性和丰富的库函数,广泛应用于嵌入式系统开发。然而,尽管MPLAB-C18 C编译器的编译效率较高,但在某些对性能要求严格的场景下,我们仍需要进一步优化代码以提高执行速度和减小代码体积。 我们可以利用静态型局部变量来提升效率。默认情况下,局部变量是自动类型的,它们的存取依赖于软件堆栈,采用间接寻址。如果声明为静态型,编译器会为它们分配固定的内存地址,这样在访问时可以直接寻址,从而加快速度并减少代码空间。例如,在函数`sub1()`中,静态型变量`local1`的加法操作只需5个字,而自动型变量`local2`则需要3个字。需要注意的是,静态型变量会占用更多的数据存储器空间,并且在可重载函数中不宜使用。 全局变量可以用于传递函数参数,尤其是在数据存储空间充足且函数不被重载的情况下。全局变量在编译时会分配固定地址,直接寻址方式能提升执行效率。例如,我们可以通过定义全局变量`sub1_var1`和`sub1_var2`,并在`main()`函数中赋值,然后调用`sub1()`,而不是直接在函数调用中传递参数。 此外,选择合适的数据类型也是优化的关键。MPLAB-C18支持多种数据类型,包括`unsigned char`、`signed char`、`unsigned int`、`signed int`等。根据实际需求选择最小的数据类型,可以节省存储空间。例如,对于无符号数,应使用`unsigned`类型,避免使用更大的数据类型。在下面的示例中,`int`类型的变量`i`和`unsigned char`类型的变量`j`分别加5和6,`j`的代码量更小,因为它的数据类型占用的字节数较少。 合理地将变量分配到ACCESS RAM区域可以显著提高访问速度。ACCESS RAM是BANK0的前128字节和BANK15的后128字节,访问这部分内存不需要选择BANK,可以快速存取。通过`#pragma udata access`指令,我们可以将变量放在ACCESS RAM区,从而提高存取效率。 通过上述优化技巧,我们可以有效提升MPLAB-C18 C编译器生成代码的效率和紧凑性。这包括使用静态型局部变量,利用全局变量传递参数,选择合适的数据类型,以及将变量置于ACCESS RAM区。这些方法有助于在保持代码可读性和可维护性的基础上,最大化地挖掘PIC18单片机的性能潜力。在实际开发中,应根据项目需求灵活运用这些技巧,以实现最佳的代码优化效果。
- 粉丝: 6
- 资源: 956
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- json的合法基色来自红包东i请各位
- 项目采用YOLO V4算法模型进行目标检测,使用Deep SORT目标跟踪算法 .zip
- 针对实时视频流和静态图像实现的对象检测和跟踪算法 .zip
- 部署 yolox 算法使用 deepstream.zip
- 基于webmagic、springboot和mybatis的MagicToe Java爬虫设计源码
- 通过实时流协议 (RTSP) 使用 Yolo、OpenCV 和 Python 进行深度学习的对象检测.zip
- 基于Python和HTML的tb商品列表查询分析设计源码
- 基于国民技术RT-THREAD的MULTInstrument多功能电子测量仪器设计源码
- 基于Java技术的网络报修平台后端设计源码
- 基于Python的美食杰中华菜系数据挖掘与分析设计源码