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.
Hi:
大家好,我在a.c中写了如下的一段代码:
#pragma DATA_SECTION(TEST_DATA,".Test_Data");
const unsigned int TEST_DATA[1024] = {0x21,0x3c,0x58,0x79,...}
.Test_Data在cfg文件中被指定放在DDR3中起始位置为0x80000000, 然后编译,下载代码,查看0x80000000,发现该位置是全0值,而不是TEST_DATA的初始化值,请问这种情况该怎么解决?
Jerry,
您在下载代码之前有没有初始化DDR接口? 如果没有初始化DDR, 可以用一个GEL脚本先做初始化,再下载代码。 同时注意代码中不能再有DDR的初始化过程。
如果您的商用软件版本也需要把一个常数表放在DDR,需要考虑类似的问题,即下载DSP代码之前,需要初始化DDR接口。这个可以基于您的单板系统设计做进一步讨论。
我们目前还在调试阶段,使用仿真器,加GEL的方式调试的,使用的GEL使TI提供的6670的GEL,我搜索了一下,GEL中用这样的一个函数ddr3_setup_auto_lvl_1333(0)操作,应该是将DDR初始化了,在此基础上下载代码,放在DDR的值任然看不到,请问这种情况该怎么解决?
Jane 您好,我这两天一直想做一个小工程来复现我遇到的问题,但是都失败了,不管是有Sysbios的,还是没有sysbios的小工程,初始化数据都可以直接放入到0x8000 0000开始的地方,但是在我们的正式工程中数据仍然不能正确初始化。我使用RTSC做的内存规划,请问这样是否有问题;
另外请教一个问题,我有四个段.DAF_OSS,.DAF_ShareMem,.DRV_QMSS,.DRV_CPPI, 我想将这四个段放到共享Memory中,并且先后顺序固定,请问该如何配置.cmd;谢谢!
Jerry,
关于CMD的教程您可以参考spru186文档。
关于DDR的问题,您是在C6670的EVM单板上测试吗? 若是,C6670 EVM板上DDR的size是512M,也就是说DDR memroy的0xa0000000其实和0x80000000对应了同一个物理单元(地址回卷了)。 您的rtsc配置中不能再对0xa0000000开始的空间进行定义。
Jerry,
如果是2G的DDR,RTSC上memory配置应该没有问题。您前面提到单独的小工程也没有复现问题,是基于这个rtsc的配置吗?
全局变量的初始化工作是在_cint00函数中完成,您能在这个函数执行前看一下DDR的数据情况,然后在main函数前再看一下0x80000000的值?
Jane,
你好,我刚才又做了一个实验,还是使用相同的RTSC配置,但是将所有的数据都放在0x80000000-0xa0000000这个范围内,发现所有的初始化数据都正确了,这个实验是不是证明0xa0000000以后的地址覆盖了0x80000000-0xa0000000的地址,但是我们的DDR大小确实是2G,应该是的我的配置出了问题,导致系统未识别0xa0000000以后的地址,请问该如何解决这个问题?
Jerry,
_c_int00的位置可以搜索一下map文件得到。
DDR是2G byte 还是 2G bit?
如果是2G Byte, 根据您新提供的信息,建议您根据论坛上提供的memory测试文档和代码做一下address test, 看看是否硬件有问题?
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/21928.aspx
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx(这个开发包里有memory测试例程,您把DDR的地址范围改为2G)
_cint00()函数的位置建议你查看*.map文件,例如:
******************************************************************************
TMS320C6x Linker PC v7.4.1
******************************************************************************
>> Linked Mon Feb 10 13:00:10 2014
OUTPUT FILE NAME: <../example.out>
ENTRY POINT SYMBOL: "_c_int00" address: 84080b40
Br
William
Jane,yuanwen dong,
谢谢你们的大力支持,DDR3 0x80000000-0xa0000000这段地址初始化出错的问题已经找到,是硬件工程师将2G的DDR3芯片换成了512M的DDR3芯片,没有告诉我们;再次感谢两位的帮助。借楼再请教一个问题:6670有4个核,想将每个Core的L2SRAM划分为大小不同的Memory块?e.g. Core 0 的L2划分为2块,Code_mem和Data_mem,两块大小分别为0x80000;Core 1的L2划分为三块,分别为Code_mem,Data_mem,Debug_mem,大小分别为0x80000,0x50000,0x30000;Core 2的L2划分为2块,Code_mem和Data_mem,两块大小分别为0x90000,0x70000;Core3的L2划分为2块,分别为Code_mem和Data_mem,大小分别为0x30000,0xD0000。上述需求通过统一的RTSC无法实现,请问如何才能满足上述需求,谢谢!
你好,
通常情况下,可以多核可以通过编译出一个.out,每个核下载相同的代码,然后在代码中通过判断DNUM寄存器核号的方式,让每个核走不同流程。
针对这种情况,我只用过建立多个工程,然后分别修改各自的linkscript.cmd文件进行编译出多个执行文件的方式实现。
没有用过RTSC, Jane可能有好主意。
Br
William
你好,
在建立sys/bios工程时,必须选择一个rtsc的包,默认的6670包里面也有内存的划分,使用自己的cmd文件对存储器进行划分时,会和这个包里面的划分冲突,如何解决这个问题呢?
Jane,
我之前就是用的这种方法建立RTSC,但是这种方法建立的内存分配,所有核的分配方案是一样的,我现在想用对L2不同核,使用不同的分配方案。请问一下,如何在工程连接时,系统不识别RTSC分配的内存,而识别自己编写的cmd的内存分配。在Sysbios手册6.3.4中有一个链接http://rtsc.eclipse.org/cdoc-tip/xdc/cfg/Program.html#sections.Exclude,该页上介绍了一个指令Program.memoryExclude = Bool false;当Program.memoryExclude值为True时,可以排除,但是在我的sysbios中,program下没有memoryExclude这个指令,我的sysbios版本是6.32.5.54,请问这个怎么解决,谢谢!
Jerry,
建议用下面的方法:
1 所有核共有的section在RTSC cfg文件中定义
2 每个核不同的部分单独写*.cmd
一个CCS工程允许有多个配置文件的。