xxkj2010 发表于 2025-9-13 17:56:05

请教:程序区上的数据是不是只能读不能写|已解决

请教:程序区上某个地址上的数据,我们可以直接读出,但在程序的执行过程中,是否可以进行擦除或改写,就像操作EEPROM一样?

国芯人工智能 发表于 2025-9-13 18:00:00

程序区(通常指Flash存储器)上的数据在一般情况下是只读的,但这并不意味着完全不能写入或擦除。实际上,是否可以进行擦写操作,取决于具体的芯片架构、存储器类型以及程序运行时的权限与机制。

在大多数嵌入式系统中,程序代码是存储在Flash存储器中的,这类存储器具有非易失性,适合用于保存固件。然而,Flash的物理特性决定了其读写方式与RAM不同。具体来说:

1. 读操作:Flash存储器支持快速、随机的读取操作,这正是程序执行所依赖的特性。

2. 写操作:Flash存储器不能像RAM那样直接写入。在写入之前,必须先进行擦除操作。而擦除是以“块”或“页”为单位进行的,不是按字节进行的。也就是说,要修改Flash中的某一部分内容,通常需要:
将该块的数据读入RAM;
在RAM中修改;
擦除原块;
将修改后的数据重新写入该块。

3. 擦写寿命限制:Flash存储器的擦写次数是有限的(通常在1万到10万次之间),因此频繁地进行擦写会影响其寿命。

因此,从技术上讲,程序区的数据是可以被擦写修改的,但这种操作不能像读取那样频繁和随意,且必须遵循特定的流程和保护机制。

此外,现代MCU(如STM32、ESP32等)通常提供了对Flash的编程接口(如Flash库函数),允许用户在应用程序中进行Flash的擦写操作。但必须注意:
操作Flash时需关闭中断,防止程序跑飞;
需要遵循芯片厂商提供的API或规范;
不当操作可能导致程序区损坏,甚至系统崩溃。

综上所述:
程序区上的数据在正常运行中是只读的,但通过特定机制是可以进行擦写操作的,其过程复杂且受限,不能像EEPROM那样随意读写,但在必要时(如固件升级、参数保存等)仍可实现。

[本文内容由国芯人工智能辅助生成,仅供参考]

DebugLab 发表于 2025-9-15 05:16:11

支持IAP的型号,设置EEPROM覆盖CODE,就可以

xxkj2010 发表于 2025-9-15 08:41:31

DebugLab 发表于 2025-9-15 05:16
支持IAP的型号,设置EEPROM覆盖CODE,就可以

支持IAP的型号,可以动态设置EEPROM?

DebugLab 发表于 2025-9-15 10:36:51

xxkj2010 发表于 2025-9-15 08:41
支持IAP的型号,可以动态设置EEPROM?

下载时由ISP软件设置,用户程序无法设置

xxkj2010 发表于 2025-9-15 11:12:43

DebugLab 发表于 2025-9-15 10:36
下载时由ISP软件设置,用户程序无法设置
那还是不一样,就是无法支持代码对程序区的读写,这个可能是为了保证程序数据的运行安全,也就是说不会在运行过程中被非法改写

DebugLab 发表于 2025-9-15 13:00:05

xxkj2010 发表于 2025-9-15 11:12
那还是不一样,就是无法支持代码对程序区的读写,这个可能是为了保证程序数据的运行安全,也就是说不会在 ...
下载时设置EEPROM为全部FLASH,就可以支持用户程序修改自己
不支持的是在用户程序中修改EEPROM大小

xxkj2010 发表于 2025-9-15 13:26:06

DebugLab 发表于 2025-9-15 13:00
下载时设置EEPROM为全部FLASH,就可以支持用户程序修改自己
不支持的是在用户程序中修改EEPROM大小
...

试了,还真的可以,谢谢!
页: [1]
查看完整版本: 请教:程序区上的数据是不是只能读不能写|已解决