【IoT】ROM、RAM 和 FLASH 浅析
1、ROM、RAM 和 FLASH 应用
1)ROM
存储固化程序的,存放指令代码和一些固定数值,程序运行后不可改动。
c文件及h文件中所有代码、全局变量、局部变量、'const'限定符定义的常量数据、startup.asm文件中的代码(类似ARM中的bootloader或者X86中的BIOS,一些低端的单片机是没有这个的)通通都存储在ROM中。
2)RAM
程序运行中数据的随机存取(掉电后数据消失),整个程序中,所用到的需要被改写的量,都存储在 RAM 中,“被改变的量”包括全局变量、局部变量、堆栈段。
3)FLASH
存储用户程序和需要永久保存的数据。
例如:
现在家用的电子式电度表,它的内核是一款单片机,该单片机的程序就是存放在 ROM 里的。
电度表在工作过程中,是要运算数据的,要采集电压和电流,并根据电压和电流计算出电度来。
电压和电流时一个适时的数据,用户不关心,它只是用来计算电度用,计算完后该次采集的数据就用完了,然后再采集下一次,因此这些值就没必要永久存储,就把它放在 RAM 里边。
然而计算完的电度,是需要长久保存的,单片机会定时或者在停电的瞬间将电度数存入到 FLASH 里。
2、ROM、RAM 和 FLASH 在运作原理
1)程序经过编译、汇编、链接后,生成hex文件;
2)用专用的烧录软件,通过烧录器将hex文件烧录到ROM中;
注:这个时候的ROM中,包含所有的程序内容:一行一行的程序代码、函数中用到的局部变量、头文件中所声明的全局变量,const声明的只读常量等,都被生成了二进制数据。
对于 Flash 类型的 MCU,ROM 空间的大小通常都是整字节的,即为 ak*8bits。
refer:
https://blog.****.net/junzhu_beautifulpig/article/details/50771807