【经验】使用8位MCU EFM8系列时如何避免堆栈溢出引起的程序错误?

2019-10-15 原创
8位MCU,8位单片机,EFM8,EFM8BB2 8位MCU,8位单片机,EFM8,EFM8BB2 8位MCU,8位单片机,EFM8,EFM8BB2 8位MCU,8位单片机,EFM8,EFM8BB2

SILICON LABS 创新型8位MCU EFM8系列提供完全集成的体验,非常适合物联网应用,提供了业界最快的速度和最低的功耗,使用增强型8051内核,集成UART、SPI、SMBUS、ADC等丰富外设。

 

当前单片机早已发展到了32位的时代,但是更先进更快的单片机出现并没有完全取代8位单片机,因为在很多的应用场合并不需要更快的速度、更大的存储空间,这个时候8位单片机就会在性价比上有很大的优势,但是8位机的资源往往很有限,RAM非常小,以Silicon Labs的EFM8BB2系列为例,采用了增强型的51内核,其标准的8051 RAM只有256Byte,这256个Byte有一部分还要留给堆栈空间使用。

 

我们在使用EFM8开发的时候,随着代码量的逐渐增加,有时候会突然发现程序不能正常运行了,给人的感觉往往是刚刚还正常,怎么突然debug就出问题了。表现形式包括但不限于

 

1、 循环进入后无法跳出,循环变量在几个值之间一直循环。

2、 总是出现看门狗复位。

3、 有些代码位置附近出现Flash Error Reset。

4、 有些变量的值明明没有操作却改变了。

5、 程序跑飞了。

 

当出现这些问题的时候,往往是由于堆栈溢出导致的。当我们把大量的全局变量、局部变量放入到RAM中的时候,堆栈能够使用的空间就会一点点被压缩,直至产生溢出,导致各种意想不到的错误。

 

为了避免堆栈溢出,可以将全局变量、局部变量放到XRAM中,以EFM8BB2系列为例,XRAM的空间为2048个Byte。如果工程的Memory model设置为Small,变量定义如不加特别修饰,会默认放在DATA空间中

unsigned char a;    //变量a放到DATA空间中,即放到了RAM中

那如果我们这种情况下想把a变量放入到XRAM中,则要进行如下定义

unsigned char xdata a;  //变量a放到XDATA中,即放到了XRAM中

 

如果工程的Memory model设置为Large模式,则变量定义如不加任何修饰,会默认放在XDATA空间

unsigned char a;  //变量a放到XDATA中,即放到了XRAM中

这种情况下如果想把a放入到DATA空间中,则要进行如下定义

unsigned char data a;  //变量a放到DATA中,即放到了RAM中

 

Memory model的设置位置如下图所示。


 

将变量放在DATA和XDATA中,会在程序运行速度上有所区别。变量放到XDATA中会使编译出来的程序略大于放到DATA中,在程序的执行速度上会稍慢于放到DATA中。变量具体放到什么位置需要根据具体的项目做综合的权衡。

 

在程序编写时,还要尽量减少函数的嵌套,因为函数嵌套会增大堆栈空间的开销。

 

笔者通过一个小程序对比了将变量放入到DATA与XDATA中程序执行时间的差别,供读者参考。程序主要是对数组Uart_Data[90]进行初始化赋值,并通过串口发送出去。在代码执行开始和结束的地方对P0.0口进行了电平翻转,以便通过逻辑分析仪抓取获得程序执行时间。

 

代码如下:

 

变量放在DATA中的程序运行时间如下: 


变量放在XDATA中的程序运行时间如下: 


从图中我们可以看到执行时间分别为7.676ms和8.394ms。


授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 0

本文由黄昏提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。

评论

   |   

提交评论

