【技术大神】EFM32嵌入式软件的启动与停止

2019-07-30 技术大神活动文章

我最近在做一个低功耗传感器网络项目,其中用EFM32G890F128实现低功耗自组网协议。应用过程中每个节点都需要上级、同级和下级节点,由于网络情况的变化这些节点信息会频繁变化,所以把这些节点信息存储在RAM中。嵌入式软件异常复位之后,这些节点信息不会丢失,但系统帮我们直接初始化了这些数据,造成软件协议要进行重新的组网,这会造成很大的电池能量的消耗,所以需要对系统启动时的数据初始化部分进行一定的修改,保证在软件异常复位的时候,不进行数据初始化来节省功耗和时间。本文以IAR为例进行介绍,其它的IDE环境对EFM32的处理过程是类似的。


为了掌握系统的启动与停止代码首先要了解一个概念叫运行时环境(runtime environment),用一句话来概括它的意思就是在这个环境中运行所写的程序。运行时环境完成的主要功能包括:

1)C/C++标准库的接口和实现;

2)启动和停止代码;

3)底层的输入输出(I/O)接口;

4)通过固有函数(intrinsic functions)完成底层处理器指令;

5)外设单元寄存器和中断向量的头文件支持等等。


今天我们要谈的就是它的启动与停止代码都完成了什么功能。


首先我们谈谈系统的启动,在进入main函数之前系统执行了一个初始化的序列。这个序列完成了硬件和C/C++环境所需要的一些操作,现概括如下:
1)硬件初始化如下图:


当CPU复位之后,它从系统启动代码的__iar_program_start标号处开始执行程序。
初始化栈指针到CSTACK块的末尾。
如果用户定义了__low_level_init函数,那么该函数会被系统调用。这为对初始化的介入提供了机会。


我们可以参照系统提供的底层初始化文件low_level_init.c来完成__low_level_init函数的内容,但需要注意,由于系统的初始化这时还没有开始,所以那些静态初始化的变量内容还不能在这里使用。


2)C/C++初始化如下图:




初始化静态和全局变量。也就是说,那些以0值为初始值的变量内容会被系统清除,那些以非0值为初始值的变量内容会从ROM中拷贝到相应的位置。如果在硬件初始化过程中,用户提供的__low_level_init函数的返回值为0,那么将忽略这些静态和全局变量的初始化工作。
构造静态C++对象。
调用用户的main函数。


以上就是完整的EFM32的启动过程,接下来我们再谈谈系统的停止,应用程序能以2种方式来进行终止操作,第一种就是通过main函数的返回,第二种就是通过直接调用exit函数,以框图的方式表达如下:



C的标准要求这2种方法必须是等价的,因此系统遇到main函数返回的时候就直接调用exit函数来完成,传递给exit函数的参数就是main函数的返回值。


默认的exit函数是由C语言编写的。它调用一个很小的汇编语言函数_exit,这个汇编语言函数将完成以下功能:

1)C++静态和全局对象的析构;

2)关闭所有打开的文件;

3)调用__exit函数;

4)当程序执行到__exit函数的时候,停止系统的运行。


应用程序也可以通过调用abort或者_Exit函数来退出系统。abort函数仅仅是调用__exit函数来停止系统,不进行任何的清理工作。_Exit函数和abort函数是等价的,只是_Exit函数有一个退出状态的参数。


如果我们想在系统退出的时候做一些额外的工作,例如对系统进行复位,我们可以自己实现__exit(int)函数。


以上就是系统在启动与停止的时候为我们完成的工作,以及我们比较方便的介入点。对这些过程的理解能让我们更好的完成EFM32嵌入式代码。


作者:BYGT


看到这里您是否又有项目灵感需实现,点击下面开发软件帮你忙。

Silicon Labs Simplicity Studio平台开发工具

  • +1 赞 0
  • 收藏
  • 评论 1

相关服务

相关推荐

型号 描述 品质保证 价格(含增值税)

EFM32ZG110F32-QFN24

Silicon Labs

新款产品中尽量不要使用该元件

停产?

32位MCU

EFM32、 EFM32ZG、 EFM32ZG110、 EFM32ZG110F32、 EFM32 Zero Gecko Family系列

32k Flash, 4k RAM, ADC, AES

QFN24

最小包装量:1,000

世强先进(深圳)科技股份有限公司

原厂认证

世强代理

世强自营

一支起订

价格¥  8.4873

现货42,433

发货地广东

预计交期
1. 预计交期为预估时间,不含国家法定节假日,不作为订单或合同约定内容。
2. 受限于发货时间和商品物流运输时间。
3. 商品运输过程中如遇不可抗拒力因素,如地震、水灾、旱灾、疫情等,交期可能有所延长。

预计交期?

约3个工作日

32位MCU

EFM32 Zero Gecko、EFM32ZG、EFM32ZG110、EFM32ZG110F32、EFM32ZG110F32-B、EFM32ZG110F32-B-QFN24系列

ARM® Cortex®-M0+ Zero Gecko Microcontroller IC 32-Bit 24MHz 32KB Flash QFN24

QFN24

最小包装量:1,000

世强先进(深圳)科技股份有限公司

选型推荐

供货保障

原厂认证

世强代理

世强自营

一支起订

价格¥  8.4873

现货32,965

发货地广东

预计交期
1. 预计交期为预估时间,不含国家法定节假日,不作为订单或合同约定内容。
2. 受限于发货时间和商品物流运输时间。
3. 商品运输过程中如遇不可抗拒力因素,如地震、水灾、旱灾、疫情等,交期可能有所延长。

预计交期?

约3个工作日

