总结:概述物联网(IoT)嵌入式芯片,存储是数据核心之一。 这是编程和设计人员不太熟悉的事情。 今天我们来谈谈内存结构。 堆栈 堆栈(也称为堆栈或堆栈)是计算机科学中的一种抽象数据类型,它允许仅在有序线性数据集合的一端(称为堆栈顶部)添加和删除数据的操作。
总结:物联网嵌入式芯片、存储它是数据核心之一。 这是编程和设计人员不太熟悉的事情。 今天我们就来说说MCU的内存结构。
本文由华为云社区“浅谈嵌入式系统中的内存”o0龙龙0o分享。
简介
在物联网嵌入式芯片中,存储是数据核心之一。 这对于程序员和设计师来说并不是很熟悉。 今天我们就来说说MCU的内存结构。
1. 内存格式
MCU中的内存按存储特性分为:易失性内存、非易失性内存(一般为易失性内存、非-易失性内存)
随机存取存储器:1. DRAM(动态随机存取存储器),2. SRAM(静态随机存取存储器)。 一般来说,MCU 的存储器主要由 SRAM 组成。 主要原因是其速度快、结构简单。
非易失性存储器(Non-易失性存储器)是指即使断电,存储器中存储的数据也不会消失。 从内存中读取数据。 主要类别有:
只读存储器 (ROM) 可编程只读存储器 (PROM) 可擦除可编程只读存储器 (EPROM) 电可擦除可编程只读存储器 (EEPROM) 闪存 ROM 磁存储器、硬盘、软盘、磁带、 3D XPoint、固态硬盘、光存储、光盘
其中,一般使用PROM和Flash作为MCU数据程序存储器,但现在有很多MCU内置了EEPROM,以方便用户写入临时数据。
可擦除可编程只读存储器
计算机中的一种存储芯片,即使在电源关闭时也能保留数据。 它是一组浮栅晶体管,由电子器件单独编程,提供比电子电路中常用电压更高的电压。 一旦数据写入 EPROM,就只能使用强紫外线来擦除。 我们常说的24C芯片就是这种类型的存储芯片。 它可以基于字节擦除鞋数据,这比闪存基于扇区擦除数据有效得多。
2. 数据存储
内存数据一般可以分为堆、栈、程序代码、数据代码和全局变量代码。
一般分布如下。
堆内存(也称为内存池)的起始地址和堆区域的总大小由下式确定LiteOS 程序的描述。 这是AP程序占用的内存大小。 这些大小由链表或二叉树组成,用于占用该程序段的内存。
栈 - 栈(:stack),也称为堆栈或堆栈,是计算机科学中的一种抽象数据类型,可用于存储有序数据的线性集合的一端(简称to 作为数据的开头)仅允许在 stack, :top) 执行添加 (:push) 和删除 (:pop) 操作。 因此,它的工作原理是 LIFO(后进先出)。 在MCU上,系统LiteOS为程序局部变量和数据malloc使用分配剩余内存,以生成新分配的内存。
bss段:(bss段)通常指程序内未初始化的全局变量的存储。内存区域。 bss 是英文 Block Started by Symbol 的缩写。 bss段属于静态内存分配。
数据段:数据段通常是指用于存储程序内初始化的全局变量的内存区域。 数据段是静态内存分配。
文本段:代码段/文本段通常是指用于存储程序执行代码的内存区域,通常存储在ROM中。 该区域的大小在程序执行之前确定,并且该内存区域通常是只读的(某些架构还允许代码段可写,从而允许修改程序)。 代码段还可以包含只读常量变量,例如字符串常量。
你在编程时很少会设计这些设计。 这些往往是由LiteOS系统或者编译器自动完成的。
3.如何使用编程内存?
宏命令:
#pragma alloc_text( "textsection", function1, ... )
命名专门定义的函数所在的代码段。 该编译指示必须在函数说明符和函数定义之间指定。
#pragma code_seg( ["section-name"[,"section-class"] ] )
指定放置函数的代码段。 code_seg pragma 指定函数的默认段。 除了部分名称之外,您还可以指定可选的类名称。 使用 #pragma code_seg 而不指定段名称字符串会将分配恢复到编译开始时的状态。
#pragma const_seg( "MY_DATA" )
将常量数据放置在 #pragma 语句后面名为 MY_DATA 的段中。
#pragma const_seg( ["节 - 名称"[, "节 - 类"] ])
指定常量数据的默认部分。 data_seg pragma 具有相同的效果,只不过它对所有数据进行操作。 该编译指示允许常量数据存储在只读段中。
点击关注,第一时间了解华为云新技术~
评论前必须登录!
注册