【经验】如何优化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系列芯片设计出稳定的优质产品。
一文教你解决EFM32 32位低功耗单片机EM2模式唤醒时会复位问题
Silicon Labs 32位低功耗单片机EFM32系列,其优越的低功耗特性,被广泛应用于电池供电产品中,如智能锁、无线探测器、IoT传感器等等。最近有工程师反应,使用EFM32LG系列32位单片机开发时,遇到从EM2模式唤醒设备后芯片就会复位的问题。如果设备主频配置成外部时钟源HFXO时,EM2模式唤醒后芯片就会复位,而主频选择内部HFRCO的话,则可以正常唤醒,不会复位。本文讲述其解决办法。
【经验】如何计算8位单片机EFM8LB系列PWM最高输出频率?
在电机驱动、电源发生、可调电压发生等应用中,经常需要PWM波,Silicon Labs推出的高性能、高集成度、小体积、高性价比的EFM8LB系列8位单片机,可广泛应用光模块、电机控制等领域,它支持输出PWM波。本文将详细讲解如何计算EFM8LB系列8位单片机PWM最高输出频率。
SILICON LABS 8-bit Microcontroller选型表
SILICON LABS 8位MCU选型,MCU Core 8051,频率20MHz~100MHz,Flash存储2kB~120kB,RAM存储0.25kB~8kB。
产品型号
|
品类
|
系列
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
Dig I/O Pins
|
ADC 1
|
Temp Sensor
|
Timers (16-bit)
|
PCA Channels
|
DAC
|
Comparators
|
UART
|
SPI
|
I2C
|
HS I2C Slave
|
EMIF
|
CAN
|
LIN
|
VREF
|
Debug Interface
|
C8051F392-A-GM
|
8位MCU
|
C8051F39x Small Form Factor
|
50
|
16
|
1
|
1.8
|
3.6
|
QFN20
|
4x4
|
±2
|
17
|
10-bit, 16-ch., 500 ksps
|
Temp Sensor
|
6
|
3
|
10-bit, 2-ch.
|
1
|
1
|
1
|
2
|
0
|
0
|
0
|
0
|
VREF
|
C2
|
选型表 - SILICON LABS 立即选型
【经验】如何基于SMBus接口让8位单片机EFM8实现bootloader操作?
Silicon Labs推出的8位单片机EFM8,具有模拟性能好、集成度高、运行速度快、体积小巧等优点,被广泛应用在光模块、电机控制、智能家居等领域。它还支持bootloader功能,而且出厂芯片即可自带boot代码(基于UART的,或基于SMBus的,根据型号而定)。那么在实际操作中,对于EFM8,在实现Bootloader时具体操作步骤是怎样的呢?本文将详细为你解读。
【应用】芯科低功耗8位单片机助力于轨交通讯视频控制系统设计,睡眠电流低至50nA,唤醒时间小于2μs
轨交通讯视频控制系统中通常需要一款超低功耗的MCU作为主控,本文推荐Silicon Labs的8位单片机EFM8SB10F8G-A-QFN24作为主控方案,助力于轨交通讯视频控制系统的应用与设计。
Silicon Labs 8位单片机EFM8BB31 SPI通信调试注意事项
Silicon Labs EFM8BB31是一款资源丰富,高效率,小体积的8位单片机,已被许多用户选用,被广泛应用于消费电子,精密仪器,电源管理,工业控制自动化,智能传感器,汽车控制,安防监控等领域。在开发过程中,经常使用到SPI通信,EFM8BB31支持3线或4线模式的SPI主模式和从模式,在调试SPI通信的过程,有哪些注意事项呢?本文将详细介绍。
【经验】如何让支持SMBus boot功能的8位单片机EFM8进入boot模式?
Bootloader操作带来的好处很明显,即可以在不需要烧录器的情况下,实现代码更新,甚至,基于Bootloader功能,还可以实现远程代码升级。 在实际操作中,对于很有意义的、原厂自带了基于SMBus接口的boot代码的EFM8,如何进入boot模式、从而实现代码更新呢?本文将详细为你解读三种进入boot的模式。
【经验】Silicon Labs 8位单片机C8051F80x上电爬升慢引起程序不启动的解决办法
Silicon Labs 8位单片机C8051F80x系列,支持按钮、滑动器、齿轮和电容接近感应功能。在仪表板、触摸屏、工业接口、家用电器、玩具等应用上还有使用。本文介绍当电源的启动时间慢,导致VDD上电爬升时间大于1ms处理方法。
【经验】8位单片机EFM8LB在光模块应用中硬件电路设计注意事项
Silicon Labs推出的8位单片机EFM8LB,为方便光模块工程师快速掌握EFM8LB设计要点、少走弯路,本文以带调顶功能的25G SFP28 LANWDM为例,详细总结了与EFM8LB相关的硬件设计注意事项,可供大家参考。
【经验】8位单片机EFM8BB21F16G在通过串口bootloader升级遇到的问题及解决方法
Silicon Labs的8位单片机EFM8系列在出厂的时候是芯片的最后一个扇区是有引导程序的,对用户的生产带来了很大便利,可以不通过调试器而是直接通过串口或IIC方式下载程序,依据出厂自带引导程序的类型。本文以EFM8BB21F16G为例进行介绍。
【经验】解析Silicon Labs的8位单片机EFM8SB10休眠时如何处理GPIO口降低功耗
Silicon Labs的8位单片机EFM8SB10采用C8051内核,主频25MHz,集成12BIT的ADC、模拟比较器、触摸按键、UART、SPI、I2C等功能,休眠功耗低至50nA。本文将介绍EFM8SB10休眠时如何处理GPIO口降低功耗。
【经验】如何基于simplicity studio创建8位单片机EFM8的静态库?
Silicon Labs EFM8系列8位单片机,具有速度快、体积小、集成度等优势,被广泛应用在通信、工业控制、智能家居等领域,深受广大工程师好评。 现实中,软件工程师在开发代码时,往往会有不方便提供源代码、只能使用库文件的情形。本文将详细讲解如何基于simplicity studio制作“静态链接库”,以满足大家制作库文件的需求。
8位单片机EFM8系列中芯片上的UID是什么?
UID是芯片中新加的全球唯一ID,即每个芯片的ID都是不一样的,EFM8系列的MCU上都包含此ID。有两类获取UID的方式,一种通过读取RAM的特定地址获得,一种通过读取Flash的特定地址获得。在早期引入此ID的MCU上(比如EFM8BB1/SB1/SB2)这个ID为32位,在芯片复位时(PC指针被复位至0之前)被复制至RAM中特定位置,用户程序可以读取其值。此位置的RAM仍然可以由用户使用。需要注意的是如果此位置被编译器分配了变量,那么当函数执行至main()时此位置的内容会被初始化代码覆盖。EFM8UB2的UID也是此类,但其位数为128位。在新的EFM8系列MCU上(比如EFM8BB3/LB1/UB1),UID位数为128位,存储在Flash上。
【经验】低成本8位单片机EFM8BB21在25G SFP28 LR光模块应用中的硬件电路设计注意事项
Silicon Labs推出的EFM8BB21系列8位单片机,具有高速度、高模拟性能、高集成度、小体积、低成本等优点,被广泛应用于光通信、工业控制等领域。本文将详细介绍在25G SFP28 LR光模块应用中EFM8BB21的硬件电路设计注意事项。
电子商城
现货市场
服务
可定制电感最大电流100A,尺寸最小7 x 7 x 3.0mm到最大35 x 34 x 15.5 mm,工作频率100KHZ ~ 2MHZ,感值范围:0.15 ~ 100uh;支持大功率电感,扁平线电感,大电流电感,高频电感,汽车电感器,车规电感,一体成型电感等定制。
最小起订量: 5000 提交需求>
可定制变压器支持60W-600W范围,额定电流最高10A,漏感稳定度最小3%;支持开关变压器、电流感测变压器、栅极驱动变压器、LLC谐振变压器、PoE变压器等产品定制。SPQ为5K。
提交需求>
登录 | 立即注册
提交评论