一种避免pgm_read访问闪存的方法(avr 微控制器)
A way to access flash memory avoiding pgm_read (avr microcontrollers)
当你想访问闪存时,你必须写这样的东西:
constexpr uint8_t n PROGMEM = 10;
auto x = pgm_read_byte(&n);
我不喜欢这种访问内存的方式。我想以相同的方式访问每种类型的内存(RAM,闪存,EEPROM...我想写这样的东西更好:
constexpr uint8_t n = 10; // constexpr tells the compiler:
// eh! I'm not planning to write in this variable
// so you can put it in flash memory
auto x = n; // copy n into x (but x is uint8_t, not constexpr)
我天真地尝试实现这一点,例如:
namespace Progmem{
class uint8_t{
constexpr uint8_t(::uint8_t x):v{x}{}
// TODO: operator uint8_t() const {return pgm_read_byte(&v);}
// private:
::uint8_t v PROGMEM;
};
}
并以这种方式进行测试:
constexpr Progmem::uint8_t n = 10;
auto x = pgm_read_byte(&(n.v));
它可以编译,但 x 中的数字存储不正确。
我该如何编写此类?
谢谢。
您可以使用
fmorgner 的 AVR++ 库中的flash_constant
。
之前(示例 demo_progmem.c):
#include <avr/pgmspace.h>
#include <stdint.h>
int const demo PROGMEM = 1;
int main()
{
return pgm_read_word(&demo);
}
之后(示例 demo_progmem.cpp):
#include <avr/flash_constant.hpp>
#include <avr/cstdint.hpp>
auto const demo = avr::flash_constant{1};
int main()
{
return demo;
}
相关文章:
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 与SPI NAND闪存(STM32L4,QSPI)的通信问题
- 从不属于应用程序的闪存读取
- LittleFS文件系统,NOR闪存的文件写入问题
- STM32使用HAL库的外部闪存读取设备ID
- STM32F4 - 在运行时将函数从闪存复制到RAM
- 如何将来自闪存中不同银行的两个内存区域交换为STM32L475
- 为什么在STM32上未清除闪存页面
- 如何在看门狗执行前将日志复制到闪存?
- 一种避免pgm_read访问闪存的方法(avr 微控制器)
- g++arm none eabi从4.9升级到gcc 8.2.生成的二进制文件不再适合闪存
- 如何检查USB插槽中是否存在空闪存卡读卡器?
- 获取闪存驱动器的读写速度
- c/c++:如何知道已用闪存的大小?
- 如何以编程方式使用 MBR 和 USB 闪存扇区
- C++/C 实时闪存流处理
- 在闪存驱动器上为 Windows C++ Code blocks设置 OpenGL
- 如何限制 MFC 应用程序仅从已知的 USB 闪存驱动器运行
- C++创建文件(紧凑型闪存卡写入器)
- 支持XNAWP7和闪存与现有的C++代码库-管道,工具和方法