目前我的项目用的是28035芯片,因开发需要增加功能,增加代码后发现.EBSS内存空间不够用了,更改前CMD文件和更改后CMD文件见附件,更改CMD文件后程序编译正常,但实际运行时程序中好多变量的值却不对了。请问Ti工程师帮忙分析一下。目前.EBSS段分配到两个RAM区,且这两个RAM地址不连续,不认怀疑是地址不连续造成的。
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.
目前我的项目用的是28035芯片,因开发需要增加功能,增加代码后发现.EBSS内存空间不够用了,更改前CMD文件和更改后CMD文件见附件,更改CMD文件后程序编译正常,但实际运行时程序中好多变量的值却不对了。请问Ti工程师帮忙分析一下。目前.EBSS段分配到两个RAM区,且这两个RAM地址不连续,不认怀疑是地址不连续造成的。
很抱歉,漏掉了您的回复
链接中提到了下面的方法
main.c:
volatile int x [64];
volatile int y [64];
void main(void){}
如果将y [64]的声明移动到另一个源文件(例如foo.c),则链接器将沿对象模块边界拆分.ebss节,并将其放入指定的内存中。生成的.map文件显示了拆分为两个不同的.ebss节
还有一种是使用#pragma DATA_SECTION
把变量放在一个特定的空间内,其中data_section是针对数据空间的,具体的使用办法是
#pragma DATA_SECTION(bufferB, ”my_sect”)
char bufferB[512];
在.cmd文件中建立对应的section就可以使用了.
具体您可以看一下 6.10.7 The DATA_SECTION Pragma
https://www.ti.com/lit/ug/spru514t/spru514t.pdf
能给出您是如何在c文件以及cmd文件定义的吗?
我将我的C文件部分代码和cmd文件传至附件,我发现每当数据错误时只要注释掉一个DATAsection语句就可以解决,我怀疑还是CMD文件RAM 内存分配问题,我的项目使用了CLA功能我将RANL3的一部分分配给了CLA的代码指令,另一部分分配给了.cio和.sysmem
.bss_cla .scratchpadcmd文件.zip