注意:该文章大部分是通过 文心一言 的回答编写。有啥不对的,还请评论区指正,感谢!!!
这篇文章也很好:
单片机中那些数据位于flash中,哪些数据位于ram中??_什么样的信息是放在flash里面的额-CSDN博客
1、RAM:
断电数据丢失,可以理解为手机的运行内存。用于程序运行起来后,数据与数据结果的临时存储。线程任务的栈空间就分配在RAM里。(操作系统会被引导程序从flash中加载到RAM中运行。)
2、ROM:
断电数据不丢失,是固化在硬件中的程序,一般里面是boot、BIOS、一些引导程序。一般是芯片厂商出厂时就固化在里面的了,用户无法改变。
3、flash:
断电数据不丢失,可以理解为硬盘,u盘。在嵌入式中,一般编译好的单片机程序会烧录到flash里面。
4、程序是怎么运行起来的?
4.1 系统启动:
上电后,CPU会从预设的启动地址(芯片内部的ROM或者外部flash的特定区域)读取指令。
指令初始化硬件资源。
4.2 加载固件:
ROM中的启动代码会查找存储在flash中的开发者烧录好的固件程序,若固件需要与运行,会将其复制到RAM中的特定区域。
4.3 程序运行:
固件程序被加载到RAM中(或者还在flash里),CPU就会执行RAM中的固件程序,需要什么数据就聪flash里面读取到RAM中,或者数据写入到flash中。(类似计算机的3级缓存)。
注意:CPU的寻址空间就是地址总线相连接RAM,所以读些RAM比flash快很多。
5、cpu的寻址空间与ram\rom\flash之间的关系
cpu的寻址空间:取决于 cpu的地址总线宽度和系统设计、硬件架构。
CPU的寻址空间是指CPU能够直接访问的内存(包括RAM和其他类型的存储器,如ROM、Flash等)以及I/O设备的地址范围的总和。
所以它包括了CPU能够直接访问的所有内存和I/O设备的地址范围,而不仅仅是与CPU通过地址总线相连的RAM。RAM的大小只是这个寻址空间中的一个部分。
理论上,8位的cpu的地址总线是8根,可以寻址的空间大小是2^7=256个单位,即256字节。
cpu寻址空间的大小可能比ram小:cpu寻址空间还包括rom等。
cpu寻址空间的大小可能比ram大:通过某种方式,如分页或分段,来映射到CPU的寻址空间内。
还需要注意的是,即使CPU的地址总线宽度足够大,以支持更大的寻址空间,系统也可能由于物理内存限制、成本考虑或其他因素而使用较小的RAM。同时,系统还可能使用虚拟内存技术来扩展可用的内存空间,但这已经超出了CPU直接寻址的范围。