首页 > 其他分享 >如果将一个数组Buf放到Flash的地址上为0X08020000的位置,要如何修改这个数组中的值?

如果将一个数组Buf放到Flash的地址上为0X08020000的位置,要如何修改这个数组中的值?

时间:2024-09-26 10:20:17浏览次数:9  
标签:FLASH HAL 0X08020000 Flash 写入 数组 Buf

如果你将数组 Buf 放在 Flash 地址 0x08020000,并希望修改这个数组中的值,需要遵循以下步骤:

  1. 解锁 Flash:首先需要解锁 Flash,以允许进行写操作。

  2. 擦除页面:在写入新数据之前,必须擦除相应的 Flash 页面(或扇区)。

  3. 写入数据:使用编程指令将新的数据写入到 Flash。

  4. 锁定 Flash:完成写入后,重新锁定 Flash。

下面是一个具体的代码示例,假设使用 STM32 微控制器:

#include "stm32f4xx_hal.h" // 包含必要的 HAL 库

#define FLASH_PAGE_ADDRESS 0x08020000 // Flash 开始地址
#define PAGE_SIZE 0x800 // 假设每页大小为 2KB

void WriteToFlash(uint32_t address, uint8_t* data, uint32_t size) {
    HAL_FLASH_Unlock(); // 解锁 Flash 写入

    // 擦除 Flash 页面
    FLASH_Erase_Sector(FLASH_SECTOR_8, VOLTAGE_RANGE_3); // 根据需要选择正确的扇区

    // 写入数据
    for (uint32_t i = 0; i < size; i++) {
        HAL_FLASH_Program(TYPEPROGRAM_BYTE, address + i, data[i]);
    }

    HAL_FLASH_Lock(); // 锁定 Flash 写入
}

// 示例数据
uint8_t newData[] = { /* 新数据 */ };

int main(void) {
    // 初始化 HAL 库
    HAL_Init();
    
    // 写入新的数据到 Flash
    WriteToFlash(FLASH_PAGE_ADDRESS, newData, sizeof(newData));

    // 继续其他操作
    while (1) {
        // 主循环
    }
}

在这个示例中:

  • HAL_FLASH_Unlock():解锁 Flash,以允许写入。
  • FLASH_Erase_Sector():擦除指定的 Flash 扇区。
  • HAL_FLASH_Program():逐字节写入新的数据。
  • HAL_FLASH_Lock():完成后锁定 Flash。

--------如果直接声明一个比较大的全局数组Buf,Buf数组默认是放到RAM上的,Buf数组可以指定到其他位置,如0x20000008。所以没有必要将一个数组放到Flash上,否则写入很麻烦,每一次更改都要经过一些列的解锁擦除写入操作---------

标签:FLASH,HAL,0X08020000,Flash,写入,数组,Buf
From: https://blog.csdn.net/ZLongTeng/article/details/142549158

相关文章

  • 逆序对——树状数组
    逆序对题目描述猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中\(a_i>a_j\)且\(i<j\)......
  • 树状数组(Binary Indexed Tree, BIT)
    树状数组(BinaryIndexedTree,BIT)树状数组(BinaryIndexedTree,BIT),也称为FenwickTree,是一种用于高效处理数组前缀和查询和单点更新的数据结构。它能够在(O(\logn))时间内完成单点更新和前缀和查询操作。基本概念前缀和:给定一个数组a,前缀和prefix_sum[i]表示a[0]+......
  • 2535. 数组元素和与数字和的绝对差
    给你一个正整数数组nums。元素和是nums中的所有元素相加求和。数字和是nums中每一个元素的每一数位(重复数位需多次求和)相加求和。返回元素和与数字和的绝对差。注意:两个整数x和y的绝对差定义为|x-y|。示例1:输入:nums=[1,15,6,3]输出:9解释:nums的元......
  • javascript向数组添加元素
    javascript向数组添加元素,比较常用的是两种方法,一种是向数组后面添加元素,一种是在数组前面添加元素。向数组后面添加元素,一般用push语句,它返回的是添加新元素之后的数组长度。push语法格式是数组名.push('要添加的数组元素')比如有一个数组名字叫arr,要向数组后面添加一个'g......
  • Go从入门到放弃之数组、切片
    一、数组数组的声明和初始化在Go语言中,数组是固定长度的、同一类型的数据集合。数组中包含的每个数据项被称为数组元素,一个数组包含的元素个数被称为数组的长度。在Go语言中,你可以通过 [] 来标识数组类型,但需要指定长度和元素类型,使用时可以修改数组成员,但是数组大小不可变化......
  • 2024-09-25:用go语言,给定一个长度为 n 的整数数组 nums 和一个正整数 k, 定义数组的“能
    2024-09-25:用go语言,给定一个长度为n的整数数组nums和一个正整数k,定义数组的"能量"为所有和为k的子序列的数量之和。请计算nums数组中所有子序列的能量和,并对结果取模10^9+7后返回。输入:nums=[1,2,3],k=3。输出:6。解释:总共有5个能量不为0的子序列:子......
  • 三星flash记录
    1.刷目标包之前,先刷本机对应的官方最新包1.0退出谷歌账号、三星账号1.1使用固件下载器下载本机最新的官方包:输入koo、SM-N976N、IMEI码,获取并下载1.2进入ODIN模式:关机->按住音量+和音量-->typec连接电脑->根据提示,按一下音量+,就进入odin模式了1.3电脑打开ODIN,分别选......
  • SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用FI
    合集-C#(80)1.使用C#将几个Excel文件合并去重分类2023-11-152.C#使用SqlSugar操作MySQL数据库实现简单的增删改查2023-11-163.C#中的类和继承2023-11-174.C#中的virtual和override关键字2023-11-175.C#中的属性2023-11-206.C#winform中使用SQLite数据库2023-11-237.C#简化工作之......
  • 一维数组的创建和初始化
    当变量出现,我们就有了存放单个数据的概念,那么我们有一堆数据呢?比如:我们班的数学成绩有30个数据,此时我们可以把它们看作一个集体C语言就出现了数组的概念,创建一个连续的空间将同类型的多个数据存放在一起,并且可以指定大小,就是数组。1.数组的概念数组就是存放着同类型元素的......
  • C语言数组探秘:数据操控的艺术【上】
    在C语言中数组是非常重要的,应用也是非常广泛的,它可以帮助我们更好的写代码,来解决问题。欧克,开始今天的数组的章节。一.数组的概念数组是一组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组......