全部评论(0

暂无评论

相关推荐

【经验】8位单片机EFM8BB21 串口UART1的配置与调试

UART是单片机中经常要使用到的外设, Silicon Labs EFM8BB21系列8位单片机中有两个UART,分别UART0和UART1,本片文章主要介绍UART1的配置与调试。使用芯科官方推出的开发软件Simplicity Studio配置工具可以很方便的进行寄存器的初始化配置,省去了繁杂的计算。

设计经验    发布时间 : 2019-07-24

【经验】Silicon Labs 8位单片机EFM8BB21 GPIO输出配置与调试

Silicon Labs 创新型8位MCU提供完全集成的体验,非常适合物联网应用,提供了也接最快的速度和最低的功耗,同时EFM8系列车用8位MCU为当前市场上最具价值、最灵活和集成度更高的车载MCU。 GPIO为单片机中最常使用的功能,本文将以P0.0端口为例分享EFM8BB21的GPIO输出配置与调试。

设计经验    发布时间 : 2019-07-14

简单至关重要:为何8位MCU将持续发展?

几十年来,8位MCU一直是无数嵌入式应用的主力,尤其是消费产品和医疗器械中的应用。简单、有效的8位MCU在推动智能物联网产品的发展中发挥了核心作用。虽然其后代的功能(如32位和无线MCU)继续领先,但对于广泛的应用来说,8位MCU的普及和偏好没有放缓的迹象。

设计经验    发布时间 : 2023-11-22

【经验】8位单片机EFM8系列中通过官方配置工具快速进行寄存器的初始化配置并进行SPI调试的步骤说明

Silicon Labs创新型8位MCU EFM8系列提供完全集成的体验,非常适合物联网应用,提供了业界最快的速度和最低的功耗,使用增强型8051内核,集成UART、SPI、SMBUS、ADC等丰富外设。本文主要介绍通过Simplicity Studio配置工具快速进行寄存器的初始化配置并进行SPI调试的方法,方便刚刚接触到EFM8 MCU的用户快速上手。

设计经验    发布时间 : 2019-09-30

【经验】一文教你如何快速搭建8位MCU EFM8开发环境

Silicon Labs(芯科科技)在本文讲述如何快速搭建8位MCU EFM8开发环境,帮助行业人士深入掌握EFM8 8位MCU的开发及应用技巧。

设计经验    发布时间 : 2019-01-27

【IC】芯科推出新型8位MCU BB5x系列,边长范围2毫米~5毫米,高性能内核助力行业极小微型设备开发

芯科科技日前推出新型EFM8 BB50微控制器(MCU),这是专为极小型物联网(IoT)设备打造的产品,可以提高设计灵活性,同时降低成本和复杂性。全新的BB50 MCU也进一步扩展了Silicon Labs的EFM8 BB5 8位MCU产品系列,为嵌入式应用开发人员提供了更多选择。

新产品    发布时间 : 2023-03-17

【经验】8位单片机EFM8BB21 Timer0定时器配置与调试

Silicon Labs EFM8BB21系列8位MCU包含5个定时器,Timer0、Timer1、Timer2、Timer3、Timer4,Timer0和Timer1与标准的8051的计数器/定时器兼容。本文将分享Timer0的16位定时器功能的配置与调试,使用Simplicity Studio的配置工具可以方便的配置寄存器的参数,较之前需要自己手动计算相比,大大提高了便捷性和准确性。

设计经验    发布时间 : 2019-07-13

【经验】如何进行8位单片机EFM8BB21开发环境搭建与新建工程

Silicon Labs官方提供了带有集成式IDE的免费Simplicity Studio、不限代码长度的免费Keil编译器、演示、库与示例代码。本文将介绍如何进行8位MCU EFM8BB21开发环境的搭建与新建工程。

设计经验    发布时间 : 2019-07-10

【应用】找水仪项目选用芯科科技8位MCU C8051F340,带有USB控制器,开发简单,提供案例程序

找水仪项目,使用芯科C8051F340的8位MCU,带有USB控制器,专用开发环境,以及接口协议的案例,减少开发难度,降低开发成本。USB控制全速12Mbps,速率相对比较快,加快信息上传;外设接口多,便于添加外设。

应用方案    发布时间 : 2022-12-15

【经验】PCB布线技巧:8位单片机端口Crossbar功能的使用及配置

如果单片机自带Crossbar功能,只要软件配置调整一下各端口功能,PCB布线就会畅通。

设计经验    发布时间 : 2017-08-09

【经验】如何基于8位单片机EFM8SB10实现高可靠性容性触摸按键硬件电路设计?

Silicon Labs 8位单片机EFM8SB10系列,支持容性触摸功能,并以其精度高、功耗低、成本低等特点,被广泛应用在显示屏按键输入、油烟机面板、灶台面板等产品上。 然而,为了保证产品的可靠性及长久性,在硬件电路设计上,需要有多项注意事项,本文将带你详细了解这些内容。

设计经验    发布时间 : 2019-01-01

【应用】芯科科技高性能8位单片机EFM8BB31F32G用于音频放大器,集成多达四个12位DAC

本文介绍Silicon Labs 8位单片机EFM8BB31F16G-D-QFN24R用于音频放大器,优势:最高工作频率50MHz,稳定性好;集成一个12位ADC、四个具备同步和PWM功能的12位DAC;FLASH从16KB~64KB可选等。

应用方案    发布时间 : 2022-09-20

【经验】8位单片机EFM8BB21F16G在通过串口bootloader升级遇到的问题及解决方法

Silicon Labs的8位单片机EFM8系列在出厂的时候是芯片的最后一个扇区是有引导程序的,对用户的生产带来了很大便利,可以不通过调试器而是直接通过串口或IIC方式下载程序,依据出厂自带引导程序的类型。本文以EFM8BB21F16G为例进行介绍。

设计经验    发布时间 : 2019-03-25

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上。

技术问答    发布时间 : 2017-05-05

【应用】Silicon Labs高性能8位单片机EFM8BB10适用于智能小车,主频可达25MHz

智能小车可以按照预先设定的模式在一个环境里自主的运行,不需要人为操作,具有自动循迹、避障、转弯等功能。本文将详细介绍Silicon Labs 8位单片机EFM8BB10在智能小车上的应用优势。

应用方案    发布时间 : 2020-11-29

展开更多

电子商城

查看更多

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥3.5305

现货: 70,617

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥3.9026

现货: 68,455

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥12.9143

现货: 93,258

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥5.0172

现货: 67,905

品牌:SILICON LABS

品类:8位MCU

价格:¥5.8534

现货: 60,760

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥4.3667

现货: 28,941

品牌:SILICON LABS

品类:8位MCU

价格:¥4.4595

现货: 27,540

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥9.2911

现货: 23,898

品牌:SILICON LABS

品类:8位MCU

价格:¥8.1764

现货: 22,497

品牌:SILICON LABS

品类:8位MCU

价格:¥28.8021

现货: 20,099

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:SILICON LABS

品类:8位MCU

价格:¥4.9000

现货:12,000

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥3.7900

现货:3,451

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥10.1700

现货:10,000

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥11.1200

现货:1,201

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥16.8500

现货:550

品牌:SILICON LABS

品类:8位MCU

价格:¥56.0000

现货:550

品牌:SILICON LABS

品类:8位MCU

价格:¥5.1900

现货:396

品牌:SILICON LABS

品类:8位MCU

价格:¥39.8000

现货:266

品牌:RENESAS

品类:microcontroller

价格:¥2.8532

现货:188,410

品牌:RENESAS

品类:microcontroller

价格:¥32.9564

现货:40,179

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

服务

查看更多

TFT LCD液晶显示屏/模组定制

可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。

最小起订量: 1000 提交需求>

MCU烧录/Flash烧录/CPLD烧录

可烧录IC封装SOP/MSOP/SSOP/TSOP/TSSOP/PLCC/QFP/QFN/MLP/MLF/BGA/CSP/SOT/DFN;IC包装Tray/Tube/Tape;IC厂商不限,交期1-3天。支持IC测试(FT/SLT),管装、托盘装、卷带装包装转换,IC打印标记加工。

最小起订量: 1pcs 提交需求>

查看更多

授权代理品牌:接插件及结构件

查看更多

授权代理品牌:部件、组件及配件

查看更多

授权代理品牌:电源及模块

查看更多

授权代理品牌:电子材料

查看更多

授权代理品牌:仪器仪表及测试配组件

查看更多

授权代理品牌:电工工具及材料

查看更多

授权代理品牌:机械电子元件

查看更多

授权代理品牌:加工与定制

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面