在我们的项目中、中断程序在 RAM 中运行、但当前单个 RAM 空间的内存不足、我们需要组合2个 RAM 空间来填充程序、但 CCS 似乎阻止了我的多 RAM 空间组合




我应该怎么做才能实现我的目标?以上只是一个例子,tks
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.
在我们的项目中、中断程序在 RAM 中运行、但当前单个 RAM 空间的内存不足、我们需要组合2个 RAM 空间来填充程序、但 CCS 似乎阻止了我的多 RAM 空间组合




我应该怎么做才能实现我的目标?以上只是一个例子,tks
我认为问题是、如果某个段像您在原始帖子中看到的那样跨越存储器联合体、链接器会引发此错误。
您需要将代码分解为不同的代码段、以便链接器可以将它们放置在不同的 RAM 区域中。 这是否可以在您的项目中实现?
因此、您需要尝试将要从 RAM 执行的代码划分为多个代码段、而不是一个"ramfuncs"代码段/pragma。
为了确保这一切都适用、即使您不能使用连续区域、也可能会制作与您拥有的 RAM 总大小相同的"假"存储器部分、以确保在您开始分解之前它适用。
最棒的
Matthew
您能否对编译器中的优化设置进行评论、并让我知道您在项目中包含哪些(如果有)库?
具体而言、您的项目是否包括闪存 API 库? 有一个选项可将此文件链接至 ROM (已由 TI 编程)以节省空间。
此时、我将尝试查看我们是否可以减少整体代码占用空间、因为我认为我们没有任何其他选项可以尝试重新分配内容。
您能否为我附加完整的.cmd 文件以检查分配?
最棒的
Matthew
Foriner、
我从我们的工具团队那里获得了有关上述内容的更多信息。 我们似乎需要将 run 语句更改为(replace = with >>):
运行>> RAML0 | RAML1
这将使链接器跨越该函数。
但是、这将导致一个新问题、这是因为函数在连续假设下运行、所以该函数从闪存复制到 RAM。
为了解决此问题、我们需要创建复制表、而不是使用符号。 那么、现在我们有了
.TI.ramfunc : load = FLASHH,
运行>> RAML0 | RAML1
表(BINIT)
PAGE = 0
.binit > FLASHH
此"binIT"部分将由 RTS 库在 main 之前处理并正确复制内容。 请告诉我这是否有任何问题。
最棒的
Matthew