工具/软件:Code Composer Studio
#pragma PERSISTENT (SFR13Data)// SFR13 データ記憶
CHAR SFR13Data[DimMax][54];
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
#pragma PERSISTENT (SFR13Data)// SFR13 データ記憶
CHAR SFR13Data[DimMax][54];
我想放置1024 54个字符的数据。 DimMax 63正常。 但是、当 DimMax 为64或更高时、会输出错误#10099-D、无法保护变量。 如何在 FRAM 中保留64个以上的数组变量?
pragma PERSISTENT(SFR13Data)
CHAR SFR13数据[63][54];
pragma PERSISTENT(SFR13Data1)
CHAR SFR13Data1 [63][54];
pragma PERSISTENT(SFR13Data2)
CHAR SFR13Data2 [63][54];
可以宣布上述三项。 但是、下一步、一个声明将导致错误。
pragma PERSISTENT(SFR13Data)// SFR13データ記憶
CHAR SFR13Data [64][54];
我想声明 char SFR13Data [1024][54];
出现以下错误。 指出物理内存不足。 但是、FRAM 物理存储器具有额外的100 KB。 然后、通过将变量名称更改为63来声明54个字符、从而保护存储器。 但是、尝试保护超过64个(SFR13[64][54])会导致错误。
----------------------------------------------------
典型消息
"./lnk.cmd"、第48行:错误#10099-D:程序将不可用
存储器。 “.text”大小为0x2b12的定位失败。
可用存储器范围:
闪存大小:0x1000未使用:0xe56最大空洞:0xe56
含义
链接器无法将程序的某些部分安装到器件上。 特定的错误消息指示链接器无法放置程序的哪个部分、其大小以及它尝试放置它的存储器范围。 对于列出的存储器范围、size 表示段的总大小、unused 表示尝试放置失败的段时剩余的空间量、max hole 表示可用的最大连续区域。
为什么会发生这种情况
从根本上说、这表明器件没有足够的物理存储器(只读或读写)来处理程序。 但是、这并不一定意味着需要更大的器件。 可以更改几个可以解决该问题的内容。 此外、对于高级用户、此错误也可能来自不正确的链接器命令文件、该文件不能准确地表示当前器件。 (TI 器件通常附带适当的链接器命令文件、不需要用户修改、因此如果您对链接器命令文件一无所知、则不应担心这种可能性。)
补救措施
出现此错误消息的原因有多种、因此有多种可能的解决方案。 需要考虑的几个常见问题:
##如果一个段未能放置到 RAM 中、请确保为器件和程序正确设置了堆栈和堆大小。 请考虑减小它们。
##尝试启用或提高编译器使用的优化级别。 与优化的程序相比、未优化的程序需要更多的空间。
##如果您添加了用于调试的 I/O 代码、则可能会大于预期。 具体而言,printf()不适合许多小型嵌入式器件。 根据器件的大小,--printf_support=minimal 选项可能会解决问题,而 printf()可能根本不是一种可行的调试方法。
如果上述建议无法解决问题、则需要进行更多调查、以确定问题是否仅仅是器件对于程序而言不够大、或者空间是否被不必要地使用。 查找更多信息的最佳位置是由链接器生成的映射文件。 映射文件提供了有关段的放置位置、组成和大小的详细信息。 在查看此问题时、请记住、未能放置的部分不一定是问题的根源。 之前放置在同一存储器区域中的另一个段可能比预期的要大得多、并引入了该问题。
风险、严重性
此错误会阻止可执行程序的构建。