有没有一种方法可以在c++中创建一个自定义限定符来将数据类型移动到flash中?

cuxqih21  于 2023-04-01  发布在  其他
关注(0)|答案(1)|浏览(108)

我目前正在编写一些代码在c++的语法类似于Arduino与一些更多的功能.目前,我正在努力使一种方法来调用程序的处理器从外部闪存.由于内存问题.我有几个想法,因为我使用自定义 Bootstrap ,我可以让它运行代码从闪存.然而,我想处理的另一个问题是使用限定符将数据类型移动到外部闪存,类似于teensy 4.0代码中的EXTMEM限定符。
我试着在网上冲浪了整整30分钟来寻找答案,但我没有找到任何令我满意的答案。
编辑:澄清一下,我这么做主要是为了教育目的。2我试图完全从零开始做一个微控制器,除了标准库之外没有任何依赖性(iostream,inttypes等)。我意识到要做到这一点,我需要从这个的底部开始,使用我的指令集来创建这个。我知道这是一个奇怪的项目,但我选择这些项目大多是因为它们的古怪。为了回答另一个问题,我计划使用我的引导加载程序从外部闪存中读取,将内容复制到内部闪存中,然后执行程序。

uqjltbpv

uqjltbpv1#

这个问题的答案在很大程度上取决于你使用的编译器。

  • C标准中没有关键字。
  • IAR Embedded Workbench支持非标准__flash__tinyflash__farflash__hughflash关键字。
  • avr-libc(通常与gcc一起使用)具有<avr/pgmspace.h>头。该头包含几个函数和宏来访问闪存。
  • gcc对于AVR有progmem属性,但是你仍然需要特殊的函数来访问FLASH,比如在<avr/pgmspace.h>中。
  • 一般来说,为 *Von Neumann架构 *(如gcc)设计的编译器通常为FLASH、EEPROM和SRAM使用不同的段。(但您仍然需要特殊的函数来访问FLASH,如<arv/pgmspace.h>。)

例如,可以生成类似const int someVar __attribute__((section(".text"))) = 123;的值
const int someVar __attribute__((section(".progmem"))) = 123;-取决于您的链接器及其配置...

相关问题