32位MCU

EFM32 Zero Gecko、EFM32ZG、EFM32ZG210、EFM32ZG210F32、EFM32ZG210F32-B、EFM32ZG210F32-B-QFN32系列

ARM® Cortex®-M0+ Zero Gecko Microcontroller IC 32-Bit 24MHz 32KB Flash QFN32

QFN32

最小包装量:1,000

世强先进(深圳)科技股份有限公司

选型推荐

供货保障

原厂认证

世强代理

世强自营

一支起订

价格¥  10.7936

现货21,980

发货地广东

预计交期
1. 预计交期为预估时间,不含国家法定节假日,不作为订单或合同约定内容。
2. 受限于发货时间和商品物流运输时间。
3. 商品运输过程中如遇不可抗拒力因素,如地震、水灾、旱灾、疫情等,交期可能有所延长。

预计交期?

约3个工作日

32MCU

EFM32 Gecko、 EFM32G、 EFM32GG230系列

512k Flash, 128k RAM, AES

QFN64

最小包装量:1,000

世强先进(深圳)科技股份有限公司

选型推荐

供货保障

原厂认证

世强代理

世强自营

一支起订

价格¥  38.5617

现货10,000

发货地广东

预计交期
1. 预计交期为预估时间,不含国家法定节假日,不作为订单或合同约定内容。
2. 受限于发货时间和商品物流运输时间。
3. 商品运输过程中如遇不可抗拒力因素,如地震、水灾、旱灾、疫情等,交期可能有所延长。

预计交期?

约3个工作日

EFM32TG842F32-QFP64

Silicon Labs

新款产品中尽量不要使用该元件

停产?

32位MCU

EFM32 Tiny Gecko Family、 EFM32、 EFM32TG、 EFM32TG842、 EFM32TG842F32系列

32k Flash, 4k RAM, 8x18 LCD, AES, 3 Op-Amps

TQFN64

最小包装量:1,000

世强先进(深圳)科技股份有限公司

原厂认证

世强代理

世强自营

一支起订

价格¥  17.8971

现货10,000

发货地广东

预计交期
1. 预计交期为预估时间,不含国家法定节假日,不作为订单或合同约定内容。
2. 受限于发货时间和商品物流运输时间。
3. 商品运输过程中如遇不可抗拒力因素,如地震、水灾、旱灾、疫情等,交期可能有所延长。

预计交期?

约3个工作日

EFM32TG840F32-QFN64

Silicon Labs

新款产品中尽量不要使用该元件

停产?

32位MCU

EFM32 Tiny Gecko Family、 EFM32、 EFM32TG、 EFM32TG840、 EFM32TG840F32系列

32k Flash, 4k RAM, 8x20 LCD, AES, 3 Op-Amps

QFN64

最小包装量:1,000

世强先进(深圳)科技股份有限公司

原厂认证

世强代理

世强自营

一支起订

价格¥  17.8971

现货8,426

发货地广东

预计交期
1. 预计交期为预估时间,不含国家法定节假日,不作为订单或合同约定内容。
2. 受限于发货时间和商品物流运输时间。
3. 商品运输过程中如遇不可抗拒力因素,如地震、水灾、旱灾、疫情等,交期可能有所延长。

预计交期?

约3个工作日

32位MCU

EFM32 Gecko、 EFM32G、 EFM32G890系列

128k Flash, 16k RAM, 4x40 LCD, AES.

BGA112

最小包装量:168

世强先进(深圳)科技股份有限公司

折扣优惠

原厂认证

世强代理

世强自营

一支起订

限量折扣(168PCS)

价格¥  17.7387

现货168

发货地广东

预计交期
1. 预计交期为预估时间,不含国家法定节假日,不作为订单或合同约定内容。
2. 受限于发货时间和商品物流运输时间。
3. 商品运输过程中如遇不可抗拒力因素,如地震、水灾、旱灾、疫情等,交期可能有所延长。

预计交期?

约3个工作日

32 bit MCU

EFM32 Gecko、 EFM32G、 EFM32GG230系列

1024k Flash, 128k RAM, AES

QFN64

最小包装量:260

世强先进(深圳)科技股份有限公司

折扣优惠

供货保障

原厂认证

世强代理

世强自营

一支起订

限量折扣(129PCS)

价格¥  34.0426

现货119

发货地广东

预计交期
1. 预计交期为预估时间,不含国家法定节假日,不作为订单或合同约定内容。
2. 受限于发货时间和商品物流运输时间。
3. 商品运输过程中如遇不可抗拒力因素,如地震、水灾、旱灾、疫情等,交期可能有所延长。

预计交期?

约3个工作日

32位MCU

EFM32 Gecko、 EFM32G、 EFM32G890系列

128k Flash, 16k RAM, 4x40 LCD, AES

BGA112

最小包装量:1,000

世强先进(深圳)科技股份有限公司

供货保障

原厂认证

世强代理

世强自营

一支起订

价格¥  25.0928

即将到货1,000

发货地广东

32位MCU

EFM32 Gecko、 EFM32G、 EFM32G232系列

128k Flash, 16k RAM, AES

TQFP64

最小包装量:1,000

世强先进(深圳)科技股份有限公司

选型推荐

供货保障

原厂认证

世强代理

世强自营

一支起订

价格¥  20.7569

即将到货1,000

发货地广东

本网站所有内容禁止转载,否则追究法律责任!

评论(1

   |   

提交评论

全部评论

  • terrydl Lv8. 研究员 2018-03-13
    看看
没有更多评论了

联系我们

400-887-3266(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

搞研发 找元件
下载世强硬创电商APP