【经验】如何优化8位单片机EFM8LB的数据存储空间?
在单片机有限的存储资源下,能够最大限度地执行更加复杂的任务,是我们软件“攻城狮”们所追求的,这其中,最重要的一块,会涉及到数据存储空间优化。本文将同你一起探讨具体数据存储空间优化。
世界知名精密混合信号器件方案提供商SILICON LABS推出8位EFM8LB系列单片机,具有速度高、模拟性能好、通信接口丰富、封装体积小等优势,被广泛应用在光通信、工业控制、IoT等领域。如下图1、2,它的RAM空间最大是(4096+256)Byte。我们就以它为例,来讲数据存储空间优化方法。
图1 片上内部存储器(直接/间接访问)
图2 片上外部数据存储器XRAM
方法1:顶层规则。
对于EFM8LB单片机,在变量存储上,它采用的是RAM+XRAM结构,前者速度快但空间小,后者慢但空间大。因此,建议使用small模式,但在具体定义变量时候,对于速度要求不高的变量,一律指定到XRAM空间。比如: unsigned char xdata temp_8; 将变量定义到了XDATA空间。
方法2:当FLASH空间富裕时,能放在CODE中的变量,尽量放在CODE中
比如,在光模块配置参数上,有的软件工程师会将它放到XRAM中,这样会占用较多的变量空间,但事实上,这些配置参数会很少变动,可以放到FLASH中,不仅能节省变量空间,而且,还有掉电保存功能。
方法3:避免使用大的结构体。
对于熟悉ARM编程的人都知道,在ARM编程中,外设配置上,一般都采用结构体的方式,它的好处是,一个结构体囊括了所有相关寄存器,但缺点是,非常占用变量空间,因此,对于8位机EFM8LB编程来说,尽量使用小的变量体,可以节省变量空间。
方法4:使用尽量小的数据类型
能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变量就不要用长整型(long int),能不使用浮点型(float)变量就不要使用浮点型变量。当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值,C 编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。
方法5:提高内存的重复利用率
局部变量不分配固定空间,而全局变量需要分配固定存储空间。因此,尽可能的利用局部变量,局部变量还有个好处是访问速度比较快。由前面的例子可以看出,局部变量 i, j 是没有单独占用内存的子程序中使用内存数目不大的变量尽量定义为局部变量
方法6:尽量控制函数调用深度及中断嵌套深度
当函数调用或中断嵌套时,前一级函数的局部变量是不会释放掉的,如果级数过多,会导致RAM占用过多,甚至有变量溢出的危险。因此,要尽量控制函数调用深度及中断嵌套深度。
方法7:尽量使用无符号类型变量
8051 系列本身不支持符号数,需要外加库来处理符号数,一是大大降低程序运行效率,二是需要额外的内存。因此,尽量使用无符号类型变量。
综上述,这些方法是优化变量存储空间的常用方法,供大家参考。当然,可能还有其他的变量优化方法,如果有,欢迎大家分享。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由风起云扬提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】8位单片机EFM8系列的SFR Page操作
Silicon Labs的8位单片机EFM8系列,集成丰富的外设,高性能,小封装。软件开发时,由于外设多,寄存器操作引入了SFR Page机制,注意SFR Page设置,防止程序错误,让EFM8系列芯片设计出稳定的优质产品。
设计经验 发布时间 : 2019-04-17
一文教你解决EFM32 32位低功耗单片机EM2模式唤醒时会复位问题
Silicon Labs 32位低功耗单片机EFM32系列,其优越的低功耗特性,被广泛应用于电池供电产品中,如智能锁、无线探测器、IoT传感器等等。最近有工程师反应,使用EFM32LG系列32位单片机开发时,遇到从EM2模式唤醒设备后芯片就会复位的问题。如果设备主频配置成外部时钟源HFXO时,EM2模式唤醒后芯片就会复位,而主频选择内部HFRCO的话,则可以正常唤醒,不会复位。本文讲述其解决办法。
设计经验 发布时间 : 2018-06-15
【经验】如何计算8位单片机EFM8LB系列PWM最高输出频率?
在电机驱动、电源发生、可调电压发生等应用中,经常需要PWM波,Silicon Labs推出的高性能、高集成度、小体积、高性价比的EFM8LB系列8位单片机,可广泛应用光模块、电机控制等领域,它支持输出PWM波。本文将详细讲解如何计算EFM8LB系列8位单片机PWM最高输出频率。
设计经验 发布时间 : 2020-02-05
【应用】芯科低功耗8位单片机助力于轨交通讯视频控制系统设计,睡眠电流低至50nA,唤醒时间小于2μs
轨交通讯视频控制系统中通常需要一款超低功耗的MCU作为主控,本文推荐Silicon Labs的8位单片机EFM8SB10F8G-A-QFN24作为主控方案,助力于轨交通讯视频控制系统的应用与设计。
应用方案 发布时间 : 2022-09-27
【经验】如何给Silicon Labs的集成开发环境IDE指定工具链?
Silicon Labs的集成开发环境IDE简单强大,是C8051F及EFM8等8位单片机软件开发的优秀武器。最近有客户问, 如何给Silicon Labs集成开发环境IDE指定工具链?本文总结了2个方法来解决这个问题。
设计经验 发布时间 : 2020-09-29
【经验】Silicon Labs 8位单片机C8051F80x上电爬升慢引起程序不启动的解决办法
Silicon Labs 8位单片机C8051F80x系列,支持按钮、滑动器、齿轮和电容接近感应功能。在仪表板、触摸屏、工业接口、家用电器、玩具等应用上还有使用。本文介绍当电源的启动时间慢,导致VDD上电爬升时间大于1ms处理方法。
设计经验 发布时间 : 2022-07-16
【经验】对EFM8系列8位单片机可编程逻辑单元CLU的作用及应用的理解
Silicon Labs的EFM8系列8位单片机,集成了独特数字外设可编程逻辑单元CLU,让EFM8单片机的功能更加强大。那么,这个CLU的作用及应用是什么呢?本文将详细为你解读。
设计经验 发布时间 : 2019-08-21
【经验】如何基于SMBus接口让8位单片机EFM8实现bootloader操作?
Silicon Labs推出的8位单片机EFM8,具有模拟性能好、集成度高、运行速度快、体积小巧等优点,被广泛应用在光模块、电机控制、智能家居等领域。它还支持bootloader功能,而且出厂芯片即可自带boot代码(基于UART的,或基于SMBus的,根据型号而定)。那么在实际操作中,对于EFM8,在实现Bootloader时具体操作步骤是怎样的呢?本文将详细为你解读。
设计经验 发布时间 : 2019-09-29
【经验】解析Silicon Labs的8位单片机EFM8SB10休眠时如何处理GPIO口降低功耗
Silicon Labs的8位单片机EFM8SB10采用C8051内核,主频25MHz,集成12BIT的ADC、模拟比较器、触摸按键、UART、SPI、I2C等功能,休眠功耗低至50nA。本文将介绍EFM8SB10休眠时如何处理GPIO口降低功耗。
设计经验 发布时间 : 2022-04-14
【经验】如何通过解读M51文件确定EFM8系列的变量、函数定位?
Silicon Labs推出的EFM8系列8位单片机具有集成度高、速度高、体积小等优点,最近有使用的软件工程师询问笔者 “我的变量放哪里了?我的代码是如何分配的?”等问题,本文特做总结:通过解读M51文件确定EFM8系列的变量和函数定位。
设计经验 发布时间 : 2021-04-14
【经验】8位单片机EFM8的Boot代码放置模式及其特点
Silicon Labs 8位单片机EFM8支持Boot功能,通过该功能,可以使EFM8摆脱调试器进行代码下载,甚至可以实现远程代码升级等,这给单片机代码更新带来了极大的方便。而Boot在FLASH中的放置,对Boot实现具有重要影响,本文将详细为你解读Boot代码放置模式及其特点。
设计经验 发布时间 : 2019-07-05
【应用】芯科科技的超低功耗32位单片机助力物联网燃气表,降低电池成本
Silicon Labs32位单片机EFM32TG11B520F128GM80,具有优秀的系统低功耗特性,在同等使用时间长度内,可大大减少燃气表配套锂电容量、降低配套电池所需成本,再加之它集成了丰富的片上资源,非常适宜用于物联网燃气表。
应用方案 发布时间 : 2021-07-06
【经验】如何让支持SMBus boot功能的8位单片机EFM8进入boot模式?
Bootloader操作带来的好处很明显,即可以在不需要烧录器的情况下,实现代码更新,甚至,基于Bootloader功能,还可以实现远程代码升级。 在实际操作中,对于很有意义的、原厂自带了基于SMBus接口的boot代码的EFM8,如何进入boot模式、从而实现代码更新呢?本文将详细为你解读三种进入boot的模式。
设计经验 发布时间 : 2019-09-27
Silicon Labs 8位单片机EFM8BB31 SPI通信调试注意事项
Silicon Labs EFM8BB31是一款资源丰富,高效率,小体积的8位单片机,已被许多用户选用,被广泛应用于消费电子,精密仪器,电源管理,工业控制自动化,智能传感器,汽车控制,安防监控等领域。在开发过程中,经常使用到SPI通信,EFM8BB31支持3线或4线模式的SPI主模式和从模式,在调试SPI通信的过程,有哪些注意事项呢?本文将详细介绍。
设计经验 发布时间 : 2019-04-10
【经验】低成本8位单片机EFM8BB21在25G SFP28 LR光模块应用中的硬件电路设计注意事项
Silicon Labs推出的EFM8BB21系列8位单片机,具有高速度、高模拟性能、高集成度、小体积、低成本等优点,被广泛应用于光通信、工业控制等领域。本文将详细介绍在25G SFP28 LR光模块应用中EFM8BB21的硬件电路设计注意事项。
设计经验 发布时间 : 2021-03-28
电子商城
现货市场
服务
提供全面表征产品器件耗电特征及功耗波形、快速瞬态效应、电源优化、表征和仿真测试服务,使用直流电源分析仪测量精度达50µV,8nA,波形发生器带宽100kHz,输出功率300W,示波器200kHz,512 kpts
实验室地址: 深圳/苏州 提交需求>
可定制变压器支持60W-600W范围,额定电流最高10A,漏感稳定度最小3%;支持开关变压器、电流感测变压器、栅极驱动变压器、LLC谐振变压器、PoE变压器等产品定制。SPQ为5K。
提交需求>
登录 | 立即注册
提交评论