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.

[参考译文] TMS320VC5509A:在 SDRAM 中初始化全局变量时出现问题

Guru**** 2551110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/569223/tms320vc5509a-troubles-with-initializing-global-variables-in-sdram

器件型号:TMS320VC5509A

您好!

我在使用 SDRAM 的演示板上遇到了一些问题。

 1) 1)似乎无法在 SDRAM 存储器中初始化全局变量。 我有一个演示项目 dsk5509test、其中包含源 testsdram.c。

以下是 test_sdRAM.c 源代码:

#include "test_SDRAM.h"
#include 

#define buffer_size (20)

uint16_t test = 0xAD;
uint16_t arrayZero[10]={1、2、3、5、6、7、8、9、10};
uint16_t writeBuffer[buffer_size]={0xAD、0xAD、0xAD、0xAD、0xAD};

void testSDRAM(){

uint16_t readBuffer[buffer_size]={0xBEEF};

uint16_t dataCount = 0;
uint16_t * sourceAddr、* deminAddr;

dataCount = 0;
sourceAddr =&writeBuffer[0];

log_printf (&trace、"hello testSDRAM!");

test = 1000;
test++;
dataCount = test;
//sourceAddr =(int *) 0xf0000;
deminAddr = sourceAddr+buffer_size;
//printf ("dataCount =%d"、dataCount);
dataCount = 0;
while (sourceAddr "="" nop");="" 

我将其放置在 SDRAM 存储器部分:

SECTIONS
{
.data_ram
{
test_SDRAM.obj/*(.text)*/
}> SDRAM_DATA
} 

以下是.tcf 文件中存储器区域 SDRAM_DATA 的定义:

因此、当我尝试调试此代码并观察 writeBuffer 数组而不是{0xAD、0xAD、0xAD、0xAD、0xAD}时 、我会看到下一个结果:

我尝试以不同的方式放置它、它仅在放置在内部 IRAM 存储器中时才起作用。
它可能有什么问题?

2) 2)将.obj 的整个段放入一个输出段时出现故障。

例如、当我尝试以这种方式放置段时:

SECTIONS
{
.data_ram
{
test_SDRAM.obj
}> SDRAM_DATA
} 

我得到链接错误:


错误#10255-D:无法将数据输入段"./test_SDRAM.obj (.bss)"放置在文本输出段".data_ram"中
错误#10255-D:无法将数据输入段"./test_sdRAM.obj (.cinit)"放置在 文本输出段".data_ram"中
错误#10255-D:无法在 文本输出段".data_ram"中放置数据输入段"../test_sdRAM.obj (.const:_$P$T0$1)"

错误#10255-D:无法放置文本输出段".data_ram"中的数据输入段。/test_sdRAM.obj (.const:.string)"

但是、当我对以下两个文件执行相同的操作时:

SECTIONS
{
.data_ram
{
test_sdRAM.obj
test_smram2.obj
}> SDRAM_DATA
} 

或多个部分、如下所示:

SECTIONS
{
.data_ram
{
test_SDRAM.obj (.const)
test_SDRAM.obj (.cinit)
/* test_SDRAM.obj (.bss)*}
> SDRAM_DATA
} 

编译正常。 但是、当我向 链接器文件添加 test_sdRAM.obj (.bss)时、编译器会输出相同的错误。

我应该怎么做才能摆脱这种麻烦?

已将项目添加至存档文件: e2e.ti.com/.../dsk5509_5F00_test.zip

此致、

埃戈尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Egor、

    我已将此事转交给专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    解决问题是否有任何进展?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    eGor、

    如果程序行为不同、您可以尝试使用随附的.cmd 作为默认 CCS .cmd 并报告它吗?

    /cfs-file/__key/communityserver-discussions-components-files/791/6136.VC5509.cmd

    此外,请在 testSDRAM()中添加以下内容,并查看 CCS 内存窗口是否反映了这些值,方法可能是在其后面放置一个断点。

    void testSDRAM(){

    uint16_t readBuffer[buffer_size]={0xBEEF};
    uint16_t dataCount = 0;

    uint16_t * sourceAddr、* deminAddr;
    writeBuffer[0]= 0xAD;
    writeBuffer[1]= 0xAD;
    writeBuffer[2]= 0xAD;
    writeBuffer[3]= 0xAD;
    writeBuffer[4]= 0xAD;

    本质上、尝试查看将用于将缓冲区加载到例程中的语句是否会显示不同的结果。

    Lali