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.

[参考译文] CCS/TMS320F28335:内存分配错误

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/607068/ccs-tms320f28335-wrong-size-memory-allocation

器件型号:TMS320F28335

工具/软件:Code Composer Studio

我的内存分配有问题。

我使用 CCS 7.1.0.00016。

当我将两个结构放入不同的 RAM 段时、数据大小为22x16b + 44x16b。

typedef 结构{
float dat[2];
}complex_float;

typedef 结构体 SlidingGoertzelDFT{
float32值[1];
float32阶段[1];

结构{
float32* vr0k;
float32* vr1k;
float32* vr2k;
float32 xn[1];
Complex 浮点 VK[1];

float32 vr0t[1];
float32 vr1t[1];
float32 vr2t[1];
} 表;
}SlidingGoertzelDFT;

typedef 结构 PQAHarmonicsPhaseData{
SlidingGoertzelDFT 电压;
SlidingGoertzelDFT 电流;
}PQAHarmonicsPhaseData;

typedef 结构体 PQAHarmonicsData{
PQAHarmonicsPhaseData L1;
}PQAHarmonicsData;

PQAHarmonicsData PQAHarmonicsMeasurement;


#pragma DATA_SECTION (PQAHarmonicsMeasurement、"DMARAML7");
PQAHarmonicsData PQAHarmonicsMeasurement;

typedef struct TTEST{
float32值[1];
float32阶段[1];

结构{
float32* vr0k;
float32* vr1k;
float32* vr2k;
float32 xn[1];
Complex 浮点 VK[1];

float32 vr0t[1];
float32 vr1t[1];
float32 vr2t[1];
} 表;
}TTEST;


#pragma DATA_SECTION (ttesttt、"DMARAML6");
TTEST ttesttt;


编译器的结果为:

***-build of configuration Debug for project APF_V0_01 ****

"C:\\ti\\ccs710\\ccsv7\\utils\\bin\\gmake"-k -j 8 all -O 'building
file:../_apf/PQA_armMeasurement.c'
'invoking:C2000 Compiler'"C
:C:\\chine-board-jet="cn=cn_cn_cn"/ti/workspace_v7/APF_v0_01/_DSP -track-board-cn-cn-cn=/ti/workspace_v7/APF_v0_01/_APF/Headers /ti/workspace_v7/APF_v0_01/_DSP/Headers -cn-cn-cn-cn-cn=/ti/workspace_v7/APF_v0_01/_PCB -path=/ti/ccs710/ccsv7/tools/compiler/ti-cgt-c2000_17.3.0.STS/bin/cl2000 /ti/workspace_v7/APF_v0_01/_APF -cn-cn-cn-cn-cn-cn-cn"/ti/workspace_v7/APF_v0_01/_APF -cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn/simumines=/ti/workspace_v7/APF_v0_01/_APF /ti/workspace_v7/APF_v0_01/_PCB/Headers -cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn include_path="C:/ti/workspace_v7/APF_v0_01 --include_path="C:/ti/ccs710/ccsv7/tools/compiler/ti-cgt-c2000_17.3.0.STS/include --advice:performance=all --define=_inline --define=s采样_51200 --define=debug_DC_dogram -g --symdebug:dwarf_version=3 --obj_warning=225 --display_dc_d_data-prendore_infote_capsection_apf_capsenditation_reation_reation_reation_reation_reation_files\cmag_apf_sensoritive.c -apf_capsection_capsection_capsection_capsection_apf_capspritation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_reation_real-apf_apf_apf_capsection_capsection_capsection_apf_cap


但是、当我将 testtt 的 DATA_SECTION 也更改为 DMARAML7时、数据大小为108x16b:

***-build of configuration Debug for project APF_V0_01 ****

"C:\\ti\\ccs710\\ccsv7\\utils\\bin\\gmake"-k -j 8 all -O 'building
file:../_apf/PQA_armMeasurement.c'
'invoking:C2000 Compiler'"C
:C:\\chine-board-jet="cn=cn_cn_cn"/ti/workspace_v7/APF_v0_01/_DSP -track-board-cn-cn-cn=/ti/workspace_v7/APF_v0_01/_APF/Headers /ti/workspace_v7/APF_v0_01/_DSP/Headers -cn-cn-cn-cn-cn=/ti/workspace_v7/APF_v0_01/_PCB -path=/ti/ccs710/ccsv7/tools/compiler/ti-cgt-c2000_17.3.0.STS/bin/cl2000 /ti/workspace_v7/APF_v0_01/_APF -cn-cn-cn-cn-cn-cn-cn"/ti/workspace_v7/APF_v0_01/_APF -cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn/simumines=/ti/workspace_v7/APF_v0_01/_APF /ti/workspace_v7/APF_v0_01/_PCB/Headers -cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn-cn include_path="C:/ti/workspace_v7/APF_v0_01 --include_path="C:/ti/ccs710/ccsv7/tools/compiler/ti-cgt-c2000_17.3.0.STS/include --advice:performance=all --define=_inline --define=sensing_51200 --define=debug_DC_dogram -g --symdebug:dwarf_version=3 --obj_warning=225 --display_dc_d_data-prendore_infote_capsection_capsection_apf_capsection_pritive_sensoritive_pf-apf_capsection_capsection_pritive_pensoritive_pf-nation_sitive_apf_caps=pref_caps\cmag_capsprenditive_pf-nation_sitive_pref.apf_capsprenditive_pref_caps=pref_apf_capsection_capsection_capsection_capsulation_sitive_s

我无法解释22x16 + 44x16如何等于108x16???

因此、我无法将我的数据放入 RAM 段中。

有人能帮我解决这个问题吗?

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

    尊敬的 Lukas:

    在构建项目后、您是否检查了.map 文件、以获得有关每个存储器部分内容的提示?

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

    所发生的情况是、链接器将每个结构分配到数据页边界上、因此可以使用直接存储器寻址模式来访问结构元素。 您的结构之一是22个字、其他44个字。 在您提出的情况下、22个字结构放置在一个 DP 边界上、后跟42个字的"孔洞"、然后44个字结构放置在下一个 DP 边界上。 总段大小为:22 + 42 + 44 = 108个字。

    您可以反转链接顺序以强制较大的结构进入低位地址、因此空洞从42个字下降到20个字。 为此、您需要将结构声明拆分为单独的源文件、并在链接器文件中引用它们、如下所示:

    DMARAML7.

    PQA_filename.obj (DMARAML7)
    ttestt_filename.obj (DMARAML7)
    }> RAMX,PAGE = 1

    这样、总大小将从108个字下降到:44 + 20 + 22 = 86个字。 您可以执行类似的操作、将特定的命名变量推入未使用的20个字中、但结构需要 DP 对齐。

    此致、

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

    没关系。 感谢您的回答。