![什么是不可执行闪存?](https://linux22.com/image/1335263/%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%8D%E5%8F%AF%E6%89%A7%E8%A1%8C%E9%97%AA%E5%AD%98%EF%BC%9F.png)
有一天上班时有人问 how much ‘executable’ flash memory we need
。难道不能从所有闪存中执行吗?
如果我错了,那么可执行闪存与不可执行闪存有何不同?
编辑 这与嵌入式系统有关。我们正在设计一个新系统,并选择一个处理器。提出的一个要求是我们需要多少内存。上面的引述是关于对该要求的澄清。
答案1
不,不可能在所有闪存中执行。例如,假设您有一个串行闪存芯片,需要许多指令才能从该闪存芯片中读取单个字节。您如何从该闪存芯片执行代码?
几乎每台 PC 的每个 RAM 棒上都有一个闪存芯片,其中包含 RAM 的规格。您肯定无法执行该闪存芯片中的代码,因为它没有映射到内存中,只能通过与内存控制器对话的复杂代码序列来访问。
或者考虑一个具有独立可执行文件和数据地址空间的 CPU。映射到数据地址空间的闪存芯片也不可执行。
具体细节与设备有关。但设备中存在无法执行的闪存的情况并不罕见。
想想 SSD 或 USB 闪存驱动器。如果不先将代码复制到 RAM,则无法从中执行代码。(嵌入式系统通常没有足够的 RAM 来保存副本。)
此外,有些 CPU 对可执行内存有性能要求。有些 CPU 没有在程序提取时插入等待状态的能力,但可以在数据提取时插入等待状态。因此可执行闪存必须非常快。使用较便宜的闪存来存储数据并不罕见。(例如,DS80C320 可以容忍较慢的数据内存,但可执行内存必须全速运行。)
答案2
在用于许多嵌入式应用的许多微控制器中,至少有两种类型的内存:闪存(通常包含嵌入式固件)和 RAM(用于保存运行时值、寄存器、堆栈等)。
有些微控制器有多个闪存,但并非所有闪存都可用于存储程序(固件)。其他闪存区域仅用于非易失性存储。
在所有这些情况下,闪存通常在开发过程中进行编程(例如将数据加载到硬盘上),并且不会被正在运行的程序覆盖。在某些情况下,闪存可以写入,并且您拥有可自行重新编程的系统。
需要明确的是,程序是从这个闪存执行的,但我们谈论的不是闪存盘之类的东西。