ST意法半导体
登录
直播中
1123127317
8年用户
1048经验值
擅长:制造/封装 接口/总线/驱动
私信
关注
[问答]
STM32F746将数据写入内部闪存而不擦除整个扇区?
开启该帖子的消息推送
stm32f746
TouchGFX
我正在使用
STM32
f746 和 touchGFX 开发一个项目。我需要将一些数据存储到闪存中并在需要时更改它,我想我必须擦除整个扇区,但我不想这样做,因为我在每个扇区都有一些数据。我现在使用 85% 的闪存。那么有没有办法在写入前删除特定内存呢?
回帖
(1)
李燕
2023-2-3 15:04:58
我将为向量表创建一个新的内存定义,并将 FLASH 的开头移到保留的闪存扇区之后。
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
FLASH_VECTOR (rx) : ORIGIN = 0x8000000, LENGTH = 32K
FLASH (rx) : ORIGIN = 0x8018000, LENGTH = 928K /* 1024 - 3*32 */
}
/* Sections */
SECTIONS
{
/* The startup code into "FLASH" Rom type memory */
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH_VECTOR
.after_vector :
{
. = ALIGN(4);
KEEP(*(.after_vector))
. = ALIGN(4);
} >FLASH_VECTOR
并保持其他一切不变。
现在 0x08008000 和 0x08018000 之间的内存,即闪存扇区 1 和 2 不再由链接器管理,因此您可以拥有自己的函数来读写该区域,如参考手册闪存章节中所述。
vector table之后大约有31kbytes的flash空间被浪费了,如果内存还紧张,可以把一些只读的数据移进去。查看 .map 文件,寻找只读数据结构,大小加起来大约为 31 k 的数组。CubeIDE 在 Build Analyzer 视图中有一个内存详细信息表,其中包含与 .map 文件或多或少相同的信息,打开 flash 下的 .rodata 部分,按大小排序,然后从中选择一些对象。在 .c 源代码中将以下行放在它们的定义之前:
__attribute__((section(".after_vector")))
这样就不会浪费这 31 KB 的闪存。
我将为向量表创建一个新的内存定义,并将 FLASH 的开头移到保留的闪存扇区之后。
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
FLASH_VECTOR (rx) : ORIGIN = 0x8000000, LENGTH = 32K
FLASH (rx) : ORIGIN = 0x8018000, LENGTH = 928K /* 1024 - 3*32 */
}
/* Sections */
SECTIONS
{
/* The startup code into "FLASH" Rom type memory */
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH_VECTOR
.after_vector :
{
. = ALIGN(4);
KEEP(*(.after_vector))
. = ALIGN(4);
} >FLASH_VECTOR
并保持其他一切不变。
现在 0x08008000 和 0x08018000 之间的内存,即闪存扇区 1 和 2 不再由链接器管理,因此您可以拥有自己的函数来读写该区域,如参考手册闪存章节中所述。
vector table之后大约有31kbytes的flash空间被浪费了,如果内存还紧张,可以把一些只读的数据移进去。查看 .map 文件,寻找只读数据结构,大小加起来大约为 31 k 的数组。CubeIDE 在 Build Analyzer 视图中有一个内存详细信息表,其中包含与 .map 文件或多或少相同的信息,打开 flash 下的 .rodata 部分,按大小排序,然后从中选择一些对象。在 .c 源代码中将以下行放在它们的定义之前:
__attribute__((section(".after_vector")))
这样就不会浪费这 31 KB 的闪存。
举报
更多回帖
rotate(-90deg);
回复
相关问答
stm32f746
TouchGFX
STM32F
407的FLASH为什么只能按
扇区
擦除
2021-09-24
3368
如何对
STM32F746
的MAC和DMA进行配置
2021-10-14
1774
STM32
H743可以
写入
小于flash
扇区
的smth吗?
2023-01-13
202
stc单片机
写入
数据
的时候是否是
擦除
整个
扇区
,还是不必
擦除
可以直接
写入
?
2023-09-26
211
LPC54S018
擦除
串行
闪存
问题求解
2023-03-23
252
在
STM32
L071CB MCU中读取/
写入内部
闪存
而无需使用HAL库吗
2022-12-01
198
STM32F
207是否可以使用超出
数据
表中指示的
闪存
大小?
2022-12-01
205
STM32F746
G-DISCOVERY是否有任何的演示代码呢?
2022-12-27
365
将
STM32
Flash
数据
写入内
存之前要
擦除
多少个
扇区
2022-12-23
160
如何使用
STM32
_Programmer_CLI批量
擦除
外部
闪存
?
2022-12-27
300
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分