【问题标题】:How can I store characters in flash memory STM32F4 HAL with C++?如何使用 C++ 将字符存储在闪存 STM32F4 HAL 中?
【发布时间】:2015-06-11 18:05:26
【问题描述】:

所以我有一个缓冲区:

uint32_t buff[2];
buff[0] = 12;
buff[1] = 13;
...

我可以用这个方法把这个写入闪存:

HAL_FLASH_Program(TYPEPROGRAM_WORD, (uint32_t)(startAddress+(i*4)), *buff)

HAL_FLASH_Program的定义是:

HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data)

效果很好。现在有没有办法可以存储字符或整数?

【问题讨论】:

标签: c++ flash-memory hal


【解决方案1】:

您可以使用 HAL_FLASH_ProgramTYPEPROGRAM_BYTE 来写入单个 1 字节字符。

如果您的数据有点长(结构体、字符串...),您也可以使用 TYPEPROGRAM_WORD 甚至 TYPEPROGRAM_DOUBLEWORD(一次 8 个字节)写入大容量数据,然后使用根据需要单个字节或用零填充多余的字节。那肯定会快一点,但也许对你来说并不重要。

【讨论】:

  • 我的数据只是TCHAR id[11],然后包含['a','B','c','D', ...]之类的内容。我可以做HAL_FLASH_Program(TYPEPROGRAM_BYTE, (uint32_t)(startAddress+(i*4)), *id[i]); 吗?
  • @matt 是的,如果你在循环中这样做的话。除了它将是startAddress+i(或startAddress+i*sizeof(TCHAR))和id[i]。您还必须确保 TCHAR 是 1 个字节。 char 始终为 1 个字节,但 TCHAR 可能更多。
  • @matt 另外,如果你想存储很多东西,你可以使用一个结构体,里面包含你想要的所有东西作为映射,然后使用startAddress+offsetof(map,id[0]) 存储和加载。
猜你喜欢
  • 2016-08-04
  • 2018-01-16
  • 2021-07-17
  • 2015-04-14
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多