首页 » 智能 » 聊一聊物联网嵌入式芯片的内容结构_存储器_内存

聊一聊物联网嵌入式芯片的内容结构_存储器_内存

少女玫瑰心 2025-01-10 14:57:42 0

扫一扫用手机浏览

文章目录 [+]

本文分享自华为云社区《漫谈嵌入式系统的内存》,作者:o0龙龙0o 。

序言

物联网嵌入式芯片,存储是数据核心之一,这个对付编程和设计的人来说又比较陌生,本日来说说MCU中的内存构造

聊一聊物联网嵌入式芯片的内容结构_存储器_内存 智能

1、存储器形式

MCU的存储器从存储特性上分为:易失落性存储器、非易失落性存储器,即常说的Volatile memory和Non-volatile memory

随机存取存储器 :1、DRAM(动态随机存储器)、2、SRAM(静态随机存储器)一样平常MCU的内存多采取SRAM构成,紧张缘故原由是速率快、构造大略。

非易失落性存储器(Non-volatile memory)是指纵然电源供应中断,存储器所存储的资料并不会消逝,重新供电后,就能够读取存储器中的资料。
紧张种类如下:

只读存储器(ROM)可编程式只读存储器(PROM)可擦除可方案式只读存储器(EPROM)电子抹除式可复写只读存储器(EEPROM)Flash ROM磁存储、硬盘、软盘、磁带、3D XPoint、固态硬盘、光存储、光盘

个中 PROM、Flash一样平常作为MCU数据程序存储器,不过现在也有很多MCU内挂EEPROM,方便用户写入临时数据。

可擦除可编程式只读存储器

是一种断电后仍能保留数据的打算机存储芯片、它是一组浮栅晶体管,被一个供应比电子电路中常用电压更高电压的电子器件分别编程。
一旦资料写入完成后,EPROM只能用强紫外线照射来擦除。
我们常说的24C芯片便是这类的存储器芯片,他可以按照Byte去擦鞋数据,比按照扇区擦写的Flash效果高很多。

2、数据存储

内存的数据一样平常可以分为堆、栈、程序代码、数据代码、全局变量代码

一样平常如下分布:

堆内存(也称内存池)的起始地址及堆区域总大小是LiteOS对程序堆的阐明,便是一段AP程序所占用的内存大小,这些大小由链表或是二叉树组成,用于该程序段内存的占用。

栈——堆栈(:stack)又称为栈或堆叠,是打算机科学中的一种抽象资料类型,只许可在有序的线性资料凑集的一端(称为堆栈顶端,:top)进行加入数据(:push)和移除数据(:pop)的运算。
因而按照后进先出(LIFO, Last In First Out)的事理运作。
在MCU由系统LiteOS对剩余内存进行分配用于程序的局部变量的利用和数据malloc产生新分配的内存。

bss段:(bss segment)常日是指用来存放程序中未初始化的全局变量的一块内存区域。
bss是英文Block Started by Symbol的简称。
bss段属于静态内存分配。

data段:数据段(data segment)常日是指用来存放程序中已初始化的全局变量的一块内存区域。
数据段属于静态内存分配。

text段:代码段(code segment/text segment)常日是指用来存放程序实行代码的一块内存区域,一样平常存放在ROM中。
这部分区域的大小在程序运行前就已经确定,并且内存区域常日属于只读(某些架构大概可代码段为可写,即许可修处死式)。
在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

我么编程时很少会设计到这些的设计,每每是由系统LiteOS自动完成或是由编译器完成。

3、如何利用程序设计内存呢?

宏命令:

#pragma alloc_text( "textsection", function1, ... )命名特殊定义的函数驻留的代码段。
该编译指示必须涌如今函数解释符和函数定义之间。

#pragma code_seg( ["section-name"[,"section-class"] ] )指定分配函数的代码段。
code_seg编译指示为函数指定默认的段。
你也能够像段名一样指定一个可选的类名。
利用没有段名字符串的#pragma code_seg将规复分配到编译开始时候的状态。

#pragma const_seg( "MY_DATA" )

导致在#pragma语句后面的常量数据分配在一个叫做MY_DATA的段中。

#pragma const_seg( ["section-name"[, "section-class"] ] )指定用于常量数据的默认段。
data_seg编译指示除了可以事情于所有数据以外具有一样的效果。
你能够利用该编译指示将你的常量数据保存在一个只读的段中。

点击关注,第一韶光理解华为云新鲜技能~

相关文章