#持久 #ram #缓冲区 #区域 #内存 #文件 #保留

无std persistent-buff

在启动之间在RAM中保持持久的缓冲区

9个版本

0.2.6 2023年1月27日
0.2.5 2022年11月16日
0.2.4 2022年10月31日
0.1.1 2022年10月27日

#324 in 嵌入式开发

Download history 6/week @ 2024-03-11 6/week @ 2024-03-18 12/week @ 2024-04-01 8/week @ 2024-05-13

每月下载 54次

MIT/Apache

12KB
111

persistent-buff

crates.io documentation

在启动之间持久的缓冲区。受 panic-persist 启发

为该缓冲区在RAM中预留一个区域。您的链接脚本应确保缓冲区的起始和结束位置在其他区域之外,以避免零初始化。

用法

链接脚本

您需要为缓冲区创建一个新的保留部分,并确保它位于其他部分之外,以避免零初始化。

示例

memory.x 文件修改前

MEMORY
{
  /* NOTE 1 K = 1 KiBi = 1024 bytes */
  FLASH : ORIGIN = 0x00000000, LENGTH = 1024K
  RAM : ORIGIN = 0x20000000, LENGTH = 128K
}

memory.x 文件修改后,保留1K区域

MEMORY
{
  /* NOTE 1 K = 1 KiBi = 1024 bytes */
  FLASH : ORIGIN = 0x00000000, LENGTH = 1024K
  RAM : ORIGIN = 0x20000000, LENGTH = 128K - 1K
  PERSISTENT_BUFF: ORIGIN = ORIGIN(RAM) + LENGTH(RAM), LENGTH = 1K
}
_persistent_buff_start = ORIGIN(PERSISTENT_BUFF);
_persistent_buff_end   = ORIGIN(PERSISTENT_BUFF) + LENGTH(PERSISTENT_BUFF);

程序

#![no_std]

#[entry]
fn main() -> ! {
   let mut pbuff = persistent_buff::PersistentBuff::take_managed().unwrap();

   // Trivial way to initialize is to fill it with 0
   let buff = pbuff.validate(|b| b.fill(0));

   buff[0] = (buff[0] % 255) + 1;
   info!("Value is now {}", buff[0]);
}

许可证

根据您选择的以下许可证之一授权

任选。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,如Apache-2.0许可证中定义,应按上述方式双授权,不得附加任何其他条款或条件。

无运行时依赖