单片机内存(ram)、flash、与数据存储和启动过程说明

电脑程序运行与单片机的区别在于内存管理,单片机代码通常存储在Flash中,CPU直接读取执行。单片机内存包括Flash和RAM,其中RAM分为栈区和堆区,Flash分为代码区和只读数据区。Flash类似电脑的ROM,可多次擦写,而RAM数据断电丢失。RAM包括静态RAM(SRAM),用于存储变量;Flash用于存储程序代码和只读数据。EEPROM是电可擦除的存储器,常用于存储配置数据,擦写次数和数据保留时间优于普通Flash。
摘要由CSDN通过智能技术生成

1 电脑程序运行过程与单片机的区别

由于电脑中的程序是存储在磁盘中的,而磁盘的读取速度非常慢,因此我们不可能从磁盘中直接读取当前要执行的代码,这样必然导致程序阻塞。好在,电脑的内存非常大,所以在程序执行之前,先把整个代码copy到内存中,然后CPU从内存中读取一条条指令,并运行。

为了合理利用和规划内存资源,除了操作系统的内存管理外,最重要的是内存的分段。对每一个进程,操作系统都会为其分配一片内存,同时将其分段为代码段、数据段、堆栈段等等,不同的段具有不同的属性,比如代码段一般是只读的,如下图所示。(参考博客:https://blog.csdn.net/iostream1001001/article/details/77112455)
在这里插入图片描述
单片机首先没有磁盘,其次内存非常小,显然这种方式运行程序是不可能的。但好的一点是,单片机的代码是保存在flash中,相当于电脑的固态硬盘或ROM,CPU读取flash的速度虽然慢于内存,但依然是非常快的。因此我们不需要将代码搬移到内存中,直接从flash中读取就行了。

因此单片机的程序执行过程是,根据flash中的代码为函数分配堆栈和静态存储区,然后CPU读取flash中的指令,并读写内存中的数据进行运算。下面转载博客https://blog.csdn.net/sinat_30146065/article/details/82221179来详细说明。

注意:应该不是所有单片机都是这个启动过程,经验证,msp430f6638运行过程中程序是存储在ram中的,而不是直接从flash取指令。实验过程如下:
msp430f6638的代码保存在首地址为0x8000的segment中,可以擦除,擦除时是按segment擦除。设计实验如下,首先点亮D3/D4两个LED,延时1s后全部熄灭,然后擦除代码段,之后为while(1)循环闪烁D4。代码如下:

#include <msp430.h> 
#include <stdio.h>

int main(void) {
   
    WDTCTL = WDTPW | WDTHOLD;	// Stop watchdog timer
    printf("hello");
	P2DIR |= BIT7;	P2OUT |= BIT7;
	P8DIR |= BIT0;	P8OUT |= BIT0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朽木白露

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值