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.

[参考译文] 编译器/TMS320F28335:链接器如何在同一段中分配多个数据的放置位置?

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/653062/compiler-tms320f28335-how-the-linker-assign-placement-of-several-data-in-the-same-section

器件型号:TMS320F28335

工具/软件:TI C/C++编译器

大家好、我有一些可调参数、我想将它们放在单独的存储器中、以便于管理。 由于此类参数的数量可能会发生变化、我没有为每个参数创建单独的段、而只是将它们全部放在闪存的一个.paramData 段中。  

脚本中会自动添加此类参数。

我想捕获数据结构是否发生变化、以便程序始终与结构匹配。 但出于简单的原因、我无法使用结构、它只生成一个符号。

如果我添加一个参数、链接器放置看起来会发生变化。 我无法预测的任何顺序。

是否有方法"预测"会触发链接器将特定数据/var 放置在分配给它的存储器段中?

复杂的问题 希望这一点足够明确、可以征求一些想法。

谢谢

此致

GZ

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

    遗憾的是、我需要更多详细信息。  请使用源代码向我展示您正在执行的操作的详细示例、以及链接器如何以意外的方式导致更改顺序。

    同时、本文的第一部分 "链接器命令文件入门 "应帮助您更好地了解情况。

    谢谢、此致、

    乔治

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

    谢谢、此致、

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

    您好、George、  

    感谢您的回复。 请参阅此.c 代码

    /*自动生成的文件。 请勿修改*/
    
    #include "calParams.h"
    
    #pragma DATA_SECTION (twoDimTable、"caldata");
    const _iq16 twoDimTable[7][11]={
    _IQ16 (0)、_IQ16 (1)、_IQ16 (2)、_IQ16 (3)、_IQ16 (4)、 _IQ16 (5)、_IQ16 (6)、_IQ16 (7)、_IQ16 (8)、_IQ16 (9)、 _IQ16 (10)、
    _IQ16 (10)、_IQ16 (11)、_IQ16 (12)、_IQ16 (13)、 _IQ16 (14)、_IQ16 (15)、_IQ16 (16)、_IQ16 (17)、_IQ16 (18)、 _IQ16 (19)、_IQ16 (20)、
    _IQ16 (20)、_IQ16 (22)、_IQ16 (24)、 _IQ16 (26)、_IQ16 (28)、_IQ16 (30)、_IQ16 (32)、_IQ16 (34)、 _IQ16 (36)、_IQ16 (38)、_IQ16 (40)、
    _IQ16 (40)、_IQ16 (44)、 _IQ16 (46)、_IQ16 (48)、_IQ16 (50)、_IQ16 (52)、_IQ16 (54)、 _IQ16 (55)、_IQ16 (56)、_IQ16 (56)、_IQ16 (56)、
    _IQ16 (50)、 _IQ16 (54)、_IQ16 (56)、_IQ16 (58)、_IQ16 (60)、_IQ16 (61)、 _IQ16 (61)、_IQ16 (62)、_IQ16 (62)、_IQ16 (62)、_IQ16 (62)、
    _IQ16 (55)、_IQ16 (56)、_IQ16 (57)、_IQ16 (58)、_IQ16 (60)、 _IQ16 (61)、_IQ16 (62)、_IQ16 (63)、_IQ16 (63)、_IQ16 (63)、 _IQ16 (63)、
    _IQ16 (57)、_IQ16 (58)、_IQ16 (59)、_IQ16 (59)、 _IQ16 (60)、_IQ16 (61)、_IQ16 (62)、_IQ16 (63)、_IQ16 (63)、 _IQ16 (63)、_IQ16 (63)
    、};
    
    #pragma DATA_SECTION (实数、"caldata");
    const REALY_T AREAL =(10.1235);/*测试参数、单精度*/
    
    #pragma DATA_SECTION (DCOUNT、"caldata");
    const Int32_T DCOUNT =(-50);/*测试参数、Int32*/
    
    #pragma DATA_SECTION (DCOUNT2、"int32_t =
    
    
    
    
    
    
    );"int16_t 参数、"intcumt/t = 150kv (_t);/*Vbus 测量上的校正增益*/
    
    #pragma DATA_SECTION (oneDimTable、"caldata");
    const _iq16 oneDimTable[11]={
    _IQ16 (0)、_IQ16 (1.1)、_IQ16 (2.2)、_IQ16 (3.5)、_IQ16 (4.6)、 _IQ16 (5)、_IQ16 (6)、_IQ16 (7)、_IQ16 (8)、_IQ16 (9)、 _IQ16 (10)、
    };/* Vbus 测量上的校正增益*/
    
    #pragma DATA_SECTION (InitAngle、"caldata");
    const _iq16 InitAngle =_IQ16 (0);/*旋转变压器的初始角度*/
    
    #pragma DATA_SECTION (VerSim、"paramsig");
    const Uint32_T = VERT 

    链接后的符号表将为我提供如下摘要所示的内容:

    101、varName、varDim1、varDim2、varADD、 VarType、_IQN、varMin、varMax、Unit
    RW、twoDimTable、7、11、0x8020、 _iq16、_IQ16、-1、100、伏特
    RW、AReal、1、1、0x8006、 Real_T、-20000、20000、rpm
    RW、DCOUNT、1、1、0x8008、 int32_T、-32767、32767、计数
    RW、Dcount2、1、1、0x8000、 uint16_T、、0、32767、计数
    RW、Dcount3、1、1、0x8001、 uint16_T、、0、32767、计数
    RW、kV_Corr、1、1、0x8004、 _iq16、_IQ16、0.9、1.1、无
    RW、DimoneTable、1、11、0x800a、 _iq16、_IQ16、-1、100、放大器
    RW、InitAngle、1、1、0x8002、 _iq16、_IQ16、-180、180、deg
    RO、VDC_diag、1、1、bb202, _iq16、_IQ16、0、1000、V

    根据#pragma 的规定、数据位于正确的段中

    在所有32位数据中、两个_iq16s 分别放置在8002、8004、real-T 放置在8006、Int32_T 放置在8008。  

    由于_iq16只是 typedef'ed 到 Int32、因此我不确定链接器是如何决定排列这些变量的顺序的。 显然、它不是按定义顺序、不是按字母顺序或按类型分组...  

    最后、我想了解是否每次都必须重新检查映射文件、即使该.c 文件未更改(尽管同一项目中的其他.c 可能会更改)。  

    希望这有助于澄清我原来的问题。

    再次感谢

    gzhang

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

    您希望控制全局变量在一个文件中的放置。  遗憾的是、没有支持该目标的编译器功能。  最好的解决方案是在手工编码的汇编语言中定义这些全局变量。  然后、变量将始终与它们在汇编代码中写入的顺序相同。  此 论坛主题中讨论了实现细节

    谢谢、此致、

    乔治