尝试为 ATSAMV17Q21 构建项目时遇到一些问题。具体来说,我正在尝试将常量数据定位到外部 eeprom 中。我以前在 GCC 中做过这个没有问题,但是 XC32 很痛苦。
在 GCC 中,这很容易:
const int somevariablename属性((section(".nvdata")) = value
然后,通过将这些部分定位在“假”内存区域中,我使用 objcopy 吐出重新定位到地址为零的 eeprom s-record。我们的代码知道它是否在这个“假”内存区域中遇到一个地址,以便仅使用低地址位从 spi eeprom 读取,并且它工作正常。
但是,在 XC32 中,为了在没有部分重叠的情况下正确定位事物,我不得不使用: attribute ((space(data), section(".nvdata"))
我可以在链接器映射中看到它找到了该部分中的所有变量,并且使用 objcopy 我可以生成一个 s-record。
但是...我注意到代码闪存部分非常大。当我在十六进制查看器中查看内容时,我看到所有文本字符串(具有相似属性)都集中到初始化数据部分,因为我可以在十六进制查看器中读取它们。我们将常量数据放入外部 eeprom 的主要原因是我们为代码腾出代码闪存。如何指定属性让 XC32 配合?