MCU内存分配和启动过程知识点

发布时间:2024-11-25 14:40:44  

1.数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位

1字节(Byte)=8位(bit)

1KB( Kilobyte,千字节)=1024B

1MB( Megabyte,兆字节)=1024KB

1GB( Gigabyte,吉字节,千兆)=1024MB

1TB( Trillionbyte,万亿字节,太字节)=1024GB

1PB( Petabyte,千万亿字节,拍字节)=1024TB

2.32位操作系统的地址空间为32位,地址总数为2^32。每个地址对应1Byte内存空间,32位操作系统管理的最大内存空间限制为4GB。

图片


1.KEIL编译后显示Program Size详解:

图片


data=23.3代表程序生成的代码所占用单片机的内部RAM空间是23.3个字节;xdata是片外RAM空间,xdata=45表示没有使用片外RAM空间数据;

code=282代表生成的代码大小(即ROM空间,这里一般指Flash)是282字节。

2、什么是哈弗结构和 冯*诺伊曼结构

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构,中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。

图片


冯.诺伊曼结构( von Neumann architecture ),也称 普林斯顿结构 ,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。

3、什么是ROM和RAM?

ROM:只读内存, 其中flash可以理解为ROM。保存在ROM中的数据不会因断电而丢失,用于保存用户程序和在程序执行中保持不变的常数。

RAM: 随机读/写 内存, 其中SRAM 、DRAM可以理解为RAM。保存在RAM中的数据断电后也随之丢失,主要用于存储程序中的变量。

4、什么是栈和堆?

栈(stack):用来存储每个函数创建的局部变量和形参等,栈是先进后出原则的结构体。在函数中每次声明一个局部变量就存在栈中,函数退出则定义的局部变量也就会被释放。局部变量创建和释放都是自动,因此不需要管理栈内存。

堆(heap): 堆是一种经过排序的树形数据结构,每个节点都有一个值。堆的存取是随意的,如同我们在图书馆书架上取书一样。通过malloc()在堆上创建内存,使用free()或者由os释放。

5、单片机内存模型?

5.1对于栈生长方向向下的单片机,其内存一般模型是:

图片


5.2代码中标注存储位置

图片


5.3 单片机运行时所占用的内存,可以分为如下几个部分:
1、栈区(stack):由编译器自动分配释放,存放
函数地形参 ,局部变量的值等。
2、堆区(heap):由程序员分配释放,或程序结束时由OS释放。
3、全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的的另一块区域。程序结束后由系统自动释放。

4、文字常量:常量字符串就是存放在这里的,程序结束后由系统释放。
5、程序代码:存放函数体的二进制代码。

MCU从FLASH启动文件分析:

  1. 定义.section .isr_vector ,“a”中断向量表(sp,复位 256占0x400);

  2. 定义.section .FlashConfig ,“a” 定义flash段;

  3. .text .thumb 表示text段使用thunb指令;

  4. Reset_Handler 开始复位(关机中断,清除通用寄存器,);

  5. 初始化RAM、初始化堆栈_stacktop_;

  6. SystemInit系统相关的初始化;

  7. Init_data_bss函数

  • 定义一些变量来连接脚本;

  • 把初始化了的数据从Flash搬移到RAM;

  • 定义没有初始化.Bss段的变量大小;

  • 有一些会把中断向量表拷贝到RAM;

  • 打开中断,跳转到main();

5、Keil编译 Program Size含义?

keil 显示:Program Size:Code=xx RO-data=xx RW-data=xx ZI-data=xx

Flash存储 code(代码存储区)和RO-data(只读数据存储区)。

Sram存储 RW-data(读写数据存储区)和ZI-data(零初始化数据区)。

图片


文章来源于:电子工程师笔记    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>