物联网——Flash闪存

Flash

IAP等同于OTA,写一个Bootloader程序存在程序更新不会覆盖的空间,需要更新时,程序跳转到bootloader入口,接收通信串口传送的新程序,控制Flash读写操作,将新程序移动值运行空间,最后跳转到新的程序进行运行或者直接系统复位
在这里插入图片描述

In-Circuit Programming 和 In-Application Programming

在这里插入图片描述

存储器映像

闪存模块组织

Flash结构

在这里插入图片描述

Flash解锁

在这里插入图片描述

使用指针访问存储器

volatile用于防止编译器优化某段必须执行的代码,虽然在编译器看来是无意义的(如:无意义的加减变量、)
在这里插入图片描述

Volatile关键字

volatile 关键字用于声明一个变量,指示编译器不要对该变量进行优化。具体来说,当一个变量被声明为 volatile 时,编译器会在每次使用该变量时都从内存中读取其最新值,而不是将其缓存到寄存器中。

  • 主要用途

  • 硬件寄存器访问:
    访问硬件寄存器时,寄存器的值可能会被外部事件(如中断)改变。使用 volatile 可以确保每次读取的是最新的寄存器值。

  • 多线程环境:
    在多线程环境中,一个线程可能修改另一个线程正在使用的变量。使用 volatile 可以确保每个线程都能看到变量的最新值。

  • 信号处理函数:
    在信号处理函数中,全局变量的值可能会被信号处理器修改。使用 volatile 可以确保主线程能看到这些变化。

  • 注意事项

  • 不适用于所有情况:
    volatile 并不能替代同步机制(如互斥锁、信号量)来解决多线程环境下的数据竞争问题。

  • 性能影响:
    使用 volatile 会导致编译器无法对其进行某些优化,从而可能影响性能。

  • 原子性:
    volatile 不保证对变量的操作是原子性的。对于需要原子操作的情况,应使用适当的同步原语。

程序存储器编程

在这里插入图片描述

程序存储页擦除

擦除的最小单位是1K,1024字节
PER: Page Erase
AR: 地址寄存器
在这里插入图片描述

闪存全擦除

MER: Mass Erase
STRT: Start
在这里插入图片描述

选项字节

RDP:读保护位, WRP: 写保护位
在这里插入图片描述

选项字节擦除

OPTWRE: Option Write Enable
在这里插入图片描述

器件电子签名

在这里插入图片描述

(读写Flash操作)程序接线图